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
| Entity | Description |
|---|---|
| Planning | Planning elements (activities, milestones, summary activities) |
| PlanningPublication | Cross-project publications of planning elements |
| PlanningTemplate | Reusable 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).
Planning elements are always associated with a project. Use ProjectId when filtering to retrieve only the planning elements of a specific project.
Data Model
| Property | Type | Description |
|---|---|---|
PlanningId | Guid (UUID) | Unique identifier of the planning element (primary key). |
ProjectId | Guid | Associated project. |
DisplayName | string? | Display name of the planning element. |
ParentPlanningId | Guid? | Parent planning element (null = root level). |
PlanningTypeId | Guid? | Type of the planning element. |
PositionNumber | int32 | Position number in the sort order. |
CustomColor | int32? | Custom color (as integer value). |
Progress | int32? | Progress in percent (0–100). |
StartDateTime | DateTimeOffset | Start date and time. |
EndDateTime | DateTimeOffset | End date and time. |
DurationTicks | int64 | Duration in ticks. |
IsMilestone | boolean | Indicates whether this is a milestone. |
IsGrouping | boolean | Indicates whether this is a grouping. |
IsProjectGrouping | boolean | Indicates whether this is a project grouping. |
IsCollapsed | boolean | Indicates whether the element is collapsed in the view. |
DescriptionHTML | string? | Description as HTML. |
PSPCode | string? | Work breakdown structure code (WBS). |
Location | string? | Location of the planning element. |
CalendarId | Guid | Assigned calendar. |
ConstraintType | int32? | Constraint type for scheduling. |
ConstraintDate | DateTimeOffset? | Constraint date. |
WorkAmountSum | double? | Total work amount. |
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.
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
/odata/PlanningSupports OData query parameters.
Retrieve a single planning element
/odata/Planning({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Create a new planning element
/odata/Planning| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiPlanning> | ✅ | JSON object with the planning properties. |
Relations
Add a relation to the planning element
/odata/Planning({key})/AddRelation| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Body | object | ✅ | JSON object with the following fields: itemId (guid, required) — The ID of the item to link. |
Remove a relation from the planning element
/odata/Planning({key})/RemoveRelation| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Body | object | ✅ | JSON object with the following fields: itemId (guid, required) — The ID of the linked item to remove. |
Documents
Link a document to the planning element
/odata/Planning({key})/AddDocumentToPlanning| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Body | object | ✅ | JSON 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
/odata/Planning({key})/RemoveDocumentFromPlanning| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Body | object | ✅ | JSON 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
/odata/Planning({key})/GetNotificationFollowerContacts()| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Add notification subscribers to the planning element
/odata/Planning({key})/AddNotificationFollowers| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Body | object | ✅ | JSON 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
/odata/Planning({key})/RemoveNotificationFollower| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningId. |
Body | object | ✅ | JSON 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
/odata/Project({key})/CreatePlanningSnapshot(name={name})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The ProjectId. |
name | string | ✅ | Name of the snapshot. |
Rename a planning snapshot
/odata/Project({key})/RenamePlanningSnapshot| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The ProjectId. |
Body | object | ✅ | JSON object with the following fields: name (string, required) — The new name of the snapshot. |
Delete a planning snapshot
/odata/Project({key})/DeletePlanningSnapshot| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The ProjectId. |
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
/odata/Project({key})/AddProjectGroup| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The ProjectId. |
Body | object | ✅ | JSON object with the following fields: projectClusterRelationId (guid, required) — The ID of the project group relation. |
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
/odata/Project({key})/SetProjectGroupColor| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The ProjectId. |
Body | object | ✅ | JSON 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
/odata/Project({key})/DeleteProjectGroup| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The ProjectId. |
Body | object | ✅ | JSON object with the following fields: projectClusterRelationId (guid, required) — The ID of the project group relation. |
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.
The calling user must have write permissions for planning in all involved projects (source project and target project).
Data Model
| Property | Type | Description |
|---|---|---|
PlanningPublicationId | Guid (UUID) | Unique identifier of the publication. |
SourcePlanningId | Guid | Source planning element. |
SourceProjectId | Guid | Source project. |
SourceProjectName | string? | Name of the source project (read-only). |
SourceProjectNumber | string? | Number of the source project (read-only). |
SourceProjectImageId | Guid? | Image ID of the source project (read-only). |
DisplayName | string? | Display name of the publication. |
TargetProjectId | Guid | Target project. |
TargetProjectNumber | string? | Number of the target project (read-only). |
TargetProjectName | string? | Name of the target project (read-only). |
TargetProjectImageId | Guid? | Image ID of the target project (read-only). |
Endpoints
List all planning publications across all projects
/odata/PlanningPublicationRetrieve a single publication
/odata/PlanningPublication({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningPublicationId. |
Create a new planning publication
/odata/PlanningPublication| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiPlanningPublication> | ✅ | JSON object with the publication properties. |
Delete a publication
/odata/PlanningPublication({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningPublicationId. |
Deleting a planning publication is permanent and cannot be undone.
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
| Property | Type | Description |
|---|---|---|
PlanningTemplateId | Guid (UUID) | Unique identifier of the template. |
Name | string? | Name of the template. |
Endpoints
CRUD Operations
List all planning templates
/odata/PlanningTemplateRetrieve a single template
/odata/PlanningTemplate({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningTemplateId. |
Create a new planning template
/odata/PlanningTemplate| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiPlanningTemplate> | ✅ | JSON object with the template name. |
Update a template
/odata/PlanningTemplate({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningTemplateId. |
Body | Delta<ApiPlanningTemplate> | ✅ | JSON object with the fields to update. |
Delete a template
/odata/PlanningTemplate({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningTemplateId. |
Deleting a planning template is permanent and cannot be undone.
Export & Download
Download a planning template as a file
/odata/PlanningTemplate({key})/DownloadPlanningTemplate()| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningTemplateId. |
Download a template in MS Project XML format
/odata/PlanningTemplate({key})/DownloadMSProjectXML()| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningTemplateId. |
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
/odata/PlanningTemplate({key})/LoadTemplateForProject| Parameter | Type | Required | Description |
|---|---|---|---|
key | Guid | ✅ | The PlanningTemplateId. |
projectId | Guid | ✅ | The target project ID (as query parameter). |
settings | string | — | Import settings as JSON string (ApiPlanningTemplateImportSettings). |
The import settings (ApiPlanningTemplateImportSettings) include:
| Property | Type | Description |
|---|---|---|
CalculationMode | string? | Calculation mode for scheduling. |
StartDateForManualCalculation | DateTimeOffset? | Start date for manual calculation. |
LoadResourceData | boolean | Import resource data. |
LoadCompletionData | boolean | Import completion data. |
Save a project's planning as a template
/odata/PlanningTemplate/SaveTemplateForProject| Parameter | Type | Required | Description |
|---|---|---|---|
Body | object | ✅ | JSON 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
}