2024 is the year of the connector - vote here

Explore the Zoho Projects API data model

See how the various Zoho Projects endpoints relate to each other, using our handy Entity Relationship Diagram

Pulling data from the Zoho Projects API is only the first part of your reporting. You also need to understand the relationships between different endpoints - something that APIs typically fail to convey.

At SyncHub, we not only sync your Zoho Projects API endpoints down into a reportable format, we also describe their relationships (e.g. in terms of foreign keys) so that you can quickly get a grasp of your data and how it fits together. This page is intended as technical documentation of these relationships.

Endpoints

Group

Documentation: https://www.zoho.com/projects/help/rest-api/projects-api.html#alink4

Column Type Relates to Notes
RemoteID string - -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
IsDefault boolean - -

Project

Documentation: https://www.zoho.com/projects/help/rest-api/projects-api.html

Column Type Relates to Notes
RemoteID string - -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string -
  • 2 Aug 2024 REF:20240802ENTITYIDS - Most entities have both an 'id' and an 'id_string' field. 'id_string' comes down as a string and 'id' is a long. Except something is happening at ZohoProjects' end where the id (long) is being rounded or something e.g. an 'id_string' of '26788000000036045' but an 'id' of 26788000000036044 (last number changes from 5 to 4). While what comes down from the response is 'wrong' if we parse it as a string here it comes out correct on our side. I was tempted to just use the 'id_string' field to be safe but I have tested thoroughly and am confidant id will be fine to use this way for consistency sake. Just ensure all future id fields are stored as strings and not longs
Name string - -
UpdatedDateLong long - -
WhenUpdatedDate datetime - -
CreatedDateLong long - -
WhenCreatedDate datetime - -
Status string - -
OwnerZpuid string User → Zpuid -
UpdatedByZpuid string User → Zpuid -
CreatedByZpuid string User → Zpuid -
EndDate datetime - -
NoneMilestoneID string -
  • 2 Aug 2024 Foreign Key - An id shared across multiple endpoints (e.g. ProjectTasklist, ProjectTaskSubTask) but doesn't seem to actually link to any milestones
ProjectPercent decimal - -
Role string - -
CustomStatusID string ProjectStatus → StatusID -
BillingStatus string - -
Currency string - -
Key string - -
StartDate datetime - -
GroupID string Group → ID -
BugCountClosed int - -
BugCountOpen int - -
MilestoneCountClosed int - -
MilestoneCountOpen int - -
TaskCountClosed int - -
TaskCountOpen int - -

ProjectActivity

Documentation: https://www.zoho.com/projects/help/rest-api/dashboard-api.html#alink1

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
ProjectID string Project → ID -
Time datetime - -
ActivityFor string - -
ActionID string - -
ProjectEventID string ProjectEvent → ID -
ProjectBugID string ProjectBug → ID -
ProjectTasklistID string ProjectTasklist → ID -
State string - -
ActivityBy string - -

ProjectBug

Documentation: https://www.zoho.com/projects/help/rest-api/bugs-api.html

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Description string - -
ProjectID string Project → ID -
CreatedTimeFormat datetime - -
UpdatedTimeFormat datetime - -
Title string - -
AffectedMilestoneID string ProjectMilestone → ID -
Key string - -
AssigneeZpuid string User → Zpuid -
SeverityID string -
  • 2 Aug 2024 Foreign Key - Unknown, possibly BugDefaultFields but there doesn't seem to be a top level entity for this
ReproducibleID string -
  • 2 Aug 2024 Foreign Key - Unknown, possibly BugDefaultFields but there doesn't seem to be a top level entity for this
ModuleID string -
  • 2 Aug 2024 Foreign Key - Unknown, possibly BugDefaultFields but there doesn't seem to be a top level entity for this
ClassificationID string -
  • 2 Aug 2024 Foreign Key - Unknown, possibly BugDefaultFields but there doesn't seem to be a top level entity for this
MilestoneID string ProjectMilestone → ID -
Closed boolean - -
StatusID string -
  • 2 Aug 2024 Foreign Key - DOES NOT refer to ProjectStatus. Presumably some form of bug status that I can't locate

ProjectEvent

Documentation: https://www.zoho.com/projects/help/rest-api/meetings-api.html

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
ProjectID string Project → ID -
CreatedOn long - -
Occurrences int - -
Reminder string - -
Occurred int - -
Title string - -
CreatedByZpuid string User → Zpuid -
DurationHour string - -
DurationMinutes string - -
Location string - -
ScheduledOn datetime - -
ScheduledOnTo datetime - -
Repeat string - -
IsOpen boolean - -

ProjectForum

Documentation: https://www.zoho.com/projects/help/rest-api/forums-api.html

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
ProjectID string Project → ID -
PostDateFormat datetime - -
LastModifiedTimeFormat datetime - -
CommentCount int - -
Flag string - -
Type string - -
Content string - -
IsStickyPost boolean - -
LastActivityTimeFormat datetime - -
IsAnnouncementPost boolean - -
PostedByZpuid string User → Zpuid -
CategoryID string -
  • 2 Aug 2024 Foreign Key - In testing this the id for the project this forum relates to. I was only able to assign said project as the category in the app but it's possible other options could be available in the right circumstances so I'm not going to add an FK for now

ProjectMilestone

Documentation: https://www.zoho.com/projects/help/rest-api/milestones-api.html

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
ProjectID string Project → ID -
CreatedTimeFormat datetime - -
LastUpdatedTimeFormat datetime - -
Status string - -
OwnerZpuid string User → Zpuid -
Flag string - -
EndDateFormat datetime - -
StartDateFormat datetime - -
Closed boolean - -

ProjectStatus

Documentation: https://www.zoho.com/projects/help/rest-api/projects-api.html#custom-status

Column Type Relates to Notes
RemoteID string - -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
StatusID string - -
StatusName string - -
StatusColor string - -
StatusColorHexcode string - -
IsClosed boolean - -
IsDefaultValue boolean - -
IsDefault boolean - -
Sequence int - -

ProjectTask

Documentation: https://www.zoho.com/projects/help/rest-api/tasks-api.html

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
Description string - -
ProjectID string Project → ID -
CreatedTime datetime - -
LastUpdatedTime datetime - -
StartDateFormat datetime - -
EndDateFormat datetime - -
Duration decimal - -
Key string - -
CreatedByZpuid string User → Zpuid -
IsReminderSet boolean - -
IsRecurrenceSet boolean - -
Subtasks boolean - -
Work string - -
Isparent boolean - -
WorkType string - -
Completed boolean - -
Priority string - -
PercentComplete string - -
OrderSequence int - -
LoggedNonBillableHours decimal - -
LoggedBillableHours decimal - -
TaskListID string ProjectTasklist → ID -
StatusID string -
  • 2 Aug 2024 Foreign Key - DOES NOT refer to ProjectStatus. Presumably some form of task status that I can't locate
MilestoneID string ProjectMilestone → ID -

ProjectTasklist

Documentation: https://www.zoho.com/projects/help/rest-api/tasklists-api.html

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
ProjectID string Project → ID -
CreatedTimeFormat datetime - -
LastUpdatedTimeFormat datetime - -
MilestoneID string -
  • 2 Aug 2024 Foreign Key - This id matches the 'none_milestone_id' found on Projects but it doesn't match any ProjectMilestones
Completed boolean - -
Rolled boolean - -
IsDefault boolean - -
Sequence int - -

ProjectTaskSubTask

Documentation: https://www.zoho.com/projects/help/rest-api/tasks-api.html#alink10

Column Type Relates to Notes
RemoteID string - -
ProjectTaskRemoteID string ProjectTask → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
Description string - -
ParentTaskID string ProjectTask → ID -
CreatedTime datetime - -
LastUpdatedTime datetime - -
CompletedTimeFormat datetime - -
Duration decimal - -
Key string - -
IsReminderSet boolean - -
IsRecurrenceSet boolean - -
Subtasks boolean - -
Work string - -
Isparent boolean - -
WorkType string - -
Completed boolean - -
Priority string - -
PercentComplete string - -
OrderSequence int - -
LoggedNonBillableHours decimal - -
LoggedBillableHours decimal - -
TaskListID string ProjectTasklist → ID -
StatusID string -
  • 2 Aug 2024 Foreign Key - DOES NOT refer to ProjectStatus. Presumably some form of task status that I can't locate
MilestoneID string -
  • 2 Aug 2024 Foreign Key - This id matches the 'none_milestone_id' found on Projects but it doesn't match any ProjectMilestones
CreatedByZpuid string User → Zpuid -
RootTaskID string ProjectTask → ID -

Tag

Documentation: https://www.zoho.com/projects/help/rest-api/tags.html

Column Type Relates to Notes
RemoteID string - -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
ColorClass string - -
CreatedByZpuid string User → Zpuid -

Team

Documentation: https://www.zoho.com/projects/help/rest-api/teams-api.html#alink1

Column Type Relates to Notes
RemoteID string - -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
FormattedUpdatedTime datetime - -
FormattedCreatedTime datetime - -
ProjectCount int - -
OwnerZpuid string User → Zpuid -

User

Documentation: https://www.zoho.com/projects/help/rest-api/users-api.html#alink6

Column Type Relates to Notes
RemoteID string - -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
Name string - -
Zpuid string -
  • 22 Jul 2024 This endpoint has both a 'zpuid' (e.g. 26788000000022003) and an 'id' (e.g. 7000051645) field that both seem to be unique. As there is no single call (the undocumented v3 call I found actually works with both!) I can't see which SHOULD be used. After a lot of digging I have found on creating 2 new users they were BOTH assigned an 'id' of 2 but had unique zpuid's. That makes going with zpuid a must
Active boolean - -
RoleID string - -
ProfileID string - -
Email string - -
IsResource boolean - -

ProjectTag

Column Type Relates to Notes
RemoteID string - -
ProjectRemoteID string Project → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string Tag → ID -
ProjectID string Project → ID -

ProjectBugTag

Column Type Relates to Notes
RemoteID string - -
ProjectBugRemoteID string ProjectBug → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string Tag → ID -
ProjectBugID string ProjectBug → ID -

ProjectEventParticipant

Column Type Relates to Notes
RemoteID string - -
ProjectEventRemoteID string ProjectEvent → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ProjectEventID string ProjectEvent → ID -
ParticipantZpuid string User → Zpuid -

ProjectForumTag

Column Type Relates to Notes
RemoteID string - -
ProjectForumRemoteID string ProjectForum → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string Tag → ID -
ProjectForumID string ProjectForum → ID -

ProjectForumAttachment

Column Type Relates to Notes
RemoteID string - -
ProjectForumRemoteID string ProjectForum → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
Name string - -
ProjectForumID string ProjectForum → ID -
AttachmentID string -
  • 2 Aug 2024 It's entirely possible that this could be an FK for ProjectDocuments but I haven't implemented this due to being unable to get anything to come down.
Trashed boolean - -
CreatedTime long - -
ContentType string - -
Size long - -
UploadedZpuid string User → Zpuid -

ProjectForumFollower

Column Type Relates to Notes
RemoteID string - -
ProjectForumRemoteID string ProjectForum → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ProjectForumID string ProjectForum → ID -
Zpuid string User → Zpuid -

ProjectForumComment

Column Type Relates to Notes
RemoteID string - -
ProjectForumRemoteID string ProjectForum → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
ProjectForumID string ProjectForum → ID -
PostDateFormat datetime - -
IsBestAnswer boolean - -
Level int - -
Type string - -
Content string - -
PostedByZpuid string User → Zpuid -
ParentID string ProjectForumComment → ID -
RootID string ProjectForumComment → ID -

ProjectMilestoneTag

Column Type Relates to Notes
RemoteID string - -
ProjectMilestoneRemoteID string ProjectMilestone → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string Tag → ID -
ProjectMilestoneID string ProjectMilestone → ID -

ProjectTaskOwner

Column Type Relates to Notes
RemoteID string - -
ProjectTaskRemoteID string ProjectTask → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ProjectTaskID string ProjectTask → ID -
LineNumber int - -
Zpuid string User → Zpuid -
Work string - -

ProjectTaskComment

Column Type Relates to Notes
RemoteID string - -
ProjectTaskRemoteID string ProjectTask → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ID string - -
ProjectTaskID string ProjectTask → ID -
CreatedTimeFormat datetime - -
LastModifiedTimeFormat datetime - -
Content string - -
ProjectID string Project → ID -

ProjectTaskSubTaskOwner

Column Type Relates to Notes
RemoteID string - -
ProjectTaskSubTaskRemoteID string ProjectTaskSubTask → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
ProjectTaskSubTaskID string ProjectTaskSubTask → ID -
Zpuid string User → Zpuid -

TeamUser

Column Type Relates to Notes
RemoteID string - -
TeamRemoteID string Team → RemoteID -
WhenUpsertedIntoDataStore datetime - -
MirrorRemoteID int - -
IsDeleted boolean - -
WhenCreated datetime - -
WhenModified datetime - -
TeamID string Team → ID -
Zpuid string User → Zpuid -

Need more?

SyncHub lives and breathes APIs and data. Keep exploring using the links below.