Skip to main content

Planning

Planning management in InLoox comprises three entities: Planning (planning elements such as activities and milestones), PlanningPublication (cross-project publications) and PlanningTemplate (planning templates).

Entity Overview

EntityDescription
PlanningPlanning elements (activities, milestones, summary activities)
PlanningPublicationCross-project publications of planning elements
PlanningTemplateReusable planning templates

Planning

A planning element represents a single activity, milestone, or grouping within a project schedule. Elements can be nested to form a work breakdown structure (WBS).

info

Planning elements are always associated with a project. Use ProjectId when filtering to retrieve only the planning elements of a specific project.

Data Model

PropertyTypeDescription
PlanningIdGuid (UUID)Unique identifier of the planning element (primary key).
ProjectIdGuidAssociated project.
DisplayNamestring?Display name of the planning element.
ParentPlanningIdGuid?Parent planning element (null = root level).
PlanningTypeIdGuid?Type of the planning element.
PositionNumberint32Position number in the sort order.
CustomColorint32?Custom color (as integer value).
Progressint32?Progress in percent (0–100).
StartDateTimeDateTimeOffsetStart date and time.
EndDateTimeDateTimeOffsetEnd date and time.
DurationTicksint64Duration in ticks.
IsMilestonebooleanIndicates whether this is a milestone.
IsGroupingbooleanIndicates whether this is a grouping.
IsProjectGroupingbooleanIndicates whether this is a project grouping.
IsCollapsedbooleanIndicates whether the element is collapsed in the view.
DescriptionHTMLstring?Description as HTML.
PSPCodestring?Work breakdown structure code (WBS).
Locationstring?Location of the planning element.
CalendarIdGuidAssigned calendar.
ConstraintTypeint32?Constraint type for scheduling.
ConstraintDateDateTimeOffset?Constraint date.
WorkAmountSumdouble?Total work amount.
WBS Codes

The PSPCode (Projektstrukturplan-Code) corresponds to the international WBS code (Work Breakdown Structure Code). It is automatically calculated based on the hierarchy but can also be set manually.

Currently Not Supported

Dependency types are links between planning elements in the Gantt chart: Finish-to-Start (FS), Start-to-Start (SS), Finish-to-Finish (FF), and Start-to-Finish (SF).

The InLoox OData API does not currently cover these features. If you need assistance with advanced scenarios, please contact InLoox Support.

Endpoints

CRUD Operations

List all planning elements across all projects

GET/odata/Planning

Supports OData query parameters.


Retrieve a single planning element

GET/odata/Planning({key})
ParameterTypeRequiredDescription
keyGuidThe PlanningId.

Create a new planning element

POST/odata/Planning
ParameterTypeRequiredDescription
BodyDelta<ApiPlanning>JSON object with the planning properties.

Relations

Add a relation to the planning element

POST/odata/Planning({key})/AddRelation
ParameterTypeRequiredDescription
keyGuidThe PlanningId.
BodyobjectJSON object with the following fields:

itemId (guid, required) — The ID of the item to link.

Remove a relation from the planning element

POST/odata/Planning({key})/RemoveRelation
ParameterTypeRequiredDescription
keyGuidThe PlanningId.
BodyobjectJSON object with the following fields:

itemId (guid, required) — The ID of the linked item to remove.

Documents

Link a document to the planning element

POST/odata/Planning({key})/AddDocumentToPlanning
ParameterTypeRequiredDescription
keyGuidThe PlanningId.
BodyobjectJSON object with the following fields:

documentIds (guid[], required) — Array of document IDs to link to the planning element.

Remove a document from the planning element

POST/odata/Planning({key})/RemoveDocumentFromPlanning
ParameterTypeRequiredDescription
keyGuidThe PlanningId.
BodyobjectJSON object with the following fields:

documentId (guid, required) — The ID of the document to remove from the planning element.

Notifications

Retrieve all notification subscribers of the planning element

GET/odata/Planning({key})/GetNotificationFollowerContacts()
ParameterTypeRequiredDescription
keyGuidThe PlanningId.

Add notification subscribers to the planning element

POST/odata/Planning({key})/AddNotificationFollowers
ParameterTypeRequiredDescription
keyGuidThe PlanningId.
BodyobjectJSON object with the following fields:

projectId (guid?, optional) — The project ID. If not specified, the project of the planning element is used.
contactIds (Collection<guid>, required) — Array of contact IDs to add as subscribers.

Remove a notification subscriber

POST/odata/Planning({key})/RemoveNotificationFollower
ParameterTypeRequiredDescription
keyGuidThe PlanningId.
BodyobjectJSON object with the following fields:

contactId (guid, required) — The ID of the contact to remove as a subscriber.

Planning Versions (Snapshots/Baselines)

Create a planning snapshot

GET/odata/Project({key})/CreatePlanningSnapshot(name={name})
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
namestringName of the snapshot.

Rename a planning snapshot

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

name (string, required) — The new name of the snapshot.

Delete a planning snapshot

POST/odata/Project({key})/DeletePlanningSnapshot
ParameterTypeRequiredDescription
keyGuidThe ProjectId.
warning

Deleting a planning snapshot cannot be undone.


Project Groups

Project Groups (also known as project clusters) bundle the planning of multiple projects and allow viewing and editing them in a shared view. Unlike planning publications, the projects in a group are organized and not loosely connected.

Add a project group

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

projectClusterRelationId (guid, required) — The ID of the project group relation.
Permission Required

The calling user must have write permissions for planning in all involved projects (source project and target project).


Set the color of a project group

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

projectClusterRelationId (guid, required) — The ID of the project group relation.
color (int, required) — The color value as integer.

Delete a project group

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

projectClusterRelationId (guid, required) — The ID of the project group relation.
warning

Deleting a project group cannot be undone.


PlanningPublication

Planning publications enable the cross-project linking of planning elements. This allows you to map dependencies between different projects. Unlike Project Groups, the projects are not fixed but loosely connected.

Permission Required

The calling user must have write permissions for planning in all involved projects (source project and target project).

Data Model

PropertyTypeDescription
PlanningPublicationIdGuid (UUID)Unique identifier of the publication.
SourcePlanningIdGuidSource planning element.
SourceProjectIdGuidSource project.
SourceProjectNamestring?Name of the source project (read-only).
SourceProjectNumberstring?Number of the source project (read-only).
SourceProjectImageIdGuid?Image ID of the source project (read-only).
DisplayNamestring?Display name of the publication.
TargetProjectIdGuidTarget project.
TargetProjectNumberstring?Number of the target project (read-only).
TargetProjectNamestring?Name of the target project (read-only).
TargetProjectImageIdGuid?Image ID of the target project (read-only).

Endpoints

List all planning publications across all projects

GET/odata/PlanningPublication

Retrieve a single publication

GET/odata/PlanningPublication({key})
ParameterTypeRequiredDescription
keyGuidThe PlanningPublicationId.

Create a new planning publication

POST/odata/PlanningPublication
ParameterTypeRequiredDescription
BodyDelta<ApiPlanningPublication>JSON object with the publication properties.

Delete a publication

DELETE/odata/PlanningPublication({key})
ParameterTypeRequiredDescription
keyGuidThe PlanningPublicationId.
warning

Deleting a planning publication is permanent and cannot be undone.

No PATCH

Planning publications cannot be updated. Delete the existing one and create a new one to make changes.


PlanningTemplate

Planning templates enable the reuse of planning structures across different projects. You can export, import, and load templates into projects.

Data Model

PropertyTypeDescription
PlanningTemplateIdGuid (UUID)Unique identifier of the template.
Namestring?Name of the template.

Endpoints

CRUD Operations

List all planning templates

GET/odata/PlanningTemplate

Retrieve a single template

GET/odata/PlanningTemplate({key})
ParameterTypeRequiredDescription
keyGuidThe PlanningTemplateId.

Create a new planning template

POST/odata/PlanningTemplate
ParameterTypeRequiredDescription
BodyDelta<ApiPlanningTemplate>JSON object with the template name.

Update a template

PATCH/odata/PlanningTemplate({key})
ParameterTypeRequiredDescription
keyGuidThe PlanningTemplateId.
BodyDelta<ApiPlanningTemplate>JSON object with the fields to update.

Delete a template

DELETE/odata/PlanningTemplate({key})
ParameterTypeRequiredDescription
keyGuidThe PlanningTemplateId.
warning

Deleting a planning template is permanent and cannot be undone.


Export & Download

Download a planning template as a file

GET/odata/PlanningTemplate({key})/DownloadPlanningTemplate()
ParameterTypeRequiredDescription
keyGuidThe PlanningTemplateId.

Download a template in MS Project XML format

GET/odata/PlanningTemplate({key})/DownloadMSProjectXML()
ParameterTypeRequiredDescription
keyGuidThe PlanningTemplateId.
MS Project Compatibility

With DownloadMSProjectXML you can export planning templates in XML format for Microsoft Project. This enables data exchange between InLoox and MS Project.

Import & Application

Load a template into a project

POST/odata/PlanningTemplate({key})/LoadTemplateForProject
ParameterTypeRequiredDescription
keyGuidThe PlanningTemplateId.
projectIdGuidThe target project ID (as query parameter).
settingsstringImport settings as JSON string (ApiPlanningTemplateImportSettings).

The import settings (ApiPlanningTemplateImportSettings) include:

PropertyTypeDescription
CalculationModestring?Calculation mode for scheduling.
StartDateForManualCalculationDateTimeOffset?Start date for manual calculation.
LoadResourceDatabooleanImport resource data.
LoadCompletionDatabooleanImport completion data.

Save a project's planning as a template

POST/odata/PlanningTemplate/SaveTemplateForProject
ParameterTypeRequiredDescription
BodyobjectJSON object with the following fields:

projectId (guid, required) — The ID of the project whose planning should be saved as a template.
name (string, required) — The name for the new template.

OData Query Examples

All planning elements of a project

GET /odata/Planning?$filter=ProjectId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'&$orderby=PositionNumber

Retrieve only milestones

GET /odata/Planning?$filter=ProjectId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' and IsMilestone eq true

Planning elements with progress below 50%

GET /odata/Planning?$filter=Progress lt 50 and IsGrouping eq false

Cross-project milestones of a project

GET /odata/PlanningPublication?$filter=SourceProjectId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

Create an activity

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

{
"ProjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"DisplayName": "Concept Phase",
"StartDateTime": "2025-02-01T08:00:00Z",
"EndDateTime": "2025-02-28T17:00:00Z",
"Progress": 0,
"IsMilestone": false,
"IsGrouping": false
}

Create a milestone

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

{
"ProjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"DisplayName": "Go-Live",
"StartDateTime": "2025-06-30T00:00:00Z",
"EndDateTime": "2025-06-30T00:00:00Z",
"IsMilestone": true
}

Load a template into a project

POST /odata/PlanningTemplate('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')/LoadTemplateForProject?projectId='yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'
Content-Type: application/json

{
"CalculationMode": "Manual",
"StartDateForManualCalculation": "2025-03-01T00:00:00Z",
"LoadResourceData": true,
"LoadCompletionData": false
}