Skip to main content

Projects

The Project entity is the central object in InLoox. Via the OData API you can create, update, delete projects and perform extensive actions such as member management, categorization, or planning versions.

OData endpoint base

All endpoints use the base path /odata/Project. For the dynamic list view including custom fields, /odata/DynamicProject is available.


Data Model

The following table shows the key properties of the ApiProject entity:

PropertyTypeDescription
ProjectIdGuid (UUID)Unique identifier of the project (primary key).
NamestringName of the project.
NumberPrefixstring?Prefix of the project number.
NumberIncrementialint32?Sequential number of the project number.
NumberSuffixstring?Suffix of the project number.
Numberstring?Calculated full project number (prefix + sequential number + suffix, read-only).
ProjectNumberAndNamestring?Combined project number and name (read-only).
ClientIdGuid?Associated client (client ID).
ClientNamestring?Name of the associated client (read-only).
ClientNumberstring?Client number (read-only).
ClientNumberNamestring?Combined client number and name (read-only).
DivisionIdGuid?Associated division.
DivisionNamestring?Name of the division (read-only).
DivisionDescriptionstring?Description of the division (read-only).
ProjectStatusIdGuid?Current project status (foreign key).
ProjectStatusNamestring?Name of the current project status (read-only).
ProjectStatusProgressint32?Progress value of the project status (read-only).
StatusLabelstring?Display label for the project status (read-only).
ComputedProgressdouble?Calculated progress (0–1, read-only).
PercentCompleteint32?Completion percentage (read-only).
Completeint32Number of completed tasks (read-only).
CompleteActualdoubleActual completion rate (read-only).
CompletePlanint32Number of planned completed tasks (read-only).
CompletePlanActualint32Planned vs. actual completion (read-only).
Priorityint32Priority of the project. Values: 0 = Low, 1 = Normal, 2 = High. Default is 1 (Normal).
LockModeint32Lock mode. Values: 0 = None, 1 = Locked, 2 = No Notifications.
IsLockedbooleanIndicates whether the project is locked.
StartDateDateTimeOffsetStart date.
EndDateDateTimeOffsetEnd date.
PlannedStartDateDateTimeOffset?Planned start date.
PlannedEndDateDateTimeOffset?Planned end date.
IsEndDateFixedbooleanIndicates whether the end date is fixed.
BackwardSchedulingbooleanBackward scheduling enabled.
IsRecycledbooleanIndicates whether the project is in the recycle bin.
IsArchivedbooleanIndicates whether the project is archived.
IsRequestbooleanIndicates whether this is a project request.
IsFavoriteboolean?Indicates whether the project is marked as a favorite by the current user.
CreatedByContactIdGuidContact ID of the creator.
CreatedByNamestring?Display name of the creator (read-only).
CreatedByContactImageIdGuid?Image ID of the creator contact (read-only).
CreatedDateTimeDateTimeOffset?Creation date and time (read-only).
ChangedByContactIdGuid?Contact ID of the last editor.
LastChangedByNamestring?Display name of the last editor (read-only).
ChangedByContactImageIdGuid?Image ID of the last editor contact (read-only).
LastChangedDateTimeDateTimeOffset?Date and time of the last change (read-only).
ClosedByNamestring?Display name of the contact who closed the project (read-only).
ClosedDateTimeDateTimeOffset?Date and time the project was closed (read-only).
ImageIdGuid?ID of the project image.
PortfolioIdGuid?Associated portfolio.
DescriptionTextstring?Project description as plain text.
DescriptionHTMLstring?Project description as HTML.
Categoriesstring?Comma-separated categories.
Notestring?Project note.
NotificationsSuppressedbooleanNotifications suppressed.
ClusterNamestring?Name of the cluster the project is assigned to (read-only).
StoreTypeint32Document storage type of the project.
DocumentFolderstring?Path to the project document folder.
FirstManagerstring?Display name of the first manager (read-only).
FirstTeamMemberstring?Display name of the first team member (read-only).
FirstCustomerstring?Display name of the first customer contact (read-only).
FirstPartnerstring?Display name of the first partner contact (read-only).
FirstAdditionalContactstring?Display name of the first additional contact (read-only).
ManagerProjectContactstring?Comma-separated list of manager names (read-only).
TeamProjectContactstring?Comma-separated list of team member names (read-only).
CustomerProjectContactstring?Comma-separated list of customer contact names (read-only).
PartnerProjectContactstring?Comma-separated list of partner contact names (read-only).
AdditionalProjectContactstring?Comma-separated list of additional contact names (read-only).
ReviewerProjectContactstring?Comma-separated list of reviewer contact names (read-only).
AmountPlannedCostsdoubleTotal amount of planned costs (read-only).
AmountActualCostsdoubleTotal amount of actual costs (read-only).
AmountPlannedProfitdoubleTotal planned profit (read-only).
AmountProfitdoubleTotal actual profit (read-only).
AmountProfitDifferencedoubleDifference between planned and actual profit (read-only).
PlannedCostsOpexdoublePlanned operational costs (OpEx, read-only).
ActualCostsOpexdoubleActual operational costs (OpEx, read-only).
PlannedCostsResourcesdoublePlanned resource costs (read-only).
PlannedCostsOtherdoublePlanned other costs (read-only).
CostsOtherdoubleActual other costs (read-only).
PlannedRevenuesdoubleTotal planned revenues (read-only).
RevenuesdoubleTotal actual revenues (read-only).
ActivityCostAmountdoubleTotal amount of activity-based costs (read-only).
PlannedWorkAmountdoubleTotal planned work effort in hours (read-only).
BudgetIndicatorboolean?Indicates whether a budget indicator is set (read-only).
AllPositionsBilledboolean?Indicates whether all positions are billed (read-only).
TotalEffortdouble?Total effort of all tasks in hours (read-only).
TotalEffortCompletedouble?Effort of completed tasks in hours (read-only).
TotalEffortRemainingdouble?Remaining effort in hours (read-only).
TotalEffortPlandouble?Total planned effort in hours (read-only).
TotalEffortOverdueint32Number of overdue efforts (read-only).
TotalEffortPlanDueint32Number of planned due efforts (read-only).
TotalEffortTimeEntriesdouble?Total effort from time entries in hours (read-only).
TimeEntriesDurationdoubleTotal duration of time entries in hours (read-only).
UnassignedTimeEntriesDurationdoubleDuration of unassigned time entries (read-only).
ProjectDurationdoubleTotal project duration in days (read-only).
ProjectDurationRemainingdoubleRemaining project duration in days (read-only).
PlannedDurationdoublePlanned project duration in days (read-only).
PlannedDurationRemainingdoubleRemaining planned duration in days (read-only).
FirstNotCompletedPlanningDateDateTimeOffset?Date of the first incomplete planning element (read-only).
TimeWarningPlanningEndExceededboolean?Indicates whether the planning end date has been exceeded (read-only).
TimeWarningProjectEndExceededboolean?Indicates whether the project end date has been exceeded (read-only).
RiskScoreint32Risk assessment score (read-only).
ValueScoreint32Value assessment score (read-only).
SizeScoreint32Size assessment score (read-only).
CalculatedScoredoubleCalculated total score (read-only).
Read-only fields

Fields marked as read-only are calculated server-side and cannot be set via POST or PATCH requests. Use them for filtering, sorting, and display in GET requests.


Endpoints

CRUD Operations

Retrieve all projects

GET/odata/Project

Supports OData query parameters ($filter, $select, $orderby, $top, $skip).


Retrieve a single project by its ID

GET/odata/Project({key})
ParameterTypeRequiredDescription
keyGuidThe ProjectId of the project.

Create a new project

POST/odata/Project
ParameterTypeRequiredDescription
BodyDelta<ApiProject>JSON object with the project properties.
tip

Omit ProjectId to let the server automatically generate an ID.


Update a project

PATCH/odata/Project({key})
ParameterTypeRequiredDescription
keyGuidThe ProjectId of the project.
BodyDelta<ApiProject>JSON object with the fields to update.

Delete a project

DELETE/odata/Project({key})
ParameterTypeRequiredDescription
keyGuidThe ProjectId of the project to delete.
warning

Deleting a project permanently removes it and all associated data (tasks, time entries, documents, etc.). This action cannot be undone.


Members & Contacts

Retrieve all members of a project

GET/odata/Project({key})/GetProjectContactRelations()
ParameterTypeRequiredDescription
keyGuidThe ProjectId.

The response contains a list of contact relation records with the following structure:

PropertyTypeDescription
IdguidUnique identifier of the contact relation.
MemberIdguidID of the project member.
RoleTypeintProject role. Values: 2 = Managers, 4 = Team, 8 = Partners, 16 = Customers, 32 = Additional, 64 = Project request reviewer, 128 = Additional 1, 256 = Additional 2, 512 = Additional 3, 1024 = Additional 4, 2048 = Additional 5.
OrdinalPositionintSort position of the member.
DisplayNamestringDisplay name of the contact.
EmailstringEmail address of the contact.
SourceTypeintType of the contact relation record. Values: 0 = Individual contact, 1 = Group of contacts.
IsRecycledboolIndicates whether the contact is in the recycle bin.
IsIdentityboolIndicates whether the contact has an identity (user account).
EmailConfirmedboolIndicates whether the email address is confirmed.
InvitationAcceptedboolIndicates whether the invitation has been accepted.
SkillsstringComma-separated list of skills.
ImageIdguid?ID of the contact image.

Add a member to the project

POST/odata/Project({key})/AddMember
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the following fields:

contactId (guid, required) — The contact to add.
role (int, required) — Value: 2 = Managers, 4 = Team, 8 = Partners, 16 = Customers, 32 = Additional, 64 = Project request reviewer, 128 = Additional 1, 256 = Additional 2, 512 = Additional 3, 1024 = Additional 4, 2048 = Additional 5.
type (int?, optional) — Value: 0 = Individual contact, 1 = Group of contacts.
ordinalPosition (int?, optional) — Sort position.
warning

Adding a member is a security-relevant action. This grants project role permissions to the specified contact.


Remove a member from the project

POST/odata/Project({key})/RemoveMember
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the following fields:

contactId (guid, required) — The contact to remove.
role (int, required) — Value: 2 = Managers, 4 = Team, 8 = Partners, 16 = Customers, 32 = Additional, 64 = Project request reviewer, 128 = Additional 1, 256 = Additional 2, 512 = Additional 3, 1024 = Additional 4, 2048 = Additional 5.
type (int?, optional) — Value: 0 = Individual contact, 1 = Group of contacts.
warning

Removing a member is a security-relevant action. This revokes project role permissions for the specified contact.


Categories

Retrieve assigned categories of a project

GET/odata/Project({key})/GetAssignedCategories()

Assign a category to the project

GET/odata/Project({key})/AssignCategory(categoryId={categoryId})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
categoryIdGuidThe ID of the category to assign.

Remove a category from the project

GET/odata/Project({key})/UnAssignCategory(categoryId={categoryId})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
categoryIdGuidThe ID of the category to remove.

Replace all categories of a project

POST/odata/Project({key})/SetCategories
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the following fields:

categoryIds (guid[], required) — Array of category IDs to assign to the project.
info

SetCategories replaces all existing category assignments. To add or remove a single category, use AssignCategory or UnAssignCategory instead.


Comments

The ProjectNote entity is the underlying data model for project comments. Each comment is stored as a ProjectNote and linked to a specific project.

PropertyTypeDescription
ProjectNoteIdguidUnique ID of the note.
ProjectIdguidID of the associated project.
NotestringNote text (plain text).
NoteHtmlstringNote text (HTML-formatted).
ShortDescriptionstringShort description of the note.
CreateDateTimeDateTimeOffsetCreation timestamp.
CreatedByContactIdguidID of the creator.

Retrieve all project comments across all projects

GET/odata/ProjectNote

Filter by project:

GET /odata/ProjectNote?$filter=ProjectId eq xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&$orderby=CreateDateTime desc

Retrieve a project comment by ID

GET/odata/ProjectNote({key})
ParameterTypeRequiredDescription
keyguidThe ProjectNoteId.

Add a comment to the project

POST/odata/Project({key})/AddNote
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the following fields:

htmlText (string, required) — HTML-formatted comment content.
notificationContactIds (guid[], required) — Contact IDs to be notified. Pass an empty array if no notifications are needed.

Remove a comment from the project

POST/odata/Project({key})/DeleteNote
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the following fields:

noteRelationId (guid, required) — The ID of the comment relation to delete.
warning

Deleting a comment cannot be undone.


Project Numbers

Check whether a project number already exists

GET/odata/Project({key})/CheckIfProjectNumberExists(projectNumber={projectNumber})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
projectNumberstringThe project number to check.

Update a project number

POST/odata/Project({key})/UpdateProjectNumber
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the following fields:

prefix (string, required) — The prefix of the project number.
suffix (string, required) — The suffix of the project number.

Correct the sequential number part of the project number

GET/odata/Project({key})/CorrectIncrementIfNecessary(projectNumber={projectNumber})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
projectNumberstringThe project number to reconcile.

Status & Actions

Approve a project request

POST/odata/Project({key})/ApproveRequest
ParameterTypeRequiredDescription
keyGuidThe ProjectId of the project request.

Reject a project request

POST/odata/Project({key})/RejectRequest
ParameterTypeRequiredDescription
keyGuidThe ProjectId of the project request.

Toggle favorite status of a project

GET/odata/Project({key})/ToggleFavorite(isFavorite={isFavorite})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
isFavoritebooleantrue to mark as favorite, false to remove.

Duplicate a project

GET/odata/Project({key})/CopyProject()
ParameterTypeRequiredDescription
keyGuidThe ProjectId of the project to copy.

Generate a project image

GET/odata/Project({key})/GenerateImage()
ParameterTypeRequiredDescription
keyGuidThe ProjectId.

Generate a project description via AI

GET/odata/Project({key})/GenerateProjectDescription(language={language})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
languagestringLanguage of the generated description (e.g. "de", "en").
info

This endpoint is only available in InLoox Cloud.


Relations

Add a relation to the project

POST/odata/Project({key})/AddRelation
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the relation details.

Remove a relation from the project

POST/odata/Project({key})/RemoveRelation
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the relation ID.

Notifications

Retrieve all contacts subscribed to notifications for this project

GET/odata/Project({key})/GetNotificationFollowerContacts()
ParameterTypeRequiredDescription
keyGuidThe ProjectId.

Add notification subscribers

POST/odata/Project({key})/AddNotificationFollowers
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the contact IDs of the subscribers.

Remove a notification subscriber

POST/odata/Project({key})/RemoveNotificationFollower
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
BodyobjectJSON object with the contact ID.

DynamicProject

The /odata/DynamicProject endpoint provides a read-only, flattened view that merges data from project, portfolio, and permissions. All properties are prefixed (e.g. Project_Name, Portfolio_Name, ProjectPermission_PermissionProjectRead). Custom fields follow the pattern CF_<FieldName>.


Retrieve flattened project list with portfolio and permission data

GET/odata/DynamicProject
Read-only access

DynamicProject only supports GET requests. To create or edit, use the regular /odata/Project endpoints.


OData Query Examples

Retrieve all active projects

GET /odata/Project?$filter=IsArchived eq false and IsRecycled eq false

Filter projects by a specific client

GET /odata/Project?$filter=ClientId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

Sort projects by priority (descending)

GET /odata/Project?$orderby=Priority desc&$top=10

Select specific fields only

GET /odata/Project?$select=ProjectId,Name,Number,StartDate,EndDate,ComputedProgress

Filter project requests

GET /odata/Project?$filter=IsRequest eq true

Create a project

POST /odata/Project
Content-Type: application/json

{
"Name": "New Project",
"StartDate": "2025-01-15T00:00:00Z",
"EndDate": "2025-06-30T00:00:00Z",
"Priority": 2
}

Update a project

PATCH /odata/Project('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
Content-Type: application/json

{
"Name": "Updated Project Name",
}
Pagination

Use $top and $skip for paginating large result sets:

GET /odata/Project?$top=50&$skip=100&$orderby=Name