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.
Unique, immutable identifier of the portal in Zoho Projects.
You can obtain it from the Get Portals API (the "id" field in the response).
project_id
String
required regex : [0-9]+
Unique, immutable identifier of the project within the specified portal.
You can obtain it from the Get Projects API (the "id" field in the response).
Query Parameters
Param Name
Data Type
Description
type
int
Enter the user type.Accepted values are 1 (Users), 2 (Client Users), 3 (Client Contacts), 6 (Resources).
view_type
String
Enter the view type.Accepted values are 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
default : 1
Enter the page number.
per_page
int
limit : 1-200 default : 100
Enter the number of entries to be displayed per page.
filter
JSONObject
Enter the filter criteria to narrow down the user results.
criteria
JSONArray
max length : 10000 array size : >=0
Enter the list of filter conditions. Each condition is combined using the pattern.
cfid
int
Enter the ID of the custom field.
api_name
String
Enter the API name of the field.
field_name
String
Enter the field name.
criteria_condition
String
max length : 25
Enter the condition for the criteria (for example: is, contains, greater_than).
value
JSONArray
max length : 10000 array size : >=0
Enter the values for the criteria condition. Multiple values can be provided.
relative_columns
JSONArray
max length : 10000 array size : >=0
Enter the relative date filter details to filter records based on dynamic time.
cfid
int
Enter the ID of the custom field.
offset
int
Enter the offset value (hours or days) to add or subtract from the current date.
unit
String
Enter the unit for the offset. Accepted values: days, hours
prior
String
Specify how the offset is applied. Accepted values: before, after, add, subtract
pattern
String
max length : 300
Enter the logical pattern to combine filter conditions (for example: 1 AND 2).
ids
String
Enter the user IDs.
company_ids
String
Enter the customer IDs.
You can obtain it from the Get Customers API (the "id" field in the response).
Request Example
Request Example
cURL
Deluge
Node.js
Ruby
PHP
Python
C
C#
C++
Clojure
Go
HTTP
Java
JS Fetch
JSON
Kotlin
Objective-C
OCaml
PowerShell
R
Swift
cURL
Deluge
Node.js
Ruby
PHP
Python
C
C#
C++
Clojure
Go
HTTP
Java
JS Fetch
JSON
Kotlin
Objective-C
OCaml
PowerShell
R
Swift
curl -X GET \ 'https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users?type=1&view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10&filter=%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%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=4000000029001&company_ids=170876000003941041' \ -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
open Lwt
open Cohttp_lwt_unix
let () =
let enc_type = Uri.pct_encode "1" in
let enc_view_type = Uri.pct_encode "1" in
let enc_sort = Uri.pct_encode "alphabetical:asc" in
let enc_page = Uri.pct_encode "1" in
let enc_per_page = Uri.pct_encode "10" in
let enc_filter = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"project\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
let enc_ids = Uri.pct_encode "4000000029001" in
let enc_company_ids = Uri.pct_encode "170876000003941041" in
let uri = Uri.of_string ("https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/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)
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\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]";
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/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);
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\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" in
let enc_notify = Uri.pct_encode "true" in
let uri = Uri.of_string ("https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/projectusers" ^ "?userdetails=" ^ enc_userdetails ^ "¬ify=" ^ 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)
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\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]";
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/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);
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\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" in
let enc_notify = Uri.pct_encode "true" in
let uri = Uri.of_string ("https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/clientuser" ^ "?userdetails=" ^ enc_userdetails ^ "¬ify=" ^ 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)
{
"error" : {
"status_code" : "403",
"instance" : "/api/v3/portal/45528313/projects/4000000009003/clientuser",
"method" : "POST",
"error_type" : "OPERATIONAL_VALIDATION_ERROR",
"details" : [ {
"message" : "This client company is already associated with this project."
} ],
"title" : "FORBIDDEN"
}
}
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.
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://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]") { 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);
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://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]" ^ "?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)
using System.Net.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://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]");
var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
open Lwt
open Cohttp_lwt_unix
let () =
let uri = Uri.of_string "https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_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)
import Foundation
let url = URL(string: "https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]")!
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()
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://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]") { 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);
open Lwt
open Cohttp_lwt_unix
let () =
let enc_notify = Uri.pct_encode "true" in
let uri = Uri.of_string ("https://projects.zoho.com/api/v3/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]" ^ "?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)
using System.Net.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://projects.zoho.com/api/v3.1/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]");
var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
open Lwt
open Cohttp_lwt_unix
let () =
let uri = Uri.of_string "https://projects.zoho.com/api/v3.1/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_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)
import Foundation
let url = URL(string: "https://projects.zoho.com/api/v3.1/portal/[PORTAL_ID]/projects/23806000097545166/users/[USER_ID]")!
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()
Unique, immutable identifier of the portal in Zoho Projects.
You can obtain it from the Get Portals API (the "id" field in the response).
project_id
String
required regex : [0-9]+
Unique, immutable identifier of the project within the specified portal.
You can obtain it from the Get Projects API (the "id" field in the response).
Query Parameters
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_reporters_active,activate_user_request,sandboxdevelopers,inactive_lite_user,active_lite_user,project_viewers_active
page
int
default : 1
Enter the page number.
per_page
int
default : 100
Enter the number of entries to be displayed per page.
filter
JSONObject
Enter the filter criteria.
criteria
JSONArray
max length : 10000 array size : >=0
Enter the criteria information.
module
String
Enter the module of the field.
field_name
String
Enter the field name.
module_name
String
Enter the module name.
criteria_condition
String
max length : 25
Enter the criteria condition.
value
JSONArray
max length : 10000 array size : >=0
Enter the criteria values.
pattern
String
max length : 300
Specify the filter pattern
sort_by
String
Enter the sort criteria. Accepted values: ASC(field_name) or DESC(field_name). Available fields: first_name, last_name, portal_profile, role, project_rate, project_cost_rate, business_hours, added_to_project_time, updated_in_project_time, last_accessed_on.
Request Example
Request Example
cURL
Deluge
Node.js
Ruby
PHP
Python
C
C#
C++
Clojure
Go
HTTP
Java
JS Fetch
JSON
Kotlin
Objective-C
OCaml
PowerShell
R
Swift
cURL
Deluge
Node.js
Ruby
PHP
Python
C
C#
C++
Clojure
Go
HTTP
Java
JS Fetch
JSON
Kotlin
Objective-C
OCaml
PowerShell
R
Swift
curl -X GET \ 'https://projects.zoho.com/api/v3.1/portal/[PORTAL_ID]/projects/23806000097545166/users?type=portal_user&view_type=active&page=1&per_page=10&filter=%7B%22criteria%22%3A%5B%7B%22module%22%3A%22-%22%2C%22field_name%22%3A%22name%22%2C%22module_name%22%3A%22task%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22Monica%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28first_name%29' \ -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
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\":[{\"module\":\"-\",\"field_name\":\"name\",\"module_name\":\"task\",\"criteria_condition\":\"contains\",\"value\":[\"Monica\"]}],\"pattern\":\"1\"}";
query["sort_by"] = "ASC(first_name)";
var uriBuilder = new UriBuilder("https://projects.zoho.com/api/v3.1/portal/[PORTAL_ID]/projects/23806000097545166/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);
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\":[{\"module\":\"-\",\"field_name\":\"name\",\"module_name\":\"task\",\"criteria_condition\":\"contains\",\"value\":[\"Monica\"]}],\"pattern\":\"1\"}" in
let enc_sort_by = Uri.pct_encode "ASC(first_name)" in
let uri = Uri.of_string ("https://projects.zoho.com/api/v3.1/portal/[PORTAL_ID]/projects/23806000097545166/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)