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

Zoho Projects APIs are governed by rate limits to ensure fair usage and optimal performance of all users.

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

Each API response includes the following headers to help you monitor your usage:

  • RateLimit: Total allowed requests in the current window (e.g., 200).
  • RateLimit-Remaining: Remaining requests available in the current window.
  • RateLimit-Window: Duration of the rate limit window (e.g., 120 seconds).
  • RateLimit-Window-Unit: Time unit for the rate limit window (e,g., seconds).
  • Retry-After: Time (in seconds) to wait before retrying the request after the rate limit has been exceeded.
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

RateLimit = 200 RateLimit-Remaining = 199 RateLimit-Window = 120 RateLimit-Window-Unit = seconds Retry-After = 540 (seconds remaining) Note: Retry-After key is returned only when the rate limit has been exceeded.

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 } }
API Names

Understand, locate, and use API names for modules, fields, and related apis in Zoho Projects.

An API name is a unique identifier assigned to every module and field in Zoho Projects.

While display names (labels shown in the UI) can be renamed and may include spaces or special characters, API names provide a consistent reference that remains unchanged across API requests and responses.

Display Name vs. API Name
Aspect Display Name API Name
Purpose Label shown in the UI Identifier used in APIs
Example Start Date start_date
Stability Can be changed Remains constant
Used In Forms, views, layouts Requests, responses, filters
Usage

API names are used in all programmatic interactions with Zoho Projects.

Requests and Responses

API names appear as keys in request payloads and response data. Fields such as priority, status, and department are referenced using their API names rather than display labels.

This applies to operations such as creating, updating, retrieving, and filtering records.

Retrieve API Names

API names for modules and fields in Zoho Projects can be accessed through the product or using APIs.

Method 1:

API names for custom fields are available directly within the Fields section in Zoho Projects, alongside other field details.

  • Navigate to Setup > Customization > Fields.
  • Select the required module.
  • Use the Search Fields option to locate a specific field from the Fields list.
  • Copy the API name to use it in the API operations.
Method 2:

The Modules API returns metadata for all modules in a portal, including their API names. The Fields API returns metadata for all fields in a module, including API names, data types, and whether a field is custom. Together, they provide a complete reference of available modules and fields for API usage.

  • Refer to Get Modules for the list of modules and their API names.
  • Refer to Get Fields Info for field-level details including API names.
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
  • Status and date presets are currently supported on specific modules only; support for the other modules will be provided soon.

Filter Example

{ "criteria": [ { "field_name": "name", "criteria_condition": "contains", "value": ["review"] } ], "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%22name%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22review%22%5D%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 (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 (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": "is", "value": ["2026-12-31"] } ], "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": "priority", "criteria_condition": "is", "value": ["high"] }, { "field_name": "due_date", "criteria_condition": "is", "value": ["2026-12-31"] }, { "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.

Text: Contains

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

Multi-Value IS

{ "criteria": [ { "field_name": "waiting_for", "criteria_condition": "is", "value": ["frontend", "backend"] } ], "pattern": "1" }
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: 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 Presets (Phases and Issues Modules only)

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

Date Preset: Today

{ "criteria": [ { "field_name": "end_date", "criteria_condition": "today" } ], "pattern": "1" }

Date Preset: This Week

{ "criteria": [ { "field_name": "end_date", "criteria_condition": "this_week" } ], "pattern": "1" }

Date Preset: This Month

{ "criteria": [ { "field_name": "end_date", "criteria_condition": "this_month" } ], "pattern": "1" }

Unscheduled Date Field

{ "criteria": [ { "field_name": "end_date", "criteria_condition": "unscheduled" } ], "pattern": "1" }
Status Presets (Projects and Custom Modules only)

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"].

Status Preset: All Open

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

User: Is

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

Overdue + Assigned to Me

{ "criteria": [ { "field_name": "due_date", "criteria_condition": "is", "value": ["2026-12-31"] }, { "field_name": "owner", "criteria_condition": "is", "value": ["4000000006061"] } ], "pattern": "1 AND 2" }
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.

Empty Field Check

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

Ready-made filter payloads for the most common requests. Copy a payload, URL-encode it, and pass it as the filter query parameter.

Common Filters

These filters work across modules such as tasks, issues, and custom modules.

Filter by Open Status

Returns all open tasks in a single request.

Uses status with the custom_condition operator and the ${ALL_OPEN} value.

Filter by Open Status

{ "criteria": [ { "field_name": "status", "criteria_condition": "custom_condition", "value": ["${ALL_OPEN}"] } ], "pattern": "1" }
Filter by Closed Status

Returns all closed tasks in a single request.

Uses status with the custom_condition operator and the ${ALL_CLOSED} value.

Filter by Closed Status

{ "criteria": [ { "field_name": "status", "criteria_condition": "custom_condition", "value": ["${ALL_CLOSED}"] } ], "pattern": "1" }
Filter by Status

Returns tasks in a specific status.

Uses status with the is condition and the status ID as the value.

Filter by Status

{ "criteria": [ { "field_name": "status", "criteria_condition": "is", "value": ["268026000001877009"] } ], "pattern": "1" }
Filter by Owner

Returns tasks owned by a specific user.

Uses owner with the is condition and the user's ZPUID as the value.

Filter by Owner

{ "criteria": [ { "field_name": "owner", "criteria_condition": "is", "value": ["268026000002340076"] } ], "pattern": "1" }
Filter by Name

Returns tasks whose name contains the given text.

Uses name with the contains condition and the search text as the value.

Filter by Name

{ "criteria": [ { "field_name": "name", "criteria_condition": "contains", "value": ["test"] } ], "pattern": "1" }
Filter by Created Time

Returns tasks created after a specific point in time.

Uses created_time with the greater_than condition and a YYYY-MM-DD value.

Filter by Created Time

{ "criteria": [ { "field_name": "created_time", "criteria_condition": "greater_than", "value": ["2026-03-01"] } ], "pattern": "1" }
Filter by Last Modified Time

Returns tasks last updated after a specific date.

Uses last_updated_time with the greater_than condition and a YYYY-MM-DD value.

Filter by Last Modified Time

{ "criteria": [ { "field_name": "last_updated_time", "criteria_condition": "greater_than", "value": ["2026-03-01"] } ], "pattern": "1" }
Task Filters

These filters are available in the Tasks module only.

Filter by Subtask

Returns only subtasks (tasks that have a parent task).

Uses has_parents with value true. Set false to return only top-level tasks. Accepts "true" / "false" or "1" / "0".

Filter by Subtask

{ "criteria": [ { "field_name": "has_parents", "criteria_condition": "is", "value": ["true"] } ], "pattern": "1" }
Filter by Parent Task

Returns the subtasks of a specific parent task.

Uses parent_task with the is condition and the parent task ID as the value.

Filter by Parent Task

{ "criteria": [ { "field_name": "parent_task", "criteria_condition": "is", "value": ["268026000003251123"] } ], "pattern": "1" }
Filter by Task List

Returns tasks that belong to a task list whose name contains the given text.

Uses module_name set to tasklist to filter on the related module's name field.

Filter by Task List

{ "criteria": [ { "module_name": "tasklist", "field_name": "name", "criteria_condition": "contains", "value": ["Codex"] } ], "pattern": "1" }
API Authentication - Overview

Zoho Projects APIs use OAuth 2.0 for authentication. This page gives you an overview of the authentication process. For complete details on OAuth 2.0 flows, registration, token management, and more, refer to Zoho OAuth 2.0 documentation.

How it works

To access Zoho Projects APIs, your application needs an access token obtained through one of the OAuth 2.0 flows. At a high level, the steps are:

  1. Register your application in the Zoho API console.
  2. Get consent from user to access their data and obtain an access token.
  3. Call Zoho Projects APIs using the access token.
Token expiry

Access tokens expire periodically. The expiry duration is returned as expires_in (seconds) in the access token response.

To maintain uninterrupted access, you can request for an optional refresh token, store it, and use it to generate new access tokens as needed.

Token lifecycle
  • Access tokens are required for every API request.
  • Refresh tokens can be used to generate new access tokens without requiring user re-authorization.
  • Users can revoke an application's access at any time, which invalidates the associated tokens.

For more details on token management, refer to Zoho OAuth 2.0 documentation.

Different OAuth flows for different app types

Zoho supports OAuth flows for different application types (server-based, client-based, mobile & desktop-based, limited input devices, and self client). You can choose the flow that matches your application.

For detailed information, refer to the OAuth documentation.

Multi DC support

Zoho operates data centers in multiple regions. If your application serves users across regions, you must enable Multi DC support in the API console and use region-specific endpoints for both OAuth and Zoho Projects API calls.

See Multi-DC Support.

Scopes

Zoho Projects APIs require OAuth scopes to define the level of access your application needs. When requesting for access token, request only the scopes your application requires. These will be displayed to the users when asking for consent.

Scope Description
ZohoProjects.projects.READ Access project data (read-only)
ZohoProjects.projects.ALL Full access to projects
ZohoProjects.tasks.ALL Full access to tasks
ZohoProjects.timesheets.ALL Full access to time logs

To request multiple scopes, separate them with commas:

scope=ZohoProjects.projects.READ,ZohoProjects.tasks.ALL

For more details about scope format, see OAuth Scopes.

Making API calls with access token

To authenticate your API calls, include the access token in the Authorization header of every API request with the prefix Bearer.

Syntax

Authorization: Bearer {access-token-value}

Example

curl -X GET "https://www.zohoapis.com/projects/v3/portals/" -H "Authorization: Bearer 1000.abc123def456..."

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.
API endpoints by data center

When making API calls, you must use the base URL corresponding to your user's data center. The correct URL is returned as api_domain in the access token response.

Data center API base URL
United States (US) https://www.zohoapis.com
European Union (EU) https://www.zohoapis.eu
India (IN) https://www.zohoapis.in
Australia (AU) https://www.zohoapis.com.au
Japan (JP) https://www.zohoapis.jp
Canada (CA) https://www.zohoapis.ca
Important

Never hardcode a single region's URL. Always use the api_domain from the access token response. See Multi-DC Support.

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 } }
Data Backup

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

Specify the sorting order. Accepted values: ASC(field_name) or DESC(field_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%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22manufacturing%22%5D%2C%22cfid%22%3A%22275024000000071003%22%7D%2C%7B%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22275024000000232003%22%5D%2C%22cfid%22%3A%22275024000000071005%22%7D%2C%7B%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22275024000000058005%22%5D%2C%22cfid%22%3A%22275024000000071007%22%7D%2C%7B%22criteria_condition%22%3A%22last_week%22%2C%22value%22%3A%5B%22%24%7BLAST_WEEK%7D%22%5D%2C%22cfid%22%3A%22275024000000071011%22%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%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":[{"criteria_condition":"contains","value":["manufacturing"],"cfid":"275024000000071003"},{"criteria_condition":"is","value":["275024000000232003"],"cfid":"275024000000071005"},{"criteria_condition":"is","value":["275024000000058005"],"cfid":"275024000000071007"},{"criteria_condition":"last_week","value":["${LAST_WEEK}"],"cfid":"275024000000071011"}],"pattern":"1 AND 2 AND 3 AND 4"});
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":[{"criteria_condition":"contains","value":["manufacturing"],"cfid":"275024000000071003"},{"criteria_condition":"is","value":["275024000000232003"],"cfid":"275024000000071005"},{"criteria_condition":"is","value":["275024000000058005"],"cfid":"275024000000071007"},{"criteria_condition":"last_week","value":["${LAST_WEEK}"],"cfid":"275024000000071011"}],"pattern":"1 AND 2 AND 3 AND 4"}');

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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}"
}
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":[{"criteria_condition":"contains","value":["manufacturing"],"cfid":"275024000000071003"},{"criteria_condition":"is","value":["275024000000232003"],"cfid":"275024000000071005"},{"criteria_condition":"is","value":["275024000000058005"],"cfid":"275024000000071007"},{"criteria_condition":"last_week","value":["${LAST_WEEK}"],"cfid":"275024000000071011"}],"pattern":"1 AND 2 AND 3 AND 4"}',
];
$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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}"
}

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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}", 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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}";
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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}", 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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}" "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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}")
    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%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22manufacturing%22%5D%2C%22cfid%22%3A%22275024000000071003%22%7D%2C%7B%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22275024000000232003%22%5D%2C%22cfid%22%3A%22275024000000071005%22%7D%2C%7B%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22275024000000058005%22%5D%2C%22cfid%22%3A%22275024000000071007%22%7D%2C%7B%22criteria_condition%22%3A%22last_week%22%2C%22value%22%3A%5B%22%24%7BLAST_WEEK%7D%22%5D%2C%22cfid%22%3A%22275024000000071011%22%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}");
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":[{"criteria_condition":"contains","value":["manufacturing"],"cfid":"275024000000071003"},{"criteria_condition":"is","value":["275024000000232003"],"cfid":"275024000000071005"},{"criteria_condition":"is","value":["275024000000058005"],"cfid":"275024000000071007"},{"criteria_condition":"last_week","value":["${LAST_WEEK}"],"cfid":"275024000000071011"}],"pattern":"1 AND 2 AND 3 AND 4"}'
});

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":[{"criteria_condition":"contains","value":["manufacturing"],"cfid":"275024000000071003"},{"criteria_condition":"is","value":["275024000000232003"],"cfid":"275024000000071005"},{"criteria_condition":"is","value":["275024000000058005"],"cfid":"275024000000071007"},{"criteria_condition":"last_week","value":["${LAST_WEEK}"],"cfid":"275024000000071011"}],"pattern":"1 AND 2 AND 3 AND 4"}
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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}")
    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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}" 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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}" 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`":[{`"criteria_condition`":`"contains`",`"value`":[`"manufacturing`"],`"cfid`":`"275024000000071003`"},{`"criteria_condition`":`"is`",`"value`":[`"275024000000232003`"],`"cfid`":`"275024000000071005`"},{`"criteria_condition`":`"is`",`"value`":[`"275024000000058005`"],`"cfid`":`"275024000000071007`"},{`"criteria_condition`":`"last_week`",`"value`":[`"${LAST_WEEK}`"],`"cfid`":`"275024000000071011`"}],`"pattern`":`"1 AND 2 AND 3 AND 4`"}"
}
$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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}"
)

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\":[{\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"],\"cfid\":\"275024000000071003\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000232003\"],\"cfid\":\"275024000000071005\"},{\"criteria_condition\":\"is\",\"value\":[\"275024000000058005\"],\"cfid\":\"275024000000071007\"},{\"criteria_condition\":\"last_week\",\"value\":[\"${LAST_WEEK}\"],\"cfid\":\"275024000000071011\"}],\"pattern\":\"1 AND 2 AND 3 AND 4\"}")
]
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":[{"criteria_condition":"contains","value":["manufacturing"],"cfid":"275024000000071003"},{"criteria_condition":"is","value":["275024000000232003"],"cfid":"275024000000071005"},{"criteria_condition":"is","value":["275024000000058005"],"cfid":"275024000000071007"},{"criteria_condition":"last_week","value":["${LAST_WEEK}"],"cfid":"275024000000071011"}],"pattern":"1 AND 2 AND 3 AND 4"}

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." }
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" } ] } ] }
Get Global Statuses

Retrieve the list of global statuses configured for a module along with their metadata such as status ID, name, color, type, and sequence order. Use this API to identify status IDs before performing status-based operations.

GET

/api/v3/portal/[PORTALID]/settings/global-statuses

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 only one filter attribute per request.

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/global-statuses?module=Risk&%22filter%22=%7B%22status_ids%22%3A%22-%22%2C%22status_names%22%3A%22-%22%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/global-statuses";
params = Map();
params.put("module", "Risk");
params.put("filter", {"status_ids":"-","status_names":"-","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/global-statuses');
url.searchParams.append('module', 'Risk');
url.searchParams.append('"filter"', '{"status_ids":"-","status_names":"-","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/global-statuses")
params = {
  "module" => "Risk",
  ""filter"" => "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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"' => '{"status_ids":"-","status_names":"-","search_term":"Zoho Projects"}',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/global-statuses" . "?" . 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/global-statuses"

params = {
    "module": "Risk",
    ""filter"": "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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, "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses?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""] = "{\"status_ids\":\"-\",\"status_names\":\"-\",\"search_term\":\"Zoho Projects\"}";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/global-statuses") { 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, "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses";
        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 "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses" "?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/global-statuses", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    q.Add(""filter"", "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses?module=Risk&%22filter%22=%7B%22status_ids%22%3A%22-%22%2C%22status_names%22%3A%22-%22%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/global-statuses");
uriBuilder.addParameter("module", "Risk");
uriBuilder.addParameter(""filter"", "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses';

const params = new URLSearchParams({
  'module': 'Risk',
  '"filter"': '{"status_ids":"-","status_names":"-","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" = {"status_ids":"-","status_names":"-","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/global-statuses".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    urlBuilder.addQueryParameter(""filter"", "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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" = [@"{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses?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 "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses" ^ "?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" = "{`"status_ids`":`"-`",`"status_names`":`"-`",`"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/global-statuses" + "?" + $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/global-statuses"

params <- list(
  module = "Risk",
  "filter" = "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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/global-statuses")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk"),
    URLQueryItem(name: ""filter"", value: "{\"status_ids\":\"-\",\"status_names\":\"-\",\"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" : { "status_ids" : "-", "status_names" : "-", "search_term" : "Zoho Projects" } page : "1" per_page : "10"

Sample Response

200[ { "id" : "5000000000500", "name" : "Open", "color" : "transparent", "color_hexcode" : "transparent" }, { "id" : "5000000000521", "name" : "Cancelled", "color" : "transparent", "color_hexcode" : "transparent" } ]

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

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" } ] }
Users

This module covers user-related operations within Zoho Projects. Use this API to manage portal users, client users, and resources. You can retrieve user details, add or deactivate users, update user profiles, and view the projects a user is associated with.

Get All Portal Users, Client Users, and Contacts

Retrieve all users, client users, and contacts from the Zoho Projects portal.

GET

/api/v3.1/portal/[PORTALID]/users

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
type

String

Enter the user type.
Accepted values are portal_user,client_user,client_contact

view_type

String

Enter the view type.
Accepted values are active,inactive,active_read_only,inactive_read_only,subordinates_active,direct_reports_active,activate_user_request,sandboxdevelopers

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

sort_by

String

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

  1. first_name
  2. last_name
  3. portal_profile
  4. role
  5. rate_per_hour
  6. cost_per_hour
  7. business_hours
  8. added_time
  9. updated_time
  10. last_accessed_on
  11. api_name of custom 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 GET \
'https://projectsapi.zoho.com/api/v3.1/portal/739121528/users?type=portal_user&view_type=active&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22portal_profile%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28first_name%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users";
params = Map();
params.put("type", "portal_user");
params.put("view_type", "active");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"});
params.put("sort_by", "ASC(first_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.1/portal/739121528/users');
url.searchParams.append('type', 'portal_user');
url.searchParams.append('view_type', 'active');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}');
url.searchParams.append('sort_by', 'ASC(first_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.1/portal/739121528/users")
params = {
  "type" => "portal_user",
  "view_type" => "active",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}",
  "sort_by" => "ASC(first_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 = [
    'type' => 'portal_user',
    'view_type' => 'active',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}',
    'sort_by' => 'ASC(first_name)',
];
$url = "https://projectsapi.zoho.com/api/v3.1/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.1/portal/739121528/users"

params = {
    "type": "portal_user",
    "view_type": "active",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}",
    "sort_by": "ASC(first_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_type = curl_easy_escape(curl, "portal_user", 0);
        char *enc_view_type = curl_easy_escape(curl, "active", 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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(first_name)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users?type=%s&view_type=%s&page=%s&per_page=%s&\"filter\"=%s&sort_by=%s", enc_type, enc_view_type, enc_page, enc_per_page, enc_"filter", 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_type);
        curl_free(enc_view_type);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        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["type"] = "portal_user";
query["view_type"] = "active";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}";
query["sort_by"] = "ASC(first_name)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3.1/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, "portal_user", 0);
        char* enc_view_type = curl_easy_escape(curl, "active", 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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(first_name)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users";
        url += "?type=" + std::string(enc_type);
        url += "&view_type=" + std::string(enc_view_type);
        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);

        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_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "portal_user" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "active" "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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(first_name)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users" "?type=" enc-type "&view_type=" enc-view_type "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&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.1/portal/739121528/users", nil)
    q := req.URL.Query()
    q.Add("type", "portal_user")
    q.Add("view_type", "active")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}")
    q.Add("sort_by", "ASC(first_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.1/portal/739121528/users?type=portal_user&view_type=active&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22portal_profile%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28first_name%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.1/portal/739121528/users");
uriBuilder.addParameter("type", "portal_user");
uriBuilder.addParameter("view_type", "active");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}");
uriBuilder.addParameter("sort_by", "ASC(first_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.1/portal/739121528/users';

const params = new URLSearchParams({
  'type': 'portal_user',
  'view_type': 'active',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}',
  'sort_by': 'ASC(first_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));
type = "portal_user"
view_type = "active"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}
sort_by = "ASC(first_name)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "portal_user")
    urlBuilder.addQueryParameter("view_type", "active")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}")
    urlBuilder.addQueryParameter("sort_by", "ASC(first_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 *encodedType = [@"portal_user" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"active" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(first_name)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3.1/portal/739121528/users?type=%@&view_type=%@&page=%@&per_page=%@&"filter"=%@&sort_by=%@", encodedType, encodedView_type, encodedPage, encodedPer_page, encoded"filter", 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_type = Uri.pct_encode "portal_user" in
  let enc_view_type = Uri.pct_encode "active" 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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" in
  let enc_sort_by = Uri.pct_encode "ASC(first_name)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3.1/portal/739121528/users" ^ "?type=" ^ enc_type ^ "&view_type=" ^ enc_view_type ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&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 = @{
    type = "portal_user"
    view_type = "active"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"field_name`":`"portal_profile`",`"criteria_condition`":`"is`",`"value`":[`"1752587000000097269`"]}],`"pattern`":`"1`"}"
    sort_by = "ASC(first_name)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3.1/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.1/portal/739121528/users"

params <- list(
  type = "portal_user",
  view_type = "active",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}",
  sort_by = "ASC(first_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.1/portal/739121528/users")!
components.queryItems = [
    URLQueryItem(name: "type", value: "portal_user"),
    URLQueryItem(name: "view_type", value: "active"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}"),
    URLQueryItem(name: "sort_by", value: "ASC(first_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

type : "portal_user" view_type : "active" page : "1" per_page : "10" "filter" : { "criteria" : [ { "field_name" : "portal_profile", "criteria_condition" : "is", "value" : [ "1752587000000097269" ] } ], "pattern" : "1" } sort_by : "ASC(first_name)"

Sample Response

200{ "page_info" : { "per_page" : 50, "has_next_page" : true, "count" : 80, "page" : 1 }, "users" : [ { "email" : "monica.hemsworth@zylker.com", "business_hours" : { "name" : "Standard Business Hour", "id" : "4000000893039" }, "updated_time" : "2025-05-06T11:40:23.557Z", "role" : { "name" : "Employee", "id" : "4000000002149" }, "added_time" : "2025-03-05T06:36:04.454Z", "is_confirmed" : true, "last_name" : "Hemsworth", "reporting_to" : { "full_name" : "Cole Anderson", "last_name" : "Anderson", "id" : "4000000548001", "first_name" : "Cole", "zuid" : "66295825" }, "zuid" : "31396112", "last_accessed_on" : "2026-01-14T13:12:47.262Z", "is_resend_invite" : false, "full_name" : "Monica Hemsworth", "user_type" : "portal_user", "portal_profile" : { "name" : "Custom Employee", "id" : "4000000336001", "is_default" : false }, "id" : "4000000549001", "first_name" : "Monica", "status" : "active", "budget" : { "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 } } } ] }
Get Users (Deprecated)

This API is deprecated. Use Get All Portal Users, Client Users, and Contacts instead.

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=portal_user&view_type=active&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%22portal_profile%22%2C%22criteria_condition%22%3A%22is%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%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&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", "portal_user");
params.put("view_type", "active");
params.put("sort", "alphabetical:asc");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
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', 'portal_user');
url.searchParams.append('view_type', 'active');
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":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');
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" => "portal_user",
  "view_type" => "active",
  "sort" => "alphabetical:asc",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}",
  "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' => 'portal_user',
    'view_type' => 'active',
    'sort' => 'alphabetical:asc',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
    '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": "portal_user",
    "view_type": "active",
    "sort": "alphabetical:asc",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}",
    "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, "portal_user", 0);
        char *enc_view_type = curl_easy_escape(curl, "active", 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 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"] = "portal_user";
query["view_type"] = "active";
query["sort"] = "alphabetical:asc";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
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, "portal_user", 0);
        char* enc_view_type = curl_easy_escape(curl, "active", 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 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 "portal_user" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "active" "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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "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", "portal_user")
    q.Add("view_type", "active")
    q.Add("sort", "alphabetical:asc")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    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=portal_user&view_type=active&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%22portal_profile%22%2C%22criteria_condition%22%3A%22is%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%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&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", "portal_user");
uriBuilder.addParameter("view_type", "active");
uriBuilder.addParameter("sort", "alphabetical:asc");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
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': 'portal_user',
  'view_type': 'active',
  'sort': 'alphabetical:asc',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
  '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 = "portal_user"
view_type = "active"
sort = "alphabetical:asc"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
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", "portal_user")
    urlBuilder.addQueryParameter("view_type", "active")
    urlBuilder.addQueryParameter("sort", "alphabetical:asc")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    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 = [@"portal_user" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"active" 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" 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 "portal_user" in
  let enc_view_type = Uri.pct_encode "active" 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" 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 = "portal_user"
    view_type = "active"
    sort = "alphabetical:asc"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"portal_profile`",`"criteria_condition`":`"is`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
    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 = "portal_user",
  view_type = "active",
  sort = "alphabetical:asc",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}",
  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: "portal_user"),
    URLQueryItem(name: "view_type", value: "active"),
    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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"),
    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 : "portal_user" view_type : "active" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "portal_profile", "criteria_condition" : "is", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" } 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" : { "currency_code" : "USD", "formatted_amount" : "$120.00", "currency_id" : "460000000000097", "amount" : 120.0 }, "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$120.00", "currency_id" : "460000000000097", "amount" : 120.0 } } } ] }

Possible Errors

UNKNOWN_PARAMETER HTTP 400

INVALID_PARAMETER_VALUE HTTP 400

USER_HIERARCHY_PLAN_RESTRICTION HTTP 403

Get User Details

Retrieve details of a user from the Zoho Projects portal.

GET

/api/v3.1/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.1/portal/739121528/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/portal/739121528/users/[ZPUID | EMAILID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3.1/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.1/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{ "id" : "4000000549001", "zuid" : "31396112", "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "user_type" : "portal_user", "is_confirmed" : true, "status" : "active", "portal_profile" : { "id" : "4000000336001", "name" : "Custom Employee", "is_default" : false }, "role" : { "id" : "4000000002149", "name" : "Employee" }, "reporting_to" : { "full_name" : "Cole Anderson", "last_name" : "Anderson", "id" : "4000000548001", "first_name" : "Cole", "zuid" : "66295825" }, "business_hours" : { "id" : "4000000893039", "name" : "Standard Business Hour" }, "added_time" : "2025-03-05T06:36:04.454Z", "updated_time" : "2025-05-06T11:40:23.557Z", "last_accessed_on" : "2026-01-14T13:12:47.262Z", "budget" : { "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 } }, "is_resend_invite" : false }
Get User Details (Deprecated)

This API is deprecated. Use Get User Details instead.

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" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "type" : "none" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Get User's Teams

Retrieve the details of the teams associated with a user.

GET

/api/v3/portal/[PORTALID]/users/[USERID]/teams

OAuth Scope:

ZohoProjects.users.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/users/[USERID]/teams?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/teams";
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/users/[USERID]/teams');
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]/teams")
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/users/[USERID]/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/users/[USERID]/teams"

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/users/[USERID]/teams?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/users/[USERID]/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_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]/teams";
        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/users/[USERID]/teams" "?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]/teams", 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/users/[USERID]/teams?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]/teams");
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]/teams';

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/users/[USERID]/teams".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/users/[USERID]/teams?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/users/[USERID]/teams" ^ "?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/users/[USERID]/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/users/[USERID]/teams"

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/users/[USERID]/teams")!
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{ "teams" : [ { "name" : "Testing Team", "id" : "4000000015029" }, { "name" : "Security Team", "id" : "4000000015071" } ] }
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":"200","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":"200","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":"200","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\":\"200\",\"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":"200","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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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%5B%2223806000074760021%22%5D%2C%22bulk_projects%22%3A%7B%22select_all%22%3A%22false%22%2C%22selected%22%3A%7B%22group_ids%22%3A%5B%222380600000612345%22%5D%2C%22project_ids%22%3A%5B%2223806000074760021%22%5D%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%5B%222380600000612345%22%5D%2C%22project_ids%22%3A%5B%2223806000074760021%22%5D%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%22200%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\":\"200\",\"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":"200","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":"200","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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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`":`"200`",`"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\":\"200\",\"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\":\"200\",\"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" : "200", "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":"200","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":"200","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":"200","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\":\"200\",\"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":"200","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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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%5B%2223806000074760021%22%5D%2C%22bulk_projects%22%3A%7B%22select_all%22%3A%22false%22%2C%22selected%22%3A%7B%22group_ids%22%3A%5B%222380600000612345%22%5D%2C%22project_ids%22%3A%5B%2223806000074760021%22%5D%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%5B%222380600000612345%22%5D%2C%22project_ids%22%3A%5B%2223806000074760021%22%5D%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%22200%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\":\"200\",\"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":"200","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":"200","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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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`":`"200`",`"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\":\"200\",\"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\":\"200\",\"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" : "200", "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 details of an existing user in the Zoho Projects portal.

PATCH

/api/v3.1/portal/[PORTALID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
portal_profile

JSONObject

Enter the profile details.

JSONObject

Enter the role details.

reporting_to

JSONObject

Enter the reporting manager details.

business_hours

JSONObject

Enter the business hours details.

bulk_projects

JSONObject

max length : 200000

Enter the project details

JSONObject

Enter the budget details.

apply_portal_rate

boolean

Specify whether the user rate applies at the portal level.
Accepted values: true, false

notify

boolean

Specify whether the user should be notified about updates.
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 PATCH \
'https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}'

url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]";
params = Map();
params.put("portal_profile", {"id":"23806000006123455432"});
params.put("role", {"id":"23806000006123455432"});
params.put("reporting_to", {"id":"23806000006123455432"});
params.put("business_hours", {"id":"23806000006123455432"});
params.put("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"}});
params.put("budget", {"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"});
params.put("apply_portal_rate", false);
params.put("notify", "true");
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.1/portal/739121528/users/[ZPUID | EMAILID]');

const payload = JSON.stringify({"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"});

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.1/portal/739121528/users/[ZPUID | EMAILID]")

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 = '{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"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.1/portal/739121528/users/[ZPUID | EMAILID]"

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

payload = '{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}'

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.1/portal/739121528/users/[ZPUID | EMAILID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"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.Patch, "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]");
request.Content = new StringContent(
    @"{""portal_profile"":{""id"":""23806000006123455432""},""role"":{""id"":""23806000006123455432""},""reporting_to"":{""id"":""23806000006123455432""},""business_hours"":{""id"":""23806000006123455432""},""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""}},""budget"":{""rate_per_hour"":{""amount"":""-""},""cost_rate_per_hour"":{""amount"":""-""},""cost_effective_from_date"":""2024-08-21""},""apply_portal_rate"":false,""notify"":""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.1/portal/739121528/users/[ZPUID | EMAILID]");
        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, "{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"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/patch "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"true\"}"
     :as :json}))

(println (:body response))
package main

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

func main() {
    payload := strings.NewReader("{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"true\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]", 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.1/portal/739121528/users/[ZPUID | EMAILID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"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.1/portal/739121528/users/[ZPUID | EMAILID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"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.1/portal/739121528/users/[ZPUID | EMAILID]")
    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("""{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]"];
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 = [@"{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"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.1/portal/739121528/users/[ZPUID | EMAILID]" 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|{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}|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 = @'
{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"true"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"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\"}},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"},\"apply_portal_rate\":false,\"notify\":\"true\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users/[ZPUID | EMAILID]")!
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 = """
{"portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"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"}},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"},"apply_portal_rate":false,"notify":"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
{ "portal_profile" : { "id" : "23806000006123455432" }, "role" : { "id" : "23806000006123455432" }, "reporting_to" : { "id" : "23806000006123455432" }, "business_hours" : { "id" : "23806000006123455432" }, "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" } }, "budget" : { "rate_per_hour" : { "amount" : "-" }, "cost_rate_per_hour" : { "amount" : "-" }, "cost_effective_from_date" : "2024-08-21" }, "apply_portal_rate" : false, "notify" : "true" }

Sample Response

204 No Content
Update Users

Modify the details of existing users in the Zoho Projects portal.

POST

/api/v3.1/portal/[PORTALID]/users

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description

JSONArray

required

Enter the user 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.1/portal/739121528/users' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form '"users" = [{"id":"23806000006123455432","portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"}}]'

url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users";
params = Map();
params.put("users", [{"id":"23806000006123455432","portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"}}]);
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.1/portal/739121528/users');
url.searchParams.append('"users"', '[{"id":"23806000006123455432","portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"}}]');

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.1/portal/739121528/users")
params = {
  ""users"" => "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]"
}
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 = [
    '"users"' => '[{"id":"23806000006123455432","portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"}}]',
];
$url = "https://projectsapi.zoho.com/api/v3.1/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.1/portal/739121528/users"

params = {
    ""users"": "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]"
}

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_"users" = curl_easy_escape(curl, "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users?\"users\"=%s", enc_"users");

        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_"users");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 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[""users""] = "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3.1/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_"users" = curl_easy_escape(curl, "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users";
        url += "?"users"=" + std::string(enc_"users");

        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_"users");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"users" (java.net.URLEncoder/encode "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users" "?"users"=" enc-"users")]
(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.1/portal/739121528/users", nil)
    q := req.URL.Query()
    q.Add(""users"", "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]")
    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.1/portal/739121528/users?%22users%22=%5B%7B%22id%22%3A%2223806000006123455432%22%2C%22portal_profile%22%3A%7B%22id%22%3A%2223806000006123455432%22%7D%2C%22role%22%3A%7B%22id%22%3A%2223806000006123455432%22%7D%2C%22reporting_to%22%3A%7B%22id%22%3A%2223806000006123455432%22%7D%2C%22business_hours%22%3A%7B%22id%22%3A%2223806000006123455432%22%7D%2C%22budget%22%3A%7B%22rate_per_hour%22%3A%7B%22amount%22%3A%22-%22%7D%2C%22cost_rate_per_hour%22%3A%7B%22amount%22%3A%22-%22%7D%2C%22cost_effective_from_date%22%3A%222024-08-21%22%7D%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.1/portal/739121528/users");
uriBuilder.addParameter(""users"", "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]");
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.1/portal/739121528/users';

const params = new URLSearchParams({
  '"users"': '[{"id":"23806000006123455432","portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"}}]'
});

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));
"users" = [{"id":"23806000006123455432","portal_profile":{"id":"23806000006123455432"},"role":{"id":"23806000006123455432"},"reporting_to":{"id":"23806000006123455432"},"business_hours":{"id":"23806000006123455432"},"budget":{"rate_per_hour":{"amount":"-"},"cost_rate_per_hour":{"amount":"-"},"cost_effective_from_date":"2024-08-21"}}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""users"", "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]")
    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"users" = [@"[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3.1/portal/739121528/users?"users"=%@", encoded"users"];
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_"users" = Uri.pct_encode "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3.1/portal/739121528/users" ^ "?"users"=" ^ enc_"users") 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 = @{
    "users" = "[{`"id`":`"23806000006123455432`",`"portal_profile`":{`"id`":`"23806000006123455432`"},`"role`":{`"id`":`"23806000006123455432`"},`"reporting_to`":{`"id`":`"23806000006123455432`"},`"business_hours`":{`"id`":`"23806000006123455432`"},`"budget`":{`"rate_per_hour`":{`"amount`":`"-`"},`"cost_rate_per_hour`":{`"amount`":`"-`"},`"cost_effective_from_date`":`"2024-08-21`"}}]"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3.1/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.1/portal/739121528/users"

params <- list(
  "users" = "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]"
)

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.1/portal/739121528/users")!
components.queryItems = [
    URLQueryItem(name: ""users"", value: "[{\"id\":\"23806000006123455432\",\"portal_profile\":{\"id\":\"23806000006123455432\"},\"role\":{\"id\":\"23806000006123455432\"},\"reporting_to\":{\"id\":\"23806000006123455432\"},\"business_hours\":{\"id\":\"23806000006123455432\"},\"budget\":{\"rate_per_hour\":{\"amount\":\"-\"},\"cost_rate_per_hour\":{\"amount\":\"-\"},\"cost_effective_from_date\":\"2024-08-21\"}}]")
]
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

"users" : [ { "id" : "23806000006123455432", "portal_profile" : { "id" : "23806000006123455432" }, "role" : { "id" : "23806000006123455432" }, "reporting_to" : { "id" : "23806000006123455432" }, "business_hours" : { "id" : "23806000006123455432" }, "budget" : { "rate_per_hour" : { "amount" : "-" }, "cost_rate_per_hour" : { "amount" : "-" }, "cost_effective_from_date" : "2024-08-21" } } ]

Sample Response

200{ }
Update User (Deprecated)

This API is deprecated. Use Update User instead.

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%5B%222380600000612345%22%5D%2C%22project_ids%22%3A%5B%2223806000074760021%22%5D%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%5B%222380600000612345%22%5D%2C%22project_ids%22%3A%5B%2223806000074760021%22%5D%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

Get User Audit Log

Retrieve audit details of a user from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]/audit-logs

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
token

String

Enter page token

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/users/[ZPUID | EMAILID]/audit-logs?token=-&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22portal_profile%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%221752587000000097269%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/users/[ZPUID | EMAILID]/audit-logs";
params = Map();
params.put("token", "-");
params.put("filter", {"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"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/users/[ZPUID | EMAILID]/audit-logs');
url.searchParams.append('token', '-');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"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/users/[ZPUID | EMAILID]/audit-logs")
params = {
  "token" => "-",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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 = [
    'token' => '-',
    '"filter"' => '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs" . "?" . 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/[ZPUID | EMAILID]/audit-logs"

params = {
    "token": "-",
    ""filter"": "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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_token = curl_easy_escape(curl, "-", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs?token=%s&\"filter\"=%s", enc_token, 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_token);
        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["token"] = "-";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs") { 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_token = curl_easy_escape(curl, "-", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs";
        url += "?token=" + std::string(enc_token);
        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_token);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-token (java.net.URLEncoder/encode "-" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs" "?token=" enc-token "&"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/users/[ZPUID | EMAILID]/audit-logs", nil)
    q := req.URL.Query()
    q.Add("token", "-")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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/users/[ZPUID | EMAILID]/audit-logs?token=-&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22portal_profile%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%221752587000000097269%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/users/[ZPUID | EMAILID]/audit-logs");
uriBuilder.addParameter("token", "-");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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/users/[ZPUID | EMAILID]/audit-logs';

const params = new URLSearchParams({
  'token': '-',
  '"filter"': '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"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));
token =  - 
"filter" = {"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"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/users/[ZPUID | EMAILID]/audit-logs".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("token", "-")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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 *encodedToken = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs?token=%@&"filter"=%@", encodedToken, 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_token = Uri.pct_encode "-" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs" ^ "?token=" ^ enc_token ^ "&"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 = @{
    token = "-"
    "filter" = "{`"criteria`":[{`"field_name`":`"portal_profile`",`"criteria_condition`":`"is`",`"value`":[`"1752587000000097269`"]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/audit-logs" + "?" + $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/[ZPUID | EMAILID]/audit-logs"

params <- list(
  token = "-",
  "filter" = "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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/users/[ZPUID | EMAILID]/audit-logs")!
components.queryItems = [
    URLQueryItem(name: "token", value: "-"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"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

token : - "filter" : { "criteria" : [ { "field_name" : "portal_profile", "criteria_condition" : "is", "value" : [ "1752587000000097269" ] } ], "pattern" : "1" }

Sample Response

200{ "audit_logs" : [ { "action_time" : "2026-03-03T06:31:10.026Z", "id" : "4000001015004", "performed_by" : { "zpuid" : "4000000002143", "zuid" : "18891770", "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "activity" : "user", "field_name" : "profile", "module" : "user", "action" : "update", "project" : { "id" : "4000000012345", "name" : "Sample Project" }, "audit_scope" : "company", "changes" : [ { "cfid" : "4000001005015", "is_encrypted" : false, "old_value" : "Manager", "display_name" : "Portal Profile", "new_value" : "Employee" } ] } ], "next_token" : "eJxLtDK0qi62srBUsgYADmkC1A" }
Project Users

This module covers operations related to project users within Zoho Projects. Use this API to retrieve, add, and delete users associated with a project. You can manage client users, non-project users, and view specific user details within the context of a project.

Get All Users

Retrieve all users from a project.

GET

/api/v3.1/portal/[PORTALID]/projects/[PROJECTID]/users

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
type

String

Enter the user type.
Accepted values are portal_user,client_user,client_contact

view_type

String

Enter the view type.
Accepted values are active,inactive,active_read_only,inactive_read_only,subordinates_active,direct_reports_active,activate_user_request,sandboxdevelopers

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria.

sort_by

String

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

  1. first_name
  2. last_name
  3. portal_profile
  4. role
  5. project_rate
  6. project_cost_rate
  7. business_hours
  8. added_to_project_time
  9. updated_in_project_time
  10. last_accessed_on

Request Example

Request Example cURL
  • cURL
  • Deluge
  • 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.1/portal/739121528/projects/1752587000000097024/users?type=portal_user&view_type=active&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22portal_profile%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28FIRST_NAME%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users";
params = Map();
params.put("type", "portal_user");
params.put("view_type", "active");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"});
params.put("sort_by", "ASC(FIRST_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.1/portal/739121528/projects/1752587000000097024/users');
url.searchParams.append('type', 'portal_user');
url.searchParams.append('view_type', 'active');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}');
url.searchParams.append('sort_by', 'ASC(FIRST_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.1/portal/739121528/projects/1752587000000097024/users")
params = {
  "type" => "portal_user",
  "view_type" => "active",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}",
  "sort_by" => "ASC(FIRST_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 = [
    'type' => 'portal_user',
    'view_type' => 'active',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}',
    'sort_by' => 'ASC(FIRST_NAME)',
];
$url = "https://projectsapi.zoho.com/api/v3.1/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.1/portal/739121528/projects/1752587000000097024/users"

params = {
    "type": "portal_user",
    "view_type": "active",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}",
    "sort_by": "ASC(FIRST_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_type = curl_easy_escape(curl, "portal_user", 0);
        char *enc_view_type = curl_easy_escape(curl, "active", 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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(FIRST_NAME)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users?type=%s&view_type=%s&page=%s&per_page=%s&\"filter\"=%s&sort_by=%s", enc_type, enc_view_type, enc_page, enc_per_page, enc_"filter", 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_type);
        curl_free(enc_view_type);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        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["type"] = "portal_user";
query["view_type"] = "active";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}";
query["sort_by"] = "ASC(FIRST_NAME)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3.1/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, "portal_user", 0);
        char* enc_view_type = curl_easy_escape(curl, "active", 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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(FIRST_NAME)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users";
        url += "?type=" + std::string(enc_type);
        url += "&view_type=" + std::string(enc_view_type);
        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);

        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_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "portal_user" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "active" "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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(FIRST_NAME)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users" "?type=" enc-type "&view_type=" enc-view_type "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&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.1/portal/739121528/projects/1752587000000097024/users", nil)
    q := req.URL.Query()
    q.Add("type", "portal_user")
    q.Add("view_type", "active")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}")
    q.Add("sort_by", "ASC(FIRST_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.1/portal/739121528/projects/1752587000000097024/users?type=portal_user&view_type=active&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22portal_profile%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28FIRST_NAME%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.1/portal/739121528/projects/1752587000000097024/users");
uriBuilder.addParameter("type", "portal_user");
uriBuilder.addParameter("view_type", "active");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}");
uriBuilder.addParameter("sort_by", "ASC(FIRST_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.1/portal/739121528/projects/1752587000000097024/users';

const params = new URLSearchParams({
  'type': 'portal_user',
  'view_type': 'active',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}',
  'sort_by': 'ASC(FIRST_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));
type = "portal_user"
view_type = "active"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"]}],"pattern":"1"}
sort_by = "ASC(FIRST_NAME)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "portal_user")
    urlBuilder.addQueryParameter("view_type", "active")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}")
    urlBuilder.addQueryParameter("sort_by", "ASC(FIRST_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 *encodedType = [@"portal_user" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"active" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(FIRST_NAME)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users?type=%@&view_type=%@&page=%@&per_page=%@&"filter"=%@&sort_by=%@", encodedType, encodedView_type, encodedPage, encodedPer_page, encoded"filter", 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_type = Uri.pct_encode "portal_user" in
  let enc_view_type = Uri.pct_encode "active" 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\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}" in
  let enc_sort_by = Uri.pct_encode "ASC(FIRST_NAME)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/users" ^ "?type=" ^ enc_type ^ "&view_type=" ^ enc_view_type ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&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 = @{
    type = "portal_user"
    view_type = "active"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"field_name`":`"portal_profile`",`"criteria_condition`":`"is`",`"value`":[`"1752587000000097269`"]}],`"pattern`":`"1`"}"
    sort_by = "ASC(FIRST_NAME)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3.1/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.1/portal/739121528/projects/1752587000000097024/users"

params <- list(
  type = "portal_user",
  view_type = "active",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}",
  sort_by = "ASC(FIRST_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.1/portal/739121528/projects/1752587000000097024/users")!
components.queryItems = [
    URLQueryItem(name: "type", value: "portal_user"),
    URLQueryItem(name: "view_type", value: "active"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1\"}"),
    URLQueryItem(name: "sort_by", value: "ASC(FIRST_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

type : "portal_user" view_type : "active" page : "1" per_page : "10" "filter" : { "criteria" : [ { "field_name" : "portal_profile", "criteria_condition" : "is", "value" : [ "1752587000000097269" ] } ], "pattern" : "1" } sort_by : "ASC(FIRST_NAME)"

Sample Response

200{ "page_info" : { "per_page" : 50, "has_next_page" : false, "count" : 30, "page" : 1 }, "users" : [ { "id" : "4000000549001", "zuid" : "31396112", "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "business_hours" : { "id" : "4000000893039", "name" : "Standard Business Hour" }, "project_profile" : { "name" : "Employee", "id" : "4000000002511" }, "role" : { "name" : "Employee", "id" : "4000000002149" }, "added_time" : "2026-01-14T12:56:47.530Z", "is_confirmed" : true, "reporting_to" : { "full_name" : "Cole Anderson", "last_name" : "Anderson", "id" : "4000000548001", "first_name" : "Cole", "zuid" : "66295825" }, "last_accessed_on" : "2026-01-14T13:12:47.262Z", "is_resend_invite" : false, "user_type" : "portal_user", "portal_profile" : { "name" : "Employee", "id" : "4000000002511", "is_default" : true }, "status" : "active", "budget" : { "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "hourly_budget" : "0:00", "budget" : "0.000" } } ] }
Get Project Users (Deprecated)

This API is deprecated. Use Get All Users instead.

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=portal_user&view_type=active&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%22portal_profile%22%2C%22criteria_condition%22%3A%22is%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%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&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", "portal_user");
params.put("view_type", "active");
params.put("sort", "alphabetical:asc");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
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', 'portal_user');
url.searchParams.append('view_type', 'active');
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":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');
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" => "portal_user",
  "view_type" => "active",
  "sort" => "alphabetical:asc",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}",
  "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' => 'portal_user',
    'view_type' => 'active',
    'sort' => 'alphabetical:asc',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
    '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": "portal_user",
    "view_type": "active",
    "sort": "alphabetical:asc",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}",
    "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, "portal_user", 0);
        char *enc_view_type = curl_easy_escape(curl, "active", 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 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"] = "portal_user";
query["view_type"] = "active";
query["sort"] = "alphabetical:asc";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
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, "portal_user", 0);
        char* enc_view_type = curl_easy_escape(curl, "active", 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 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 "portal_user" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "active" "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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "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", "portal_user")
    q.Add("view_type", "active")
    q.Add("sort", "alphabetical:asc")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    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=portal_user&view_type=active&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%22portal_profile%22%2C%22criteria_condition%22%3A%22is%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%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&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", "portal_user");
uriBuilder.addParameter("view_type", "active");
uriBuilder.addParameter("sort", "alphabetical:asc");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
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': 'portal_user',
  'view_type': 'active',
  'sort': 'alphabetical:asc',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
  '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 = "portal_user"
view_type = "active"
sort = "alphabetical:asc"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"portal_profile","criteria_condition":"is","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
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", "portal_user")
    urlBuilder.addQueryParameter("view_type", "active")
    urlBuilder.addQueryParameter("sort", "alphabetical:asc")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    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 = [@"portal_user" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"active" 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" 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 "portal_user" in
  let enc_view_type = Uri.pct_encode "active" 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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" 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 = "portal_user"
    view_type = "active"
    sort = "alphabetical:asc"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"portal_profile`",`"criteria_condition`":`"is`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
    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 = "portal_user",
  view_type = "active",
  sort = "alphabetical:asc",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}",
  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: "portal_user"),
    URLQueryItem(name: "view_type", value: "active"),
    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\":\"portal_profile\",\"criteria_condition\":\"is\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"),
    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 : "portal_user" view_type : "active" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "portal_profile", "criteria_condition" : "is", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" } 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" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "type" : "none" } } ] }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Get Project User Details (Deprecated)

This API is deprecated. Use Get Project User Details instead.

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" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "type" : "none" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Get Project User Details

Retrieve details of a project user from the Zoho Projects portal.

GET

/api/v3.1/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.1/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/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.1/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3.1/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.1/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{ "id" : "4000000549001", "zuid" : "31396112", "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "user_type" : "portal_user", "is_confirmed" : true, "status" : "active", "portal_profile" : { "id" : "4000000002511", "name" : "Employee", "is_default" : true }, "project_profile" : { "id" : "4000000002511", "name" : "Employee" }, "role" : { "id" : "4000000002149", "name" : "Employee" }, "reporting_to" : { "full_name" : "Cole Anderson", "last_name" : "Anderson", "id" : "4000000548001", "first_name" : "Cole", "zuid" : "66295825" }, "business_hours" : { "id" : "4000000893039", "name" : "Standard Business Hour" }, "added_time" : "2026-01-14T12:56:47.530Z", "last_accessed_on" : "2026-01-14T13:12:47.262Z", "budget" : { "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "budget" : "0.000", "hourly_budget" : "0:00" }, "is_resend_invite" : false }
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":"200","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":"200","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":"200","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\":\"200\",\"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":"200","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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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%22200%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\":\"200\",\"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":"200","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":"200","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\":\"200\",\"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\":\"200\",\"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\":\"200\",\"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`":`"200`",`"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\":\"200\",\"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\":\"200\",\"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" : "200", "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" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "budget_threshold" : "0.000", "cost_rate_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 } } } ], "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":"200","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":false}]' --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":"200","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":false}]);
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":"200","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":false}]');
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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]",
  "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":"200","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":false}]',
    '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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]",
    "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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]", 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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]";
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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]", 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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]" "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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]")
    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%22200%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%3Afalse%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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]");
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":"200","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":false}]',
  '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":"200","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":false}]
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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]")
    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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]" 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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]" 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`":`"200`",`"revenue_budget`":`"14.00`",`"cost_budget`":`"20.00`",`"budget_threshold`":`"10.00`",`"is_readonly`":false}]"
    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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]",
  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\":\"200\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":false}]"),
    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" : "200", "revenue_budget" : "14.00", "cost_budget" : "20.00", "budget_threshold" : "10.00", "is_readonly" : false } ] 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" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 }, "budget_threshold" : "0.000", "cost_rate_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$0.00", "currency_id" : "460000000000097", "amount" : 0.0 } } } ], "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" : "haripriya.ss+1", "business_hours" : { "name" : "Standard Business Hours", "id" : 4000000006095 }, "ZPUID" : "4000000016001", "COST_EFFECTIVE_DATE" : "12-18-2025", "ISGROUPUSER" : false, "INVOICE" : "55.00", "EMAIL" : "haripriya.ss+1@zohotest.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%28first_name%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(first_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/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(first_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/users/email-templates")
params = {
  "search_term" => "Monica",
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(first_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 = [
    'search_term' => 'Monica',
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(first_name)',
];
$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(first_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_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(first_name)", 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(first_name)";
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(first_name)", 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(first_name)" "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(first_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/users/email-templates?search_term=Monica&page=1&per_page=10&sort_by=ASC%28first_name%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(first_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/users/email-templates';

const params = new URLSearchParams({
  'search_term': 'Monica',
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(first_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));
search_term = "Monica"
page = "1"
per_page = "10"
sort_by = "ASC(first_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/users/email-templates".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("search_term", "Monica")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(first_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 *encodedSearch_term = [@"Monica" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(first_name)" 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(first_name)" 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(first_name)"
}
$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(first_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/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(first_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

search_term : "Monica" page : "1" per_page : "10" sort_by : "ASC(first_name)"

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

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.

JSONObject

Enter the filter criteria to retrieve specific projects. The filter is a JSON object containing a list of conditions (criteria) and a logical pattern that defines how those conditions are combined.

sort_by

String

Specify the sort order for the results. Use the field API name wrapped in ASC() for ascending or DESC() for descending order. For example: ASC(start_date) to sort by start date ascending, DESC(created_time) to sort by creation time descending.

view_id

long

The ID of a saved custom view to apply. When provided, the saved view's filter criteria, columns, and sort order are applied. If a filter is also provided, the filter conditions are combined (AND) with the custom view's 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?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22project%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%22project%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+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&view_id=23806000074760021' \
-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");
params.put("filter", {"criteria":[{"cfid":"4000000000242","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"});
params.put("sort_by", "ASC(last_modified_time)");
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/projects');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
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/projects")
params = {
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}",
  "sort_by" => "ASC(last_modified_time)",
  "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',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '23806000074760021',
];
$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",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}",
    "sort_by": "ASC(last_modified_time)",
    "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_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"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, "23806000074760021", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects?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\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "23806000074760021";
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);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"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, "23806000074760021", 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);
        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\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"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 "23806000074760021" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects" "?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", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("sort_by", "ASC(last_modified_time)")
    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/projects?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22project%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%22project%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+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&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/projects");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
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/projects';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}',
  'sort_by': 'ASC(last_modified_time)',
  '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"
"filter" = {"criteria":[{"cfid":"4000000000242","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1 AND 2"}
sort_by = "ASC(last_modified_time)"
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/projects".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    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 *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"23806000074760021" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects?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\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "23806000074760021" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects" ^ "?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`":[{`"cfid`":`"4000000000242`",`"field_name`":`"project`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"field_name`":`"project`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1 AND 2`"}"
    sort_by = "ASC(last_modified_time)"
    view_id = "23806000074760021"
}
$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",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}",
  sort_by = "ASC(last_modified_time)",
  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/projects")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    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" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "field_name" : "project", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "project", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1 AND 2" } sort_by : "ASC(last_modified_time)" view_id : "23806000074760021"

Sample Response

200[ { "id" : "7000000082003", "name" : "Website Redesign", "key" : "54", "description" : "Redesign the company website with new branding", "project_type" : "active", "start_date" : "2024-09-30", "end_date" : "2025-06-30", "is_public_project" : "false", "is_strict_project" : "false", "is_rollup_project" : "false", "is_completed" : "false", "is_linked_project" : "false", "percent_complete" : 45, "color" : "#4573d2", "comments_count" : 12, "owner" : { "id" : "6000000002069", "zpuid" : "7000000002083", "name" : "John Doe", "email" : "john@example.com" }, "status" : { "id" : "7000000000361", "name" : "In Progress", "color" : "green", "color_hexcode" : "#3cb371", "is_closed_type" : "false", "is_default" : "false" }, "layout" : { "id" : "7000000000305", "name" : "Standard Layout", "is_default" : "true", "type" : "public" }, "tasks" : { "open_count" : 15, "closed_count" : 10 }, "issues" : { "open_count" : 5, "closed_count" : 3 }, "milestones" : { "open_count" : 2, "closed_count" : 1 }, "created_by" : { "id" : "6000000002069", "zpuid" : "7000000002083", "name" : "John Doe", "email" : "john@example.com" }, "created_time" : "2024-09-30T10:30:00.000Z", "updated_by" : { "id" : "6000000002069", "zpuid" : "7000000002083", "name" : "John Doe", "email" : "john@example.com" }, "modified_time" : "2025-01-15T14:20:00.000Z" } ]
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

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/projects/1752587000000097024' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";
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/projects/1752587000000097024');

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/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"

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_HTTPHEADER => [
    "Authorization: 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.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/projects/1752587000000097024");
        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/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, "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/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("PATCH", "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))
}
PATCH 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 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/projects/1752587000000097024';

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/projects/1752587000000097024")
    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/projects/1752587000000097024"];
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/projects/1752587000000097024" 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/projects/1752587000000097024" -Method PATCH -Headers $headers

$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(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")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { 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" : "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
Get Project Associated Modules Details

Get Project Associated Modules Details.

GET

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

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/modules' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/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/projects/1752587000000097024/modules" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/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/projects/1752587000000097024/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{ "modules" : [ { "module_id" : "4000000000152", "module_name" : "Task", "display_name" : "Task" }, { "module_id" : "4000000000779", "module_name" : "Milestone", "display_name" : "Phase" }, { "module_id" : "4000000000155", "module_name" : "Issue", "display_name" : "Issue" }, { "module_id" : "4000000010001", "module_name" : "cm1", "display_name" : "CM1" }, { "module_id" : "4000000019035", "module_name" : "op", "display_name" : "OP" }, { "module_id" : "4000000028037", "module_name" : "draft", "display_name" : "draft" }, { "module_id" : "4000000028167", "module_name" : "inactive_module", "display_name" : "inactive module" } ] }
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.

Get Custom View Details

Retrieve details of a custom view including its filter criteria, selected fields, and visibility settings.

GET

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

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description
is_showfields

boolean

Specify whether to include all fields in the response.
Accepted values : true or false

project_type

String

required

Specify the project type.
Accepted values : active, archive, 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/projects/customview/1752587000000097269?is_showfields=true&project_type=-' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269";
params = Map();
params.put("is_showfields", "true");
params.put("project_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/customview/1752587000000097269');
url.searchParams.append('is_showfields', 'true');
url.searchParams.append('project_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/customview/1752587000000097269")
params = {
  "is_showfields" => "true",
  "project_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 = [
    'is_showfields' => 'true',
    'project_type' => '-',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269" . "?" . 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/customview/1752587000000097269"

params = {
    "is_showfields": "true",
    "project_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_is_showfields = curl_easy_escape(curl, "true", 0);
        char *enc_project_type = curl_easy_escape(curl, "-", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269?is_showfields=%s&project_type=%s", enc_is_showfields, enc_project_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_is_showfields);
        curl_free(enc_project_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["is_showfields"] = "true";
query["project_type"] = "-";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269") { 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_is_showfields = curl_easy_escape(curl, "true", 0);
        char* enc_project_type = curl_easy_escape(curl, "-", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269";
        url += "?is_showfields=" + std::string(enc_is_showfields);
        url += "&project_type=" + std::string(enc_project_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_is_showfields);
        curl_free(enc_project_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-is_showfields (java.net.URLEncoder/encode "true" "UTF-8")
      enc-project_type (java.net.URLEncoder/encode "-" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269" "?is_showfields=" enc-is_showfields "&project_type=" enc-project_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/customview/1752587000000097269", nil)
    q := req.URL.Query()
    q.Add("is_showfields", "true")
    q.Add("project_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/customview/1752587000000097269?is_showfields=true&project_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/customview/1752587000000097269");
uriBuilder.addParameter("is_showfields", "true");
uriBuilder.addParameter("project_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/customview/1752587000000097269';

const params = new URLSearchParams({
  'is_showfields': 'true',
  'project_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));
is_showfields = "true"
project_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/customview/1752587000000097269".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("is_showfields", "true")
    urlBuilder.addQueryParameter("project_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 *encodedIs_showfields = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedProject_type = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269?is_showfields=%@&project_type=%@", encodedIs_showfields, encodedProject_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_is_showfields = Uri.pct_encode "true" in
  let enc_project_type = Uri.pct_encode "-" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269" ^ "?is_showfields=" ^ enc_is_showfields ^ "&project_type=" ^ enc_project_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 = @{
    is_showfields = "true"
    project_type = "-"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269" + "?" + $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/customview/1752587000000097269"

params <- list(
  is_showfields = "true",
  project_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/customview/1752587000000097269")!
components.queryItems = [
    URLQueryItem(name: "is_showfields", value: "true"),
    URLQueryItem(name: "project_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

is_showfields : "true" project_type : -

Sample Response

200{ "listview_fields" : [ { "is_removable" : true, "is_encrypted" : false, "is_custom_edit" : false, "column_name" : "PERCENTAGE", "is_editable" : true, "is_default_field" : false, "is_resolution" : false, "display_name" : "%", "is_default" : true, "field_properties" : { }, "field_permissions" : { "is_viewable" : true, "is_editable" : true }, "table_name" : "CustomGenerated", "is_default_unassociated" : false, "cfid" : "4000000000371", "is_editform_only" : false, "is_pii" : false, "field_type_integer" : 0, "data_type" : "CHAR", "data_type_integer" : 0, "module_data" : { "sequence" : 1, "is_visible" : true }, "field_type" : "singleline" } ], "customview_fields" : [ { "is_removable" : true, "is_encrypted" : false, "is_custom_edit" : false, "column_name" : "PROJSTATUS", "is_editable" : true, "is_default_field" : false, "is_resolution" : false, "display_name" : "zp.backup.projecttype", "is_default" : true, "field_properties" : { }, "field_permissions" : { "is_viewable" : true, "is_editable" : true }, "table_name" : "Project", "is_default_unassociated" : false, "cfid" : "1", "is_editform_only" : false, "is_pii" : false, "field_type_integer" : 0, "data_type_integer" : 0, "field_type" : "picklist" } ] }
Get Custom View List

Retrieve all custom views available for a project.

GET

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

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/customview' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview";
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/customview');

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/customview")

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/customview";

$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/customview"

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/customview");
        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/customview");

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

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

int main() {
    CURL* 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");
        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/customview"
    {: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/customview", 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/customview HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory sslConnectionSocketFactory = 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");
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/customview';

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/customview")
    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/customview"];
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/customview" 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/customview" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

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

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/customview")!
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()
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.

thirdparty_id

JSONArray

max length : 2500
array size : 0-49

Enter the WorkDrive resource IDs of the files to associate. The WorkDrive resource ID is different from the attachment ID in Zoho Projects. Up to 50 IDs can be passed in a single request. To retrieve the resource ID, refer to the (WorkDrive Upload Large File API). Users without upload permission to the folder or team folder can upload files up to 20 MB only.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • 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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments";
params = Map();
params.put("content", "Sample content");
params.put("attachment_ids", "[12345678987654321]");
params.put("thirdparty_id", ["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]);
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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]});

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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}',
  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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

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

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.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]"",""thirdparty_id"":[""a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0""]}",
    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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
     :as :json}))

(println (:body response))
package main

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

func main() {
    payload := strings.NewReader("{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}")
    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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory sslConnectionSocketFactory = new 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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}";
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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Sample content","attachment_ids":"[12345678987654321]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
import java.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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}""") }

    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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}" 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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}|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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
'@

$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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
)

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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
""".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]", "thirdparty_id" : [ "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0" ] }

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.

thirdparty_id

JSONArray

max length : 2500
array size : 0-49

Enter the WorkDrive resource IDs of the files to associate. The WorkDrive resource ID is different from the attachment ID in Zoho Projects. Up to 50 IDs can be passed in a single request. To retrieve the resource ID, refer to the (WorkDrive Upload Large File API). Users without upload permission to the folder or team folder can upload files up to 20 MB only.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • 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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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]");
params.put("thirdparty_id", ["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]);
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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]});

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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}',
  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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

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

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.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]"",""thirdparty_id"":[""a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0""]}",
    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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
     :as :json}))

(println (:body response))
package main

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

func main() {
    payload := strings.NewReader("{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}")
    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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory sslConnectionSocketFactory = new 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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}";
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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Sample content","attachment_ids":"[12345678987654321]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
import java.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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}""") }

    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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}" 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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}|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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
'@

$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]\",\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
)

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]","thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
""".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]", "thirdparty_id" : [ "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0" ] }

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
Project Export

This module covers operations related to project exports in Zoho Projects. Use these APIs to retrieve, create, update, or delete project exports and to fetch export metadata.

Get Project Export Form

Retrieve the Project export form from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/projects/export-form

OAuth Scope:

ZohoProjects.projects.READ

Query Parameter

Param Name
Data Type
Description
view_id

long

Enter the custom view ID.

export_id

long

Enter the export ID.

mode

String

Specify the form opening action. Accepted values: add,edit,clone

Request Example

Request Example cURL
  • cURL
  • Deluge
  • 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/export-form?view_id=23806000074760021&export_id=17000000049001&mode=add' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form";
params = Map();
params.put("view_id", "23806000074760021");
params.put("export_id", "17000000049001");
params.put("mode", "add");
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/export-form');
url.searchParams.append('view_id', '23806000074760021');
url.searchParams.append('export_id', '17000000049001');
url.searchParams.append('mode', 'add');

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/export-form")
params = {
  "view_id" => "23806000074760021",
  "export_id" => "17000000049001",
  "mode" => "add"
}
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' => '23806000074760021',
    'export_id' => '17000000049001',
    'mode' => 'add',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form" . "?" . 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/export-form"

params = {
    "view_id": "23806000074760021",
    "export_id": "17000000049001",
    "mode": "add"
}

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, "23806000074760021", 0);
        char *enc_export_id = curl_easy_escape(curl, "17000000049001", 0);
        char *enc_mode = curl_easy_escape(curl, "add", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form?view_id=%s&export_id=%s&mode=%s", enc_view_id, enc_export_id, enc_mode);

        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_export_id);
        curl_free(enc_mode);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 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"] = "23806000074760021";
query["export_id"] = "17000000049001";
query["mode"] = "add";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form") { 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, "23806000074760021", 0);
        char* enc_export_id = curl_easy_escape(curl, "17000000049001", 0);
        char* enc_mode = curl_easy_escape(curl, "add", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form";
        url += "?view_id=" + std::string(enc_view_id);
        url += "&export_id=" + std::string(enc_export_id);
        url += "&mode=" + std::string(enc_mode);

        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_export_id);
        curl_free(enc_mode);
        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 "23806000074760021" "UTF-8")
      enc-export_id (java.net.URLEncoder/encode "17000000049001" "UTF-8")
      enc-mode (java.net.URLEncoder/encode "add" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form" "?view_id=" enc-view_id "&export_id=" enc-export_id "&mode=" enc-mode)]
(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/export-form", nil)
    q := req.URL.Query()
    q.Add("view_id", "23806000074760021")
    q.Add("export_id", "17000000049001")
    q.Add("mode", "add")
    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/export-form?view_id=23806000074760021&export_id=17000000049001&mode=add HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form");
uriBuilder.addParameter("view_id", "23806000074760021");
uriBuilder.addParameter("export_id", "17000000049001");
uriBuilder.addParameter("mode", "add");
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/export-form';

const params = new URLSearchParams({
  'view_id': '23806000074760021',
  'export_id': '17000000049001',
  'mode': 'add'
});

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 = "23806000074760021"
export_id = "17000000049001"
mode = "add"
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/export-form".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("view_id", "23806000074760021")
    urlBuilder.addQueryParameter("export_id", "17000000049001")
    urlBuilder.addQueryParameter("mode", "add")
    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 = [@"23806000074760021" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedExport_id = [@"17000000049001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedMode = [@"add" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form?view_id=%@&export_id=%@&mode=%@", encodedView_id, encodedExport_id, encodedMode];
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 "23806000074760021" in
  let enc_export_id = Uri.pct_encode "17000000049001" in
  let enc_mode = Uri.pct_encode "add" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form" ^ "?view_id=" ^ enc_view_id ^ "&export_id=" ^ enc_export_id ^ "&mode=" ^ enc_mode) 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 = "23806000074760021"
    export_id = "17000000049001"
    mode = "add"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export-form" + "?" + $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/export-form"

params <- list(
  view_id = "23806000074760021",
  export_id = "17000000049001",
  mode = "add"
)

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/export-form")!
components.queryItems = [
    URLQueryItem(name: "view_id", value: "23806000074760021"),
    URLQueryItem(name: "export_id", value: "17000000049001"),
    URLQueryItem(name: "mode", value: "add")
]
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 : "23806000074760021" export_id : "17000000049001" mode : "add"

Sample Response

200[ { "name" : "export_type", "value" : "xlsx", "field_type" : "picklist", "align_style" : "HALF", "custom_attr" : "data-zpqa=export_format_field", "field_title" : "zp.general.format", "is_mandatory" : false, "picklists" : [ { "name" : "zp.export.xlsx", "value" : "xlsx", "field_type" : "option", "align_style" : "HALF", "field_title" : "zp.export.xlsx", "is_mandatory" : false, "image_id" : "0" } ], "image_id" : "0" } ]
Export or Schedule Project Export

Create a project export in the Zoho Projects portal.

POST

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

Parameter

Param Name
Data Type
Description
export_id

long

Enter the export ID

file_format

String

Enter the export file format. Accepted values: csv,xlsx

selected_fields

JSONArray

array size : 0-1000

Specify the fields to include in the export

is_file_info_needed

boolean

Specify whether to include export details. Accepted values : true,false

JSONObject

max length : 10000

Enter the filter criteria for the export.

schedule_info

JSONObject

max length : 10000

Enter the schedule details for the export

access_code

String

max length : 50

Enter the access code

group_by

String

Enter the grouping criteria. Accepted values : users,date,client,project

scheduler_status

boolean

Specify whether the scheduled export is active or inactive

project_type

String

Enter the project type. Accepted values : active,archived,both

JSONObject

max length : 100000

Enter the custom view details

required_fields

JSONArray

array size : 0-100000

Specify mandatory fields to include in the export.

is_extension_enabled

boolean

Specify whether export extension is enabled.

extensions

JSONObject

max length : 100000

Enter the extension configuration 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/export' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export";
params = Map();
params.put("export_id", "17000000049001");
params.put("file_format", "xlsx");
params.put("selected_fields", "-");
params.put("is_file_info_needed", true);
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"});
params.put("schedule_info", {"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}});
params.put("access_code", "SampleAccessCode");
params.put("group_by", "-");
params.put("scheduler_status", true);
params.put("project_type", "-");
params.put("view", {"id":"4000000062001","name":"-"});
params.put("required_fields", [{"id":"4000000062001","api_name":"-"}]);
params.put("is_extension_enabled", "-");
params.put("extensions", {"app_id":"-","custom_data":"-","display_data":"-"});
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/export');

const payload = JSON.stringify({"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}});

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/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 = '{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}'

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

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}',
  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/export"

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

payload = '{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}'

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/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}");

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

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.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/export");
request.Content = new StringContent(
    @"{""export_id"":""17000000049001"",""file_format"":""xlsx"",""selected_fields"":""-"",""is_file_info_needed"":true,""filter"":{""criteria"":[{""cfid"":""4000000000242"",""api_name"":""-"",""field_name"":""project"",""criteria_condition"":""contains"",""value"":[""1752587000000097269""],""relative_columns"":[{""cfid"":""4000000000242"",""field_name"":""project"",""offset"":""1"",""unit"":""days"",""prior"":""before"",""is_this_today"":""-""}]}],""pattern"":""1 AND 2""},""schedule_info"":{""name"":""-"",""schedule_datetime"":""-"",""repetative_type"":""-"",""time_span"":""-"",""days_of_week"":""-"",""repeat_on_type"":""-"",""repeat_on_value"":""-"",""ends_after_type"":""-"",""ends_after_value"":""-"",""skip_type"":""-"",""mail_to_user"":{""zpuid"":""4000000002055""}},""access_code"":""SampleAccessCode"",""group_by"":""-"",""scheduler_status"":true,""project_type"":""-"",""view"":{""id"":""4000000062001"",""name"":""-""},""required_fields"":[{""id"":""4000000062001"",""api_name"":""-""}],""is_extension_enabled"":""-"",""extensions"":{""app_id"":""-"",""custom_data"":""-"",""display_data"":""-""}}",
    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/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, "{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_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/export"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}"
     :as :json}))

(println (:body response))
package main

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

func main() {
    payload := strings.NewReader("{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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/export HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

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

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}";
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/export';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
import java.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/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("""{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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 = [@"{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}" 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/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|{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}|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 = @'
{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
'@

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

$response | ConvertTo-Json
library(httr)

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

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"export_id\":\"17000000049001\",\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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 = """
{"export_id":"17000000049001","file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
""".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
{ "export_id" : "17000000049001", "file_format" : "xlsx", "selected_fields" : "-", "is_file_info_needed" : true, "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "project", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "project", "offset" : "1", "unit" : "days", "prior" : "before", "is_this_today" : "-" } ] } ], "pattern" : "1 AND 2" }, "schedule_info" : { "name" : "-", "schedule_datetime" : "-", "repetative_type" : "-", "time_span" : "-", "days_of_week" : "-", "repeat_on_type" : "-", "repeat_on_value" : "-", "ends_after_type" : "-", "ends_after_value" : "-", "skip_type" : "-", "mail_to_user" : { "zpuid" : "4000000002055" } }, "access_code" : "SampleAccessCode", "group_by" : "-", "scheduler_status" : true, "project_type" : "-", "view" : { "id" : "4000000062001", "name" : "-" }, "required_fields" : [ { "id" : "4000000062001", "api_name" : "-" } ], "is_extension_enabled" : "-", "extensions" : { "app_id" : "-", "custom_data" : "-", "display_data" : "-" } }

Sample Response

200{ "export_id" : "17000000049001", "schedule_id" : "17000000049003" }
Get Project Exports Details

Retrieve the details of project exports from the Zoho Projects portal.

GET

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

Query Parameter

Param Name
Data Type
Description
view

String

Enter the export type. Accepted values: portal,all

JSONObject

Enter the filter criteria.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

is_completed

boolean

required

Specify whether to retrieve details of the completed exports 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 GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export?view=-&%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%22project%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%22project%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+AND+2%22%7D&page=1&per_page=10&is_completed=true' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export";
params = Map();
params.put("view", "-");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"});
params.put("page", "1");
params.put("per_page", "10");
params.put("is_completed", 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/projects/export');
url.searchParams.append('view', '-');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('is_completed', '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/projects/export")
params = {
  "view" => "-",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  "page" => "1",
  "per_page" => "10",
  "is_completed" => "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 = [
    'view' => '-',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"}',
    'page' => '1',
    'per_page' => '10',
    'is_completed' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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/export"

params = {
    "view": "-",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
    "page": "1",
    "per_page": "10",
    "is_completed": "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_view = curl_easy_escape(curl, "-", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_is_completed = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export?view=%s&\"filter\"=%s&page=%s&per_page=%s&is_completed=%s", enc_view, enc_"filter", enc_page, enc_per_page, enc_is_completed);

        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);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_is_completed);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 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"] = "-";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
query["page"] = "1";
query["per_page"] = "10";
query["is_completed"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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_view = curl_easy_escape(curl, "-", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_is_completed = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export";
        url += "?view=" + std::string(enc_view);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&is_completed=" + std::string(enc_is_completed);

        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);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_is_completed);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-view (java.net.URLEncoder/encode "-" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-is_completed (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export" "?view=" enc-view "&"filter"=" enc-"filter" "&page=" enc-page "&per_page=" enc-per_page "&is_completed=" enc-is_completed)]
(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/export", nil)
    q := req.URL.Query()
    q.Add("view", "-")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("is_completed", "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/projects/export?view=-&%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%22project%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%22project%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+AND+2%22%7D&page=1&per_page=10&is_completed=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/export");
uriBuilder.addParameter("view", "-");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("is_completed", "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/projects/export';

const params = new URLSearchParams({
  'view': '-',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"}',
  'page': '1',
  'per_page': '10',
  'is_completed': '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));
view =  - 
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"}
page = "1"
per_page = "10"
is_completed = 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/export".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("view", "-")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("is_completed", "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 *encodedView = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIs_completed = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export?view=%@&"filter"=%@&page=%@&per_page=%@&is_completed=%@", encodedView, encoded"filter", encodedPage, encodedPer_page, encodedIs_completed];
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 = Uri.pct_encode "-" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_is_completed = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export" ^ "?view=" ^ enc_view ^ "&"filter"=" ^ enc_"filter" ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&is_completed=" ^ enc_is_completed) 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 = "-"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"project`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"field_name`":`"project`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`",`"is_this_today`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
    page = "1"
    per_page = "10"
    is_completed = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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/export"

params <- list(
  view = "-",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  page = "1",
  per_page = "10",
  is_completed = "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/projects/export")!
components.queryItems = [
    URLQueryItem(name: "view", value: "-"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "is_completed", 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

view : - "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "project", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "project", "offset" : "1", "unit" : "days", "prior" : "before", "is_this_today" : "-" } ] } ], "pattern" : "1 AND 2" } page : "1" per_page : "10" is_completed : true

Sample Response

200[ { "project_type" : "active", "scheduler_status" : "scheduled", "is_extension_enabled" : false, "schedule_info" : { "executed_count" : "0", "ends_after_type" : "0", "skip_type" : "1", "time_span" : "1", "next_schedule_time" : "2026-02-14T10:10:00.000Z", "name" : "PROJECT EXPORT", "repetative_type" : "1", "id" : "27000000009003", "status" : "on" }, "created_by" : { "zpuid" : "27000000007031", "name" : "Muthu export", "last_name" : "export", "first_name" : "Muthu", "email" : "muthurani.r+export3@zohotest.com", "zuid" : "18953478" }, "view" : { "name" : "", "id" : "27000000006267" }, "exported_time" : "2026-02-14T10:10:00.000Z", "notify_users" : [ { "zpuid" : "27000000007031", "name" : "Muthu export", "last_name" : "export", "first_name" : "Muthu", "email" : "muthurani.r+export3@zohotest.com", "zuid" : "18953478" } ], "id" : "27000000009001", "is_file_info_needed" : false, "file_format" : "xlsx", "status" : "SCHEDULED" } ]
Update Project Export

Modify the details of an existing project export in the Zoho Projects portal.

PATCH

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

Parameter

Param Name
Data Type
Description
file_format

String

required

Enter the export file format. Accepted values: csv,xlsx

selected_fields

JSONArray

array size : 0-1000

Specify the fields to include in the export

is_file_info_needed

boolean

Specify whether to include export details. Accepted values : {regex}

JSONObject

max length : 10000

Enter the filter criteria for the export

schedule_info

JSONObject

max length : 10000

Enter the schedule details for the export

access_code

String

max length : 50

Enter the access cod

group_by

String

Enter the grouping criteria. Accepted values : users,date,client,project

scheduler_status

boolean

Specify whether the scheduled export is active or inactive

project_type

String

Enter the project type. Accepted values : active,archived,both

JSONObject

max length : 100000

Enter the custom view details

required_fields

JSONArray

array size : 0-100000

Specify mandatory fields to include in the export.

is_extension_enabled

boolean

Specify whether export extension is enabled.

extensions

JSONObject

max length : 100000

Enter the extension configuration 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/export/[EXPORTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]";
params = Map();
params.put("file_format", "xlsx");
params.put("selected_fields", "-");
params.put("is_file_info_needed", true);
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"});
params.put("schedule_info", {"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}});
params.put("access_code", "SampleAccessCode");
params.put("group_by", "-");
params.put("scheduler_status", true);
params.put("project_type", "-");
params.put("view", {"id":"4000000062001","name":"-"});
params.put("required_fields", [{"id":"4000000062001","api_name":"-"}]);
params.put("is_extension_enabled", "-");
params.put("extensions", {"app_id":"-","custom_data":"-","display_data":"-"});
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/export/[EXPORTID]');

const payload = JSON.stringify({"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}});

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/export/[EXPORTID]")

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 = '{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}'

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

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}',
  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/export/[EXPORTID]"

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

payload = '{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}'

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/export/[EXPORTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}");

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

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.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/export/[EXPORTID]");
request.Content = new StringContent(
    @"{""file_format"":""xlsx"",""selected_fields"":""-"",""is_file_info_needed"":true,""filter"":{""criteria"":[{""cfid"":""4000000000242"",""api_name"":""-"",""field_name"":""project"",""criteria_condition"":""contains"",""value"":[""1752587000000097269""],""relative_columns"":[{""cfid"":""4000000000242"",""field_name"":""project"",""offset"":""1"",""unit"":""days"",""prior"":""before"",""is_this_today"":""-""}]}],""pattern"":""1 AND 2""},""schedule_info"":{""name"":""-"",""schedule_datetime"":""-"",""repetative_type"":""-"",""time_span"":""-"",""days_of_week"":""-"",""repeat_on_type"":""-"",""repeat_on_value"":""-"",""ends_after_type"":""-"",""ends_after_value"":""-"",""skip_type"":""-"",""mail_to_user"":{""zpuid"":""4000000002055""}},""access_code"":""SampleAccessCode"",""group_by"":""-"",""scheduler_status"":true,""project_type"":""-"",""view"":{""id"":""4000000062001"",""name"":""-""},""required_fields"":[{""id"":""4000000062001"",""api_name"":""-""}],""is_extension_enabled"":""-"",""extensions"":{""app_id"":""-"",""custom_data"":""-"",""display_data"":""-""}}",
    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/export/[EXPORTID]");
        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, "{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_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/export/[EXPORTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}"
     :as :json}))

(println (:body response))
package main

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

func main() {
    payload := strings.NewReader("{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]", 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/export/[EXPORTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}";
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/export/[EXPORTID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
import java.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/export/[EXPORTID]")
    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("""{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]"];
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 = [@"{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}" 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/export/[EXPORTID]" 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|{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}|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 = @'
{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"file_format\":\"xlsx\",\"selected_fields\":\"-\",\"is_file_info_needed\":true,\"filter\":{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"project\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1 AND 2\"},\"schedule_info\":{\"name\":\"-\",\"schedule_datetime\":\"-\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"days_of_week\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"mail_to_user\":{\"zpuid\":\"4000000002055\"}},\"access_code\":\"SampleAccessCode\",\"group_by\":\"-\",\"scheduler_status\":true,\"project_type\":\"-\",\"view\":{\"id\":\"4000000062001\",\"name\":\"-\"},\"required_fields\":[{\"id\":\"4000000062001\",\"api_name\":\"-\"}],\"is_extension_enabled\":\"-\",\"extensions\":{\"app_id\":\"-\",\"custom_data\":\"-\",\"display_data\":\"-\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]")!
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 = """
{"file_format":"xlsx","selected_fields":"-","is_file_info_needed":true,"filter":{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"project","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"project","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1 AND 2"},"schedule_info":{"name":"-","schedule_datetime":"-","repetative_type":"-","time_span":"-","days_of_week":"-","repeat_on_type":"-","repeat_on_value":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","mail_to_user":{"zpuid":"4000000002055"}},"access_code":"SampleAccessCode","group_by":"-","scheduler_status":true,"project_type":"-","view":{"id":"4000000062001","name":"-"},"required_fields":[{"id":"4000000062001","api_name":"-"}],"is_extension_enabled":"-","extensions":{"app_id":"-","custom_data":"-","display_data":"-"}}
""".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
{ "file_format" : "xlsx", "selected_fields" : "-", "is_file_info_needed" : true, "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "project", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "project", "offset" : "1", "unit" : "days", "prior" : "before", "is_this_today" : "-" } ] } ], "pattern" : "1 AND 2" }, "schedule_info" : { "name" : "-", "schedule_datetime" : "-", "repetative_type" : "-", "time_span" : "-", "days_of_week" : "-", "repeat_on_type" : "-", "repeat_on_value" : "-", "ends_after_type" : "-", "ends_after_value" : "-", "skip_type" : "-", "mail_to_user" : { "zpuid" : "4000000002055" } }, "access_code" : "SampleAccessCode", "group_by" : "-", "scheduler_status" : true, "project_type" : "-", "view" : { "id" : "4000000062001", "name" : "-" }, "required_fields" : [ { "id" : "4000000062001", "api_name" : "-" } ], "is_extension_enabled" : "-", "extensions" : { "app_id" : "-", "custom_data" : "-", "display_data" : "-" } }

Sample Response

204 No Content
Delete Project Export

Remove a project export from the Zoho Projects portal.

DELETE

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

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/export/[EXPORTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]";
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/export/[EXPORTID]');

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/export/[EXPORTID]")

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/export/[EXPORTID]";

$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/export/[EXPORTID]"

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/export/[EXPORTID]");
        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/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/export/[EXPORTID]");
        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/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("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/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/export/[EXPORTID]");
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/export/[EXPORTID]';

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/export/[EXPORTID]")
    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/export/[EXPORTID]"];
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/export/[EXPORTID]" 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/export/[EXPORTID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/export/[EXPORTID]"

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/export/[EXPORTID]")!
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.

status_mapping

JSONArray

array size : >=0

Specify how source task statuses are mapped to target statuses in the cloned 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]/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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}'

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", "-");
params.put("status_mapping", [{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]);
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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]});

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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}'

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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","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/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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}'

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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"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.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"":""-"",""status_mapping"":[{""old_status"":{""id"":""4000000062001""},""new_status"":{""id"":""4000000062001"",""name"":""Authentication Module Security Audit"",""color"":""-"",""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/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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"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/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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"type\":\"Task\"}}]}"
     :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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"type\":\"Task\"}}]}")
    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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"type\":\"Task\"}}]}";
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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]})
};

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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","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/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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}""") }

    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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"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/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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}|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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","type":"Task"}}]}
'@

$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\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Authentication Module Security Audit\",\"color\":\"-\",\"type\":\"Task\"}}]}"
)

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":"-","status_mapping":[{"old_status":{"id":"4000000062001"},"new_status":{"id":"4000000062001","name":"Authentication Module Security Audit","color":"-","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
{ "to_project_id" : "-", "to_milestone_id" : "-", "start_date" : "05/28/2025", "include_closed_tasks_as_open" : "-", "status_mapping" : [ { "old_status" : { "id" : "4000000062001" }, "new_status" : { "id" : "4000000062001", "name" : "Authentication Module Security Audit", "color" : "-", "type" : "Task" } } ] }

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.

thirdparty_id

JSONArray

max length : 2500
array size : 0-49

Enter the WorkDrive resource IDs of the files to associate. The WorkDrive resource ID is different from the attachment ID in Zoho Projects. Up to 50 IDs can be passed in a single request. To retrieve the resource ID, refer to the (WorkDrive Upload Large File API). Users without upload permission to the folder or team folder can upload files up to 20 MB only.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • 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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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"]);
params.put("thirdparty_id", ["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]);
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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]});

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}',
  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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

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

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.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""],""thirdparty_id"":[""a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0""]}",
    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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
     :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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}")
    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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory sslConnectionSocketFactory = new 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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}";
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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]})
};

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
import java.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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}""") }

    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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}" 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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}|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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
'@

$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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
)

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
""".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" ], "thirdparty_id" : [ "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0" ] }

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.

thirdparty_id

JSONArray

max length : 2500
array size : 0-49

Enter the WorkDrive resource IDs of the files to associate. The WorkDrive resource ID is different from the attachment ID in Zoho Projects. Up to 50 IDs can be passed in a single request. To retrieve the resource ID, refer to the (WorkDrive Upload Large File API). Users without upload permission to the folder or team folder can upload files up to 20 MB only.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • 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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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"]);
params.put("thirdparty_id", ["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]);
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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]});

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}',
  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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}'

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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

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

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.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""],""thirdparty_id"":[""a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0""]}",
    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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
     :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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}")
    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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory sslConnectionSocketFactory = new 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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}";
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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]})
};

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
import java.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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}""") }

    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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}" 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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}|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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
'@

$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\"],\"thirdparty_id\":[\"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0\"]}"
)

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"],"thirdparty_id":["a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"]}
""".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" ], "thirdparty_id" : [ "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0" ] }

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 } } ]
Get Status Transition

Retrieve the status transitions history of an issue.

GET

/api/v3.1/portal/[PORTALID]/projects/[PROJECTID]/issues/[ISSUEID]/status-timeline

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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/status-timeline' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/status-timeline" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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.1/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/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" : { "id" : "96879000000047135", "name" : "Open", "color" : "#f56b62", "is_closed" : false }, "previous_status" : { "id" : "0", "name" : "-", "color" : "", "is_closed" : false }, "updated_by" : { "id" : 83641347, "zpuid" : "139655000000415001", "name" : "John Kevin", "email" : "johnkevin@gmail.com", "first_name" : "John", "last_name" : "Kevin" }, "updated_on" : "2026-01-28T04:00:27.434Z" }
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