Projects

Projects

A project is a series of tasks performed over a period of time, to achieve certain targets. There can be many number of people working on a single project and a project may consist of single or multiple tasks. A project is billed and charged upon a customer whom the project was taken up for.

Attribute

project_id
string
Unique identifier for the project.
project_name
string
Name of the project. Max-length [100]
project_code
string
Code to identify a project.
description
string
Description of the project.
status
string
Current status of the project.
status_formatted
string
Formatted status of the project.
billing_rate_frequency
string
Specifies how the billing rate is applied for the project.
billing_type
string
The way you bill your customer. Allowed Values: fixed_cost_for_project, based_on_project_hours, based_on_staff_hours, based_on_task_hours, based_on_project_days, based_on_staff_days and based_on_task_days
billing_type_formatted
string
Formatted billing type of the project.
is_from_zoho_projects
boolean
Indicates whether the project originated from Zoho Projects integration.
budget_type
string
The way you budget. Allowed Values: total_project_cost, total_project_hours, hours_per_task and hours_per_staff
budget_type_formatted
string
Formatted value of the budget type.
budget_amount
double
Represents the total budget amount allocated for the project.
budget_amount_formatted
string
Formatted representation of the project’s budget amount.
cost_budget_amount
double
Represents the cost budget amount allocated for internal expenses or cost tracking.
cost_budget_amount_formatted
string
Formatted representation of the cost budget amount.
is_budget_threshold_notification_enabled
boolean
Indicates whether notifications are enabled when the project’s spending reaches the defined budget threshold.
is_client_approval_needed
boolean
Specifies whether client approval is required.
is_user_approval_needed
boolean
Specifies whether internal user approval is required.
client_approved_hours
string
Total number of hours approved by the client for the project or user.
client_pending_approval_hours
string
Total number of hours that are pending client approval.
client_pending_submission_hours
string
Total number of hours that are pending submission to the client.
pending_approval_hours
string
Total number of hours that are pending approval within the organization.
pending_submission_hours
string
Total number of hours that are pending submission within the organization.
total_timesheet_cost_amount
float
Represents the total cost amount derived from all submitted timesheets for the project.
total_timesheet_cost_amount_formatted
string
Formatted value of the total timesheet cost amount based on the project's currency settings.
hours_per_day
string
Represents the number of working hours allocated per day for the project in HH:MM format.
is_valid_project_head
boolean
Indicates whether the assigned project head is valid and active in the system.
budget_threshold
double
Specifies the budget utilization percentage at which notifications are triggered.
budget_threshold_formatted
string
Formatted representation of the budget threshold percentage.
is_expense_inclusive
integer
Indicates whether expenses are included in the project’s billing calculation. 1 represents true, and 0 represents false.
is_expense_inclusive_formatted
integer
Formatted version of the expense inclusion flag.
total_hours
string
Total hours spent on the project.
total_amount
string
Total billed amount for the project in base currency.
total_amount_formatted
string
Formatted total amount with currency symbol.
total_amount_expense_inclusive
string
Represents the total amount including expenses, if applicable.
billed_hours
string
Total number of billed hours for the project in HH:MM format.
billed_amount
string
Total amount billed to the customer for the project.
billed_amount_formatted
string
Formatted billed amount including currency.
un_billed_hours
string
Total number of hours logged but not yet billed.
un_billed_amount
string
Amount corresponding to unbilled hours.
un_billed_amount_formatted
string
Formatted representation of unbilled amount.
billable_hours
string
Total billable hours for the project.
billable_amount
string
Total billable amount based on logged billable hours.
billable_amount_formatted
string
Formatted billable amount including currency symbol.
non_billable_hours
string
Total number of non-billable hours logged for the project.
non_billable_amount
string
Amount associated with non-billable project hours.
non_billable_amount_formatted
string
Formatted representation of the non-billable amount.
has_active_recurring_profiles
boolean
Indicates whether the project has any active recurring billing profiles.
created_time
string
Time when the project was created.
zohopeople_project_id
string
Unique identifier for the corresponding project in Zoho People, if linked.
is_from_zoho_people
boolean
Indicates whether the project was imported or synced from Zoho People.
zohoworkerly_project_id
string
Reference ID of the project in Zoho Workerly integration.
show_in_dashboard
boolean
Determines whether the project should be displayed on the dashboard view.
customer
object
Details of the customer associated with the project.
Show Sub-Attributes arrow
customer_id
string
Unique identifier of the customer.
customer_name
string
Name of the customer.
first_name
string
First name of the customer, if available.
email
string
Email address of the customer.
photo_url
string
URL of the customer's profile photo.
customer_vat_treatment
string
VAT treatment of the customer
currency
object
Currency details associated with the project.
Show Sub-Attributes arrow
currency_id
string
Unique identifier of the currency.
currency_code
string
ISO 4217 currency code used for the project.
project_head
object
The person who is the project head.
Show Sub-Attributes arrow
user_id
string
Unique identifier for the project head.
user_name
string
Name of the project head.
user_email
string
Email address of the project head.
created_by
object
Details of the user who created the project.
Show Sub-Attributes arrow
user_id
string
Unique identifier of the user who created the project.
last_modified_by
object
Details of the user who last modified the project.
Show Sub-Attributes arrow
user_id
string
Unique identifier of the user who last modified the project.
accounts_budgets
array
List of account-level budget details associated with the project.
Show Sub-Attributes arrow
budget_id
string
Unique identifier of the budget.
name
string
Name of the budget.
status
string
Current status of the budget.
frequency
string
Frequency of the budget cycle.
year
date
Start date or year of the budget.
tasks
array
List of tasks associated with the project.
Show Sub-Attributes arrow
task_id
string
Unique identifier of the task.
task_name
string
Name of the task.
description
string
Description of the task.
rate
float
Rate associated with the task.
budget_hours
string
Budgeted hours for the task.
budget_hours_in_time
string
Budget hours in HH:MM format.
total_hours
string
Total hours logged for the task.
billed_hours
string
Total hours billed for the task.
un_billed_hours
string
Total hours logged but not yet billed.
billable_hours
string
Total billable hours for the task.
non_billable_hours
string
Total non-billable hours for the task.
status
string
Status of the task.
is_billable
boolean
Indicates if the task is billable.
zohopeople_job_id
string
Zoho People job ID associated with the task.
users
array
List of users assigned to the project along with their roles, rates, and logged hours.
Show Sub-Attributes arrow
user
object
Details of the user assigned to the project.
Show Sub-Attributes arrow
user_id
string
Unique identifier of the user.
is_current_user
boolean
Indicates whether the user is the one currently logged in.
user_name
string
Name of the user assigned to the project.
user_email
string
Email address of the user.
user_status
string
Internal status of the user, such as active or inactive.
user_status_formatted
string
Formatted value of the user status.
role
object
Details of the user's role in the project.
Show Sub-Attributes arrow
role_id
string
Unique identifier of the user's role.
role_name
string
Technical name of the role assigned to the user.
role_name_formatted
string
Formatted value of the user’s role.
rate
double
Billing rate assigned to the user for this project.
rate_formatted
string
Formatted billing rate with currency symbol.
budget_hours
double
Number of hours allocated to the user as per the project budget.
budget_hours_formatted
string
Formatted representation of the user’s budget hours.
budget_hours_in_time
string
Budget hours displayed in HH:MM format.
budget_hours_in_time_formatted
string
Formatted version of budget hours in HH:MM format.
total_hours
string
Total hours logged by the user for the project.
billed_hours
string
Total number of hours billed for the user.
un_billed_hours
string
Total number of hours logged but not yet billed for the user.
billable_hours
string
Total billable hours logged by the user.
non_billable_hours
string
Total number of non-billable hours logged by the user.
cost_rate
float
The cost rate associated with the user.
cost_rate_formatted
string
Formatted cost rate.
cost_effective_from_date
date
The date from which the specified cost rate becomes effective.
cost_effective_from_date_formatted
string
Formatted display version of the effective-from date based on the user's locale or date settings.
staff
object
Additional staff-related details for the user.
Show Sub-Attributes arrow
role
object
Role details of the user in the staff context.
Show Sub-Attributes arrow
role_name
string
Technical name of the user’s staff role.
role_name_formatted
string
Formatted name of the user’s staff role.
user_status
string
Status of the user in the staff context.
user_status_formatted
string
Formatted staff status.

Example

{ "project_id": "460000000044019", "project_name": "Network Distribution", "project_code": "ND-2025", "description": "This project is about the distribution of network devices across the city.", "status": "active", "status_formatted": "Active", "billing_rate_frequency": "hourly", "billing_type": "based_on_project_hours", "billing_type_formatted": "Hourly Rate Per Project", "is_from_zoho_projects": false, "budget_type": "total_project_cost", "budget_type_formatted": "Total Project Cost", "budget_amount": 50000, "budget_amount_formatted": "$50000.00", "cost_budget_amount": 100, "cost_budget_amount_formatted": "$100.00", "is_budget_threshold_notification_enabled": false, "is_client_approval_needed": false, "is_user_approval_needed": false, "client_approved_hours": "12:30", "client_pending_approval_hours": "05:00", "client_pending_submission_hours": "03:45", "pending_approval_hours": "04:15", "pending_submission_hours": "02:30", "total_timesheet_cost_amount": 2500.75, "total_timesheet_cost_amount_formatted": "$2,500.75", "hours_per_day": "00:00", "is_valid_project_head": true, "budget_threshold": 80, "budget_threshold_formatted": "80.00%", "is_expense_inclusive": 0, "is_expense_inclusive_formatted": 0, "total_hours": "120.00", "total_amount": "", "total_amount_formatted": "$0.00", "total_amount_expense_inclusive": "", "billed_hours": "00:00", "billed_amount": "", "billed_amount_formatted": "$0.00", "un_billed_hours": "00:00", "un_billed_amount": "", "un_billed_amount_formatted": "$0.00", "billable_hours": "100.00", "billable_amount": "", "billable_amount_formatted": "$0.00", "non_billable_hours": "00:00", "non_billable_amount": "", "non_billable_amount_formatted": "$0.00", "has_active_recurring_profiles": false, "created_time": "2025-08-06T10:05:43+0530", "zohopeople_project_id": "", "is_from_zoho_people": false, "zohoworkerly_project_id": "", "show_in_dashboard": true, "customer": { "customer_id": "5000000005007", "customer_name": "Customer 1", "first_name": "", "email": "", "photo_url": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?&d=mm", "customer_vat_treatment": "" }, "currency": { "currency_id": "5000000000091", "currency_code": "USD" }, "project_head": { "user_id": "460000000044002", "user_name": "John Doe", "user_email": "johndoe@example.com" }, "created_by": { "user_id": "5000000003159" }, "last_modified_by": { "user_id": "5000000003159" }, "accounts_budgets": [ { "budget_id": "50000000012345", "name": "Marketing Budget", "status": "active", "frequency": "monthly", "year": "2025-01-01" } ], "tasks": [ { "task_id": "50000000012345", "task_name": "Design Website", "description": "UI/UX design for the project.", "rate": 50, "budget_hours": "10:00", "budget_hours_in_time": "10:00", "total_hours": "08:30", "billed_hours": "06:00", "un_billed_hours": "02:30", "billable_hours": "08:00", "non_billable_hours": "00:30", "status": "completed", "is_billable": true, "zohopeople_job_id": "50000000098765" } ], "users": [ { "user": { "user_id": "5000000003159", "is_current_user": true, "user_name": "John Doe", "user_email": "johndoe@example.com", "user_status": "active", "user_status_formatted": "Active", "role": { "role_id": "5000000000995", "role_name": "admin", "role_name_formatted": "Admin" } }, "rate": 0, "rate_formatted": "$0.00", "budget_hours": 0, "budget_hours_formatted": "00:00", "budget_hours_in_time": "00:00", "budget_hours_in_time_formatted": "00:00", "total_hours": "00:00", "billed_hours": "00:00", "un_billed_hours": "00:00", "billable_hours": "00:00", "non_billable_hours": "00:00", "cost_rate": 75, "cost_rate_formatted": "$75.00", "cost_effective_from_date": "2025-01-01", "cost_effective_from_date_formatted": "01/01/2025", "staff": { "role": { "role_name": "staff", "role_name_formatted": "Staff" }, "user_status": "active", "user_status_formatted": "Active" } } ] }

Get projects list

List all projects with pagination.
OAuth Scope : ZohoBooks.projects.READ

Query Parameters

organization-id
string
(Required)
customer_id
string
Search projects by customer id.
currency
string
Search projects by currency id.
user_id
string
Search projects by user id.
tax_id
string
Filter records by tax id.
customview_id
string
Fetch data for a specific custom view using its unique ID.
zohopeople_reference_id
string
Search projects by Zoho People reference id.
zohotempstaffing_reference_id
string
Search projects by Zoho Workerly reference id.
project_name
string
Search projects by their name. Allowed modifications are project_name_startswith, project_name_contains
description
string
Search projects based on their description. Allowed modifications are description_startswith, description_contains, description_in, description_not_in
show_card_view
boolean
Show projects in card view. Allowed Values: true and false
can_include_sub_customer_transactions
boolean
Include transactions of sub-customers when set to true.
billing_type
string
Filter projects by billing type. Allowed Values: fixed_cost_for_project, based_on_project_hours, based_on_staff_hours, based_on_task_hours, based_on_project_days, based_on_staff_days and based_on_task_days
budget_type
string
Filter projects by budget type. Allowed Values: total_project_cost, total_project_hours, hours_per_task and hours_per_staff
status
string
Filter projects by status. Allowed Values: active, inactive and completed
last_modified_time
string
Search projects by their last modified time.
filter_by
string
Filter projects by any status. Allowed Values: Status.All, Status.Active, Status.Inactive, Status.Completed and Status.ZohoPeople
sort_column
string
Sort projects. Allowed Values: project_name, customer_name, rate and created_time
search_text
string
Search projects based on a search text.
created_time_millis
long
Filter records based on creation time in milliseconds. Allowed modifications are created_time_millis_less_than, created_time_millis_less_equals, created_time_millis_greater_than, and created_time_millis_greater_equals.
last_modified_time_millis
long
Filter records based on last modified time in milliseconds. Allowed modifications are last_modified_time_millis_less_than, last_modified_time_millis_less_equals, last_modified_time_millis_greater_than, and last_modified_time_millis_greater_equals.
txn
boolean
Filter results to include only transaction-related records. Allowed values: true and false.
page
integer
Page number to be fetched. Default value is 1.
per_page
integer
Number of records to be fetched per page. Default value is 200.

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects?organization-id=10234695" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects?organization-id=10234695") .get() .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/books/v4/projects?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url 'https://www.zohoapis.com/books/v4/projects?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "success", "projects": [ { "project_id": "460000000044019", "project_name": "Network Distribution", "project_code": "ND-2025", "customer": { "customer_id": "460000000044001", "customer_name": "SAF Instruments Inc" }, "description": "This project is about the distribution of network devices across the city.", "can_be_invoiced": "true", "status": "active", "status_formatted": "Active", "billing_type": "based_on_project_hours", "billing_type_formatted": "Hourly Rate Per Project", "rate": "100.00", "rate_formatted": "$100.00", "created_time": "2025-08-06T10:05:43+0530", "last_modified_time": "2025-08-06T10:05:43+0530", "total_hours": "120.00", "billable_hours": "100.00", "project_head": { "user_id": "460000000044002", "user_name": "John Doe", "user_email": "johndoe@example.com" }, "has_attachment": true, "budget_type": "total_project_cost", "budget_amount": 50000, "budget_hours": 120.5, "currency": { "currency_code": "USD" }, "show_to_all_users": false, "zprojects_project_id": "982000000457001", "users_working": 5, "_links": { "self": "/projects/982000000567001" } }, {...}, {...} ] }

Bulk delete projects

Delete multiple projects at once.
OAuth Scope : ZohoBooks.projects.DELETE

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "The project has been deleted." }

Get a project

Get the details of a project.
OAuth Scope : ZohoBooks.projects.READ

Path Parameters

project_id
string
(Required)
Unique identifier of the project.

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695" type: GET headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695") .get() .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'GET', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("GET", "/books/v4/projects/460000000044019?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "GET", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/460000000044019?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request GET \ --url 'https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "success", "project": { "project_id": "460000000044019", "project_name": "Network Distribution", "project_code": "ND-2025", "description": "This project is about the distribution of network devices across the city.", "status": "active", "status_formatted": "Active", "billing_rate_frequency": "hourly", "billing_type": "based_on_project_hours", "billing_type_formatted": "Hourly Rate Per Project", "is_from_zoho_projects": false, "budget_type": "total_project_cost", "budget_type_formatted": "Total Project Cost", "budget_amount": 50000, "budget_amount_formatted": "$50000.00", "cost_budget_amount": 100, "cost_budget_amount_formatted": "$100.00", "is_budget_threshold_notification_enabled": false, "is_client_approval_needed": false, "is_user_approval_needed": false, "client_approved_hours": "12:30", "client_pending_approval_hours": "05:00", "client_pending_submission_hours": "03:45", "pending_approval_hours": "04:15", "pending_submission_hours": "02:30", "total_timesheet_cost_amount": 2500.75, "total_timesheet_cost_amount_formatted": "$2,500.75", "hours_per_day": "00:00", "is_valid_project_head": true, "budget_threshold": 80, "budget_threshold_formatted": "80.00%", "is_expense_inclusive": 0, "is_expense_inclusive_formatted": 0, "total_hours": "120.00", "total_amount": "", "total_amount_formatted": "$0.00", "total_amount_expense_inclusive": "", "billed_hours": "00:00", "billed_amount": "", "billed_amount_formatted": "$0.00", "un_billed_hours": "00:00", "un_billed_amount": "", "un_billed_amount_formatted": "$0.00", "billable_hours": "100.00", "billable_amount": "", "billable_amount_formatted": "$0.00", "non_billable_hours": "00:00", "non_billable_amount": "", "non_billable_amount_formatted": "$0.00", "has_active_recurring_profiles": false, "created_time": "2025-08-06T10:05:43+0530", "zohopeople_project_id": "", "is_from_zoho_people": false, "zohoworkerly_project_id": "", "show_in_dashboard": true, "customer": { "customer_id": "5000000005007", "customer_name": "Customer 1", "first_name": "", "email": "", "photo_url": "https://secure.gravatar.com/avatar/00000000000000000000000000000000?&d=mm", "customer_vat_treatment": "" }, "currency": { "currency_id": "5000000000091", "currency_code": "USD" }, "project_head": { "user_id": "460000000044002", "user_name": "John Doe", "user_email": "johndoe@example.com" }, "created_by": { "user_id": "5000000003159" }, "last_modified_by": { "user_id": "5000000003159" }, "documents": [ { "document_id": "460000000038034", "document_name": "proposal.pdf", "document_size": "1024000", "document_size_formatted": "1 MB", "document_type": "pdf", "source": "desktop", "source_formatted": "Desktop", "uploaded_by": { "user_id": "982000000567025", "user_name": "John Doe" }, "uploaded_on": "2023-04-01", "uploaded_on_formatted": "01-04-2023", "alter_text": "Project Proposal", "attachment_order": "1", "can_send_in_mail": "true", "can_show_in_portal": "true", "is_custom_field_document": "false", "comment": { "comment_id": "460000000038035" }, "is_comment": "false" } ], "accounts_budgets": [ { "budget_id": "50000000012345", "name": "Marketing Budget", "status": "active", "frequency": "monthly", "year": "2025-01-01" } ], "tasks": [ { "task_id": "50000000012345", "task_name": "Design Website", "description": "UI/UX design for the project.", "rate": 50, "budget_hours": "10:00", "budget_hours_in_time": "10:00", "total_hours": "08:30", "billed_hours": "06:00", "un_billed_hours": "02:30", "billable_hours": "08:00", "non_billable_hours": "00:30", "status": "completed", "is_billable": true, "zohopeople_job_id": "50000000098765" } ], "users": [ { "user": { "user_id": "5000000003159", "is_current_user": true, "user_name": "John Doe", "user_email": "johndoe@example.com", "user_status": "active", "user_status_formatted": "Active", "role": { "role_id": "5000000000995", "role_name": "admin", "role_name_formatted": "Admin" } }, "rate": 0, "rate_formatted": "$0.00", "budget_hours": 0, "budget_hours_formatted": "00:00", "budget_hours_in_time": "00:00", "budget_hours_in_time_formatted": "00:00", "total_hours": "00:00", "billed_hours": "00:00", "un_billed_hours": "00:00", "billable_hours": "00:00", "non_billable_hours": "00:00", "cost_rate": 75, "cost_rate_formatted": "$75.00", "cost_effective_from_date": "2025-01-01", "cost_effective_from_date_formatted": "01/01/2025", "staff": { "role": { "role_name": "staff", "role_name_formatted": "Staff" }, "user_status": "active", "user_status_formatted": "Active" } } ] } }

Delete project

Deleting a existing project.
OAuth Scope : ZohoBooks.projects.DELETE

Path Parameters

project_id
string
(Required)
Unique identifier of the project.

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects/460000000044019?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/460000000044019?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects/460000000044019?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "The project has been deleted." }

Delete project document

Deleting a document associated with a project.
OAuth Scope : ZohoBooks.projects.DELETE

Path Parameters

project_id
string
(Required)
Unique identifier of the project.
document_id
string
(Required)
Unique identifier of the document.

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/460000000044019/documents/460000000044027?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/460000000044019/documents/460000000044027?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/460000000044019/documents/460000000044027?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects/460000000044019/documents/460000000044027?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/460000000044019/documents/460000000044027?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects/460000000044019/documents/460000000044027?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "The attachment has been removed from the project." }

Delete project comment

Deleting a comment associated with a project.
OAuth Scope : ZohoBooks.projects.DELETE

Path Parameters

project_id
string
(Required)
Unique identifier of the project.
comment_id
string
(Required)
Unique identifier of the comment.

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/460000000044019/comments/460000000044027?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/460000000044019/comments/460000000044027?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/460000000044019/comments/460000000044027?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects/460000000044019/comments/460000000044027?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/460000000044019/comments/460000000044027?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects/460000000044019/comments/460000000044027?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "The comment has been deleted." }

Delete project task

Deleting a task associated with the project.
OAuth Scope : ZohoBooks.projects.DELETE

Path Parameters

project_id
string
(Required)
Unique identifier of the project.
task_id
string
(Required)
Unique identifier of the task.

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/460000000044019/tasks/460000000044027?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/460000000044019/tasks/460000000044027?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/460000000044019/tasks/460000000044027?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects/460000000044019/tasks/460000000044027?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/460000000044019/tasks/460000000044027?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects/460000000044019/tasks/460000000044027?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "The task has been deleted." }

Delete project user

Deleting a user associated with a project.
OAuth Scope : ZohoBooks.projects.DELETE

Path Parameters

project_id
string
(Required)
Unique identifier of the project.
user_id
string
(Required)
Unique identifier of the user.

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/460000000044019/users/460000000044027?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/460000000044019/users/460000000044027?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/460000000044019/users/460000000044027?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects/460000000044019/users/460000000044027?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/460000000044019/users/460000000044027?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects/460000000044019/users/460000000044027?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "The staff has been removed" }

Delete project timer

Delete the timer of a project.
OAuth Scope : ZohoBooks.projects.DELETE

Query Parameters

organization-id
string
(Required)

Request Example

Click to copy
headers_data = Map(); headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"); response = invokeUrl [ url: "https://www.zohoapis.com/books/v4/projects/timer?organization-id=10234695" type: DELETE headers: headers_data connection: <connection_name> ]; info response;
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://www.zohoapis.com/books/v4/projects/timer?organization-id=10234695") .delete(null) .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f") .build(); Response response = client.newCall(request).execute();
const options = { method: 'DELETE', headers: { Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' } }; fetch('https://www.zohoapis.com/books/v4/projects/timer?organization-id=10234695', options) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err));
import http.client conn = http.client.HTTPSConnection("www.zohoapis.com") headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } conn.request("DELETE", "/books/v4/projects/timer?organization-id=10234695", headers=headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
const http = require("https"); const options = { "method": "DELETE", "hostname": "www.zohoapis.com", "port": null, "path": "/books/v4/projects/timer?organization-id=10234695", "headers": { "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" } }; const req = http.request(options, function (res) { const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { const body = Buffer.concat(chunks); console.log(body.toString()); }); }); req.end();
curl --request DELETE \ --url 'https://www.zohoapis.com/books/v4/projects/timer?organization-id=10234695' \ --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'

Response Example

{ "code": 0, "message": "Timer has been deleted." }