TABLE OF CONTENTS
- Introduction
- Rest API Overview
- Common Planning Object Properties
- Status Code
- Error Handling
- Common PUT/POST Request Body
- Common PUT/POST response body
- Models
- Rest API Endpoints
- List of Endpoints
- Example of IDE Compatible API
- Test
- All Schedules
- Custom Fields
- Schedule
- Activity Link
- Resource Assignment
- Calendar
- Creating a connector in ILAP Data Exchange
Introduction
The IDE Compliant API Connector (ICAC) concept in ILAP Data Exchange provides a standardized, API-based mechanism that enables seamless integration between ILAP and any external scheduling system. This documentation defines the communication contract, structural expectations, and implementation guidelines required to build a compatible API that can exchange schedule-related data with ILAP Data Exchange.
The primary purpose of the ICAC is to allow third-party systems to connect with ILAP through a uniform and predictable interface. By implementing the API according to the specifications outlined in this document, developers can ensure that schedule data (including projects, activities, resources, calendars, and dependencies) can be transferred accurately, securely, and efficiently between ILAP and external applications.
This document serves as a technical reference for system integrators, software vendors, and developers who intend to implement or maintain a custom API endpoint compatible with ILAP Data Exchange. It defines how requests and responses should be structured, the required endpoints, supported authentication models, and the expected data formats.
By adhering to the defined API contract, organizations can:
- Enable automated data synchronization between their scheduling system and ILAP Data Exchange.
- Minimize custom development effort and reduce integration complexity.
- Maintain interoperability and consistency across diverse project management environments.
The goal of this documentation is to ensure that all custom connectors follow a consistent design, thereby making ILAP Data Exchange a flexible, extensible, and platform-agnostic solution for schedule data integration.
Rest API Overview
Rest HTTP verbs
Endpoint | POST | GET | PUT | DELETE |
All schedule | X | Required | X | X |
Custom Fields (Implement only if supported otherwise not required) | X | Optional | X | X |
Activity | Required | Required | Required | Optional (Only applicable for conflict handling) |
Schedule | X | Required | Required | X |
Calendar | Required | Required | Required | X |
Resource | Required | Required | Required | X |
Resource Assignment | Required | Required | Required | X |
Activity Link | Required | Required | Required | X |
GET endpoints
These endpoints will be used mostly during the export/upload operation from the API. We’ll use different GET endpoints to export different planning objects.
PUT endpoints
These will be used to update planning objects while importing data into the external system through the API. We’ll use different PUT endpoints to import different planning objects.
POST endpoint
These will be used to create planning objects while importing data into the external system through the API. We’ll use different POST endpoints to import different planning objects.
DELETE endpoint
These endpoints are used to remove planning objects from the external system during data import operations via the API. Deletion operations are performed only as part of conflict handling. During download operations, ILAP does not issue delete requests, even if an object was previously transferred but is no longer included in the current dataset.
Authentication Options
Currently we’re supporting 2 types of authentication options
- Service token authentication
- Azure AD authentication (Microsoft Entra ID authentication)
Service Token Authentication
The IDE can use a pre-defined service token (saved during connector creation). You also need to define a service token scheme (default value is Bearer) while creating the connector. When
the service token authentication is enabled, while calling the API, we add an Authorization
header:
[Service Token Scheme] [Service Token]
If you’re using Bearer token scheme, the authentication header value can be like below
Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Il9…….
If you’re using Api Key token scheme, the authentication header value will be like below
ApiKey 5mC343sssa42…….
Azure AD Authentication
You can also enable authentication using Azure Active Directory (now Microsoft Entra ID). This provides secure, identity-based access and supports single sign-on (SSO) through your organization’s Entra ID tenant.
For setup instructions, refer to Microsoft’s guide:
Use Microsoft Entra ID for authentication
Schedule & revision type query parameters
The query parameters scheduleId and the optional revisionType are included in GET requests that fetch planning objects for a specific project or schedule. These parameters are not sent for endpoints that retrieve non-specific data, such as Get All Schedules.
Query Param | Type | Usage | Comment |
scheduleId | string | API will use it to uniquely identify and filter out the planning objects to be returned for a schedule | This query param name can be changed in the connector. The value configured in the connector is passed with every request where necessary as the query parameter name. |
revisionType | string | API can use it to filter out the planning objects by the scope/revision type | This is optional. This should be implemented on the API side only if you have a concept of Live, Baseline, Original concept. Otherwise, please ignore this. This is controlled through the Host System Parameter. If the no revision type is chosen in the UI, then this parameter will not be sent (In UI by default, nothing is selected). |
Pagination parameters
Request Queries
We add 2 request queries in all GET endpoints These query parameters are
Query Param | Type | Usage |
PageNumber | integer | Number of pages which you want to fetch |
PageSize | integer | The number of data you want to fetch in the current call |
For example, a URL for fetching activities will like something like this:
www.customconnector.com/api/activity?pagenumber=3&pagesize=20
The IDE expects the API to return data from the range 41 to 60 in this case. The sorting has to be managed by the API but we expect this to be done by internal ID to get consistent data.
Response Model
For all the GET endpoints we’ll be using, we support paginated response. The common model of the response is
{
"data": [
{
// Data objects to be exported
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}The IDE will keep on querying the GET endpoints with increasing page numbers until one of the following conditions is met
- Page number to be queried is greater than the total page size.
- On the latest call, the number of data found in the response is zero.
⚠️ While using pagination, make sure you’re returning correct value in the property Total Pages as IDE is highly dependent on this property.
What if you don’t want to export data in pagination
If you don’t want to export data in a paginated way, you can just ignore the pagination-related properties and send the list of data only. The example goes below
{
"data": [
{
// Data objects to be exported
}
]
}Common Planning Object Properties
Each Planning Object in the system contains two fundamental properties: ID and Code. Both serve as unique identifiers to distinguish planning objects, but they are used in different contexts.
ID
Every schedule consists of multiple types of planning objects (such as activities, resources, calendars, etc.). Within each object type, every instance must have a unique ID.
- IDs can overlap across different object types (for example, both an Activity and a Resource may have the ID 1), but they must be unique within the same type.
- As a best practice, ILAP recommends maintaining globally unique IDs across all object types within the system to avoid conflicts.
In most systems, the ID corresponds to the primary key in the database. ILAP Data Exchange expects this field to be represented as a string. If the external system uses another data type (such as integer or GUID), the API must convert it to a string before sending or receiving data through the connector.
Code
The Code field provides a user-defined, human-readable identifier for a planning object.
For example: ACT-101 or Excavation-Start.
If the external system does not have a separate code concept, the same value as the internal ID may be used. Typically, this field is editable by users in the source system and serves as a unique external reference for identifying objects during data synchronization between systems. When synchronizing data, ILAP may rely on the Code value, particularly if it has changed in another system to locate or update the correct planning object.
The Code must be unique within the same project or schedule.
Difference between Code & ID
The ID is a system-generated internal identifier used by ILAP and the API for record tracking and update operations. It ensures each planning object is uniquely recognized within the system.
The Code, on the other hand, is a user-defined external identifier that is visible in user interfaces and shared across integrated systems. It is mainly used for mapping and synchronization during data exchange but not for internal updates.
Status Code
Use Case | HTTP Status Code | Description / Comment |
Authentication Error | 401 | Returned when authentication fails or credentials are missing. The client must provide valid authentication information. |
Authorization Error | 403 | Returned when the user is authenticated but lacks permission to access the requested resource. |
URL Not Found | 404 | Returned when the specified endpoint or resource cannot be found. |
Requested record not found | 404 | This is applicable only for Schedule GET endpoint returning a single schedule |
Failed to create/update resource | 400 | This is applicable only for calendar PUT/POST request
|
Unhandled Exception | 500 | Returned when an unexpected error occurs on the server side. |
GET Request (Data Retrieval) | 200 | Returned when data is successfully retrieved. Even if no data exists, the API should still return a 200 status code with an empty result set. |
POST Request (Create Operation) | 200 | Returned for all POST requests, regardless of whether the operation results in full or partial success when multiple records are submitted. When the request body contains an array, the response must include a result entry for each record, identified by its corresponding index. Even if all records fail during a transactional operation, individual result entries should still be returned. |
PUT Request (Update Operation) | 200 | Same response mechanism as POST requests. Each updated record should have a corresponding result entry in the response body. |
Error Handling
When you send nonsuccess status code, in the response body, whatever you send as the response body will be shown as part of the exception message.
Common PUT/POST Request Body
We have 2 types of PUT/POST requests body
- Requests with a single object
- Requests with a list of objects
To create or update an object, we’re sending the whole object and some additional properties. These properties are
- ScheduleId
- RevisionType
- RowId (only for requests with a list of objects)
Common PUT/POST request body for single object
{
"revisionType": 1,
"scheduleId": "SCHD-12345",
//Other properties of the planning object goes below
"id": "123",
"code": "ABCD",
"description": "Dummy description"
......
}Common PUT/POST request body for a list of objects
Here row id will be a distinct integer (for the request) integer which will be later used to identify a request.
[
{
"revisionType": 1,
"scheduleId": "SCHD-12345",
"rowId": 1,
//Other properties of the planning object goes below
"id": "123",
"code": "ABCD",
"description": "Dummy description"
......
},
{
"revisionType": 1,
"scheduleId": "SCHD-12345",
"rowId": 2,
//Other properties of the planning object goes below
"id": "124",
"code": "EFGH",
"description": "Another dummy description"
......
},
{
"revisionType": 1,
"scheduleId": "SCHD-12345",
"rowId": 3,
//Other properties of the planning object goes below
"id": "125",
"code": "IJKL",
"description": "More description"
......
}
]Common PUT/POST response body
Common PUT/POST response for single object
{
"id": "ACT-101",
"isSuccessful": true,
"message": "Activity created successfully"
}For POST requests, we expect that the id of the newly created object will be returned.
Common PUT/POST response for a list of objects
The common response for PUT/POST is a list of the object given below
[
{
"rowId": 1,
"id": "ACT-101",
"isSuccessful": true,
"message": "Activity created successfully"
},
{
"rowId": 2,
"id": "ACT-102",
"isSuccessful": false,
"message": "Activity failed to create"
},
{
"rowId": 3,
"id": "ACT-103",
"isSuccessful": true,
"message": "Activity created successfully"
}
]Here RowId will be used to point back to the original request body. For POST requests, we expect that the id of the newly created object will be returned.
Models
Test Response
Property | Type | Description |
Message | string | Success/Error message |
IsSuccess | bool | Indicates if the API is healthy or not |
ApiVersion | string | Version of the API eg: 1.0.0.0 |
Example
{
"message":"Success in test",
"isSUccess": true,
"apiVersion":"1.0.0.0"
}
Revision Type
String Value | Integer value | Description |
Live | 0 | Live Schedule |
OriginalBaseLine | 1 | Original Baseline Schedule |
Baseline | 2 | Baseline Schedule |
Current | 3 | Current Schedule |
Schedule
Property | Type | Description |
Id | string | Unique identifier |
Code | string | Human readable Unique Identifier, set to ID if not present |
Name | string | name of the schedule |
Description | string | Schedule description |
StartDate | DateTime(nullable) | Schedule start date |
FinishDate | DateTime(nullable) | Schedule finish date |
UserFieldSetId | int(nullable) | Associated user field set ID |
LastUpdatedDate | DateTime(nullable) | Date of last update |
Calendar
Property | Type | Description |
Id | string | Unique identifier (inherited) |
Code | string | Calendar code identifier (inherited) |
HoursPerDay | double | Standard number of working hours per day |
Start | DateTime | Calendar start date |
Finish | DateTime | Calendar end date |
Description | string | Calendar description |
CalendarOperations | Array of GenericRestApiCalendarOperation | Collection of calendar operations that modify working time |
GenericRestApiCalendarOperation
Property | Type | Description |
Type | CalendarOperationType | Type of calendar operation (see CalendarOperationType enum) |
WeeklyRepeatingPeriods | Array of | A collection of weekly recurring time periods, typically used to define the working and non-working behavior of weekdays across the entire calendar span. |
ConnectedPeriods | Array of GenericRestApiCalendarConnectedPeriod | Collection of connected time periods |
GenericRestApiCalendarWeeklyRepeatingPeriod
Represents a weekly repeating time period within a calendar operation (e.g., Monday 9:00 AM to 5:00 PM every week).
Property | Type | Description |
DayOfWeek | DayOfWeek | Day of the week for this period (.NET built-in enum) |
StartTime | DateTime | Start time for this period (defaults to DateTime.MinValue). The time in start and finish is important to calculate work hours on that day. |
FinishTime | DateTime | End time for this period (defaults to DateTime.MinValue). The time in start and finish is important to calculate work hours on that day. |
GenericRestApiCalendarConnectedPeriod
Represents a specific connected time period within a calendar operation (e.g., a holiday or special work period).
Property | Type | Description |
StartDateTime | DateTime | Start date and time of the period |
FinishDateTime | DateTime | End date and time of the period |
Enum CalendarOperationType
String Value | Integer Value | Description |
RemoveWorkingTime | 0 | Remove working time from the calendar (e.g., holidays, non-working periods) |
AddWorkingTime | 1 | Add working time to the calendar (e.g., overtime periods, special working days) |
DayOfWeek
String Value | Integer Value | Description |
Sunday | 0 | Sunday |
Monday | 1 | Monday |
Tuesday | 2 | Tuesday |
Wednesday | 3 | Wednesday |
Thursday | 4 | Thursday |
Friday | 5 | Friday |
Saturday | 6 | Saturday |
Example – 5 day 8 hour calendar
{
"code":"3|176",
"id":491,
"hoursPerDay":8.0,
"start":"2016-01-01T00:00:00",
"finish":"2022-12-31T00:00:00",
"description":"5wd8h",
"calendarOperations":[
{
"calendarId":490,
"type":1,
"typeText":"AddWorkingTime",
"weeklyRepeatingPeriods":[
{
"calendarOperationId":1468,
"dayOfWeek":1,
"dayOfWeekText":"Monday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T08:00:00",
"id":3094
},
{
"calendarOperationId":1468,
"dayOfWeek":2,
"dayOfWeekText":"Tuesday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T08:00:00",
"id":3095
},
{
"calendarOperationId":1468,
"dayOfWeek":3,
"dayOfWeekText":"Wednesday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T08:00:00",
"id":3096
},
{
"calendarOperationId":1468,
"dayOfWeek":4,
"dayOfWeekText":"Thursday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T08:00:00",
"id":3097
},
{
"calendarOperationId":1468,
"dayOfWeek":5,
"dayOfWeekText":"Friday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T08:00:00",
"id":3098
}
],
"connectedPeriods":[
],
"id":1468
},
{
"calendarId":490,
"type":0,
"typeText":"RemoveWorkingTime",
"weeklyRepeatingPeriods":[
],
"connectedPeriods":[
{
"calendarOperationId":1469,
"startDateTime":"2019-03-15T00:00:00",
"finishDateTime":"2019-03-16T00:00:00",
"id":1816
},
{
"calendarOperationId":1469,
"startDateTime":"2019-03-18T00:00:00",
"finishDateTime":"2019-03-19T00:00:00",
"id":1817
}
],
"id":1469
},
{
"calendarId":490,
"type":1,
"typeText":"AddWorkingTime",
"weeklyRepeatingPeriods":[
],
"connectedPeriods":[
],
"id":1470
}
],
}Example 7x24 Calendar
{
"dataId":166,
"hoursPerDay":24.0,
"start":"2016-01-01T00:00:00",
"finish":"2022-12-31T00:00:00",
"description":"7x24",
"code":"3|176",
"id":491,
"calendarOperations":[
{
"calendarId":491,
"type":1,
"typeText":"AddWorkingTime",
"weeklyRepeatingPeriods":[
{
"calendarOperationId":1471,
"dayOfWeek":1,
"dayOfWeekText":"Monday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3099
},
{
"calendarOperationId":1471,
"dayOfWeek":2,
"dayOfWeekText":"Tuesday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3100
},
{
"calendarOperationId":1471,
"dayOfWeek":3,
"dayOfWeekText":"Wednesday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3101
},
{
"calendarOperationId":1471,
"dayOfWeek":4,
"dayOfWeekText":"Thursday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3102
},
{
"calendarOperationId":1471,
"dayOfWeek":5,
"dayOfWeekText":"Friday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3103
},
{
"calendarOperationId":1471,
"dayOfWeek":6,
"dayOfWeekText":"Saturday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3104
},
{
"calendarOperationId":1471,
"dayOfWeek":0,
"dayOfWeekText":"Sunday",
"startTime":"2025-05-22T00:00:00",
"finishTime":"2025-05-22T23:59:59",
"id":3105
}
],
"connectedPeriods":[
],
"id":1471
},
{
"calendarId":491,
"type":0,
"typeText":"RemoveWorkingTime",
"weeklyRepeatingPeriods":[
],
"connectedPeriods":[
],
"id":1472
},
{
"calendarId":491,
"type":1,
"typeText":"AddWorkingTime",
"weeklyRepeatingPeriods":[
],
"connectedPeriods":[
],
"id":1473
}
],
}
Activity
Property | Type | Description |
Id | string | Unique identifier |
CustomFields | object of key value pair | Object containing key–value pairs of custom field data (e.g., { "FieldA": "Value", "FieldB": 10 }). We parse this as a dictionary, so the keys must be unique within one object. |
Code | string | Activity code identifier |
ActivityType | ActivityType | Type of activity (see ActivityType enum) |
Description | string | Activity description |
FinishAsEarlyAsPossible | bool | Whether to finish as early as possible |
FinishNoLaterThan | DateTime(Nullable) | Latest allowed finish date |
MustFinishOn | DateTime(Nullable) | Required finish date |
MustStartOn | DateTime(Nullable) | Required start date |
StartAsEarlyAsPossible | bool | Whether to start as early as possible |
StartAsLateAsPossible | bool | Whether to start as late as possible |
StartNoEarlierThan | DateTime(Nullable) | Earliest allowed start date |
StartNoLaterThan | DateTime(Nullable) | Latest allowed start date |
ActualFinish | DateTime(Nullable) | Actual finish date |
ActualStart | DateTime(Nullable) | Actual start date |
ActualWorkHours | double | Actual work hours completed |
CurrentProgress | double | Current progress percentage |
EarlyStart | DateTime(Nullable) | Early start date from scheduling |
EarlyFinish | DateTime(Nullable) | Early finish date from scheduling |
LateFinish | DateTime(Nullable) | Late finish date from scheduling |
LateStart | DateTime(Nullable) | Late start date from scheduling |
FreeFloatHours | double(Nullable) | Free float in hours |
TotalFloatHours | double(Nullable) | Total float in hours |
PlannedWorkHours | double(Nullable) | Planned work hours |
RemainingWorkHours | double(Nullable) | Remaining work hours |
IsAlwaysOnSchedule | bool | Whether activity is always on schedule |
IsCancelled | bool(Nullable) | Whether activity is cancelled |
CancelledDate | DateTime(Nullable) | Date when activity was cancelled |
PlannedProgress | double | Planned progress percentage |
DurationHours | double(Nullable) | Duration in hours |
RemainingDurationHours | double(Nullable) | Remaining duration in hours |
FinishOnOrAfter | DateTime(Nullable) | Earliest possible finish date |
FrontLineDate | DateTime(Nullable) | Front line date for scheduling |
CalendarId | string(Nullable) | Associated calendar identifier |
ActivityType
String Value | Integer Value |
NotSet | 0 |
RegularActivity | 3 |
MilestoneStart | 4 |
MilestoneFinish | 5 |
Hammock | 6 |
TaskDependent | 7 |
ResourceDependent | 8 |
LevelOfEffort | 9 |
WbsSummary | 10 |
Example
{
"code": "A100",
"id": 2650,
"scheduleId": 1266,
"calendarId": 1674,
"activityType": 4,
"activityTypeText": "MilestoneStart",
"description": "Start Milestone",
"finishAsEarlyAsPossible": false,
"mustStartOn": "2019-03-01T00:00:00",
"startAsEarlyAsPossible": false,
"startAsLateAsPossible": false,
"actualWorkHours": 0.0,
"currentProgress": 0.0,
"earlyStart": "2019-03-01T00:00:00",
"earlyFinish": "2019-03-01T00:00:00",
"lateFinish": "2019-02-28T00:00:00",
"lateStart": "2019-03-01T00:00:00",
"freeFloatHours": 24.0,
"totalFloatHours": 24.0,
"plannedWorkHours": 500.0,
"remainingWorkHours": 500.0,
"isCancelled": false,
"plannedProgress": 100.0,
"alwaysOnSchedule": false,
"durationHours": 0.0
}ActivityLink
Represents a dependency relationship between activities.
Property | Type | Description |
Id | string | Unique identifier |
CustomFields | object of key value pair | Object containing key–value pairs of custom field data (e.g., { "FieldA": "Value", "FieldB": 10 }). We parse this as a dictionary, so the keys must be unique within one object. |
Code | string | Link code identifier |
Type | SuccessorType | Type of dependency relationship (see SuccessorType enum) |
LagHours | double(Nullable) | Lag time in hours |
CalendarId | string | Associated calendar identifier |
SuccessoId | string | ID of the successor activity |
PredecessorId | string | ID of the predecessor activity |
Example
{
"predecessorId": 1150,
"successorObjectId": 1153,
"calendarId": 490,
"type": 2,
"lagHours": 48.0,
"id": 826
}
Resource
Property | Type | Description |
Id | string | Unique identifier |
Code | string | Resource code identifier |
Description | string | Resource description |
Example
{
"description":"RD-0010",
"code":"2|3",
"id":331,
"startDate": "2019-03-01T00:00:00",
"finishDateTime": "2019-04-01T00:00:00",
"availableQuantity": 2,
"availableRate" : 0.01
}
ResourceAssignment
Property | Type | Description |
Id | string | Unique identifier |
Code | string | Assignment code identifier |
PlannedHours | double(Nullable) | Planned work hours for this assignment |
DurationHours | double(Nullable) | Duration hours for this assignment |
ActualHours | double(Nullable) | Actual hours worked |
CurrentProgress | double(Nullable) | Current progress on this assignment |
ResourceUsageType | ResourceUsageType | Type of resource usage (see ResourceUsageType enum) |
EarlyStart | DateTime(Nullable) | Early start date for this assignment |
EarlyFinish | DateTime(Nullable) | Early finish date for this assignment |
LagHours | double(Nullable) | Lag hours for this assignment |
ResourceId | string | ID of the assigned resource |
ActivityId | string | ID of the activity being assigned to |
CalendarId | String(Nullable) | ID of the resource assignment’s calendar |
ResourceUsageType
String Value | Integer Value |
NotSet | 0 |
Equipment | 1 |
StaffTime | 2 |
Material | 3 |
Example
{
"activityId": 1150,
"resourceId": 331,
"calendarId": 1,
"plannedHours": 500.0,
"actualHours": 0.0,
"currentProgress": 0.0,
"resourceUsageType": 1,
"earlyStart": "2019-03-01T00:00:00",
"earlyFinish": "2019-04-01T00:00:00",
"lagHour":2
"code": "2|884|1452",
"id": 3796
}Custom Host Field
Property | Type | Description |
Id | string | Unique identifier |
Name | string | Schedule name |
Description | string(Nullable) | Schedule description |
UserFieldSetId | int(Nullable) | Associated user field set ID |
LastUpdatedDate | DateTime(Nullable) | Date of last update |
PlanningObjectType | PlanningObjectType | Type of planning object. See the enum PlanningObjectType for more information |
TypeCode | TypeCode | Data type of the planning object |
Alias | string(Nullable) | Alias of the custom host field |
Metadata | string(Nullable) | Any other information you want the IDE to have? Send it in this field. |
PlanningObjectType Enum
Integer Value | String Value |
1 | Schedule |
2 | Activity |
4 | Successor |
8 | ResourceUsage |
16 | Resource |
32 | Profile |
64 | Calendar |
128 | Structure |
TypeCode Enum
Integer Value | String Value |
3 | Boolean |
9 | Int32 |
13 | Single |
14 | Double |
16 | DateTime |
18 | String |
Example
{
"userFieldSetId":2,
"name":"Ilap_Term_1",
"planningObjectType":2,
"dataType":14,
"alias":"",
"metadata":"R-710D3D4E-80C2-47EE-8756-27B879C3E2A3"
}Common PUT/POST Response for a list of objects
Property | Type | Description |
Id | string | Unique identifier of created/updated object |
RowId | int | Points to the RowId of the request body |
IsSuccessful | bool | True if the the update/create operation was |
Message | String(Optional) | Any message associated with it |
Common PUT/POST Response for a single Object
Property | Type | Description |
Id | string | Unique identifier of created/updated object |
IsSuccessful | bool | True if the the update/create operation was |
Message | String(Optional) | Any message associated with it |
Common DELETE Request
Property | Type | Description |
Id | string | Unique identifier of created/updated object |
RowId | bool | Unique identifier of the request object for current request |
ScheduleId | String | Schedule Id of the schedule |
RevisionType | Enum | See revision type enum |
Rest API Endpoints
List of Endpoints
Endpoint | HTTP verbs | GET response Type | PUT/POST request body Type | PUT/POST Response type | DELETE request body type | DELETE response type |
GET | Single object of Test Response | |||||
GET | Paginated List of Schedule | |||||
GET | Paginated List of custom fields | |||||
GET, PUT | Single Schedule object | Single schedule object with schedule id and revision type | Single common response | |||
GET, PUT, POST, DELETE | Paginated List of activities | List of Activity Request | List of Common update response | |||
GET, PUT, POST | Paginated List of activity links | List of Activity Link Request | List of common delete request | List of common delete request | List of common delete request | |
GET, PUT, POST | Paginated List of resources | List of resource request | List of Common update response | |||
GET, PUT, POST, DELETE | Paginated List of resource assignments | List of resource assignment request | List of Common update response | List of common delete request | List of common delete request | |
GET, PUT, POST | Paginated List of Calendars | Single calendar request | Single common response |
Example of IDE Compatible API
In the latest release of Ilap Analytics (2.3.0.0), we have rolled out an example of how the IDE compatible API should behave. The GET endpoints return actual data filtered by schedule Id and revision type (where applicable), and the POST/PUT/DELETE endpoints return a dummy response.
The table below contains the endpoint name and their url
Endpoint | Result |
Test | api/v3/export/Status |
All Schedules | api/v3/export/Persist/Schedules |
Custom Fields | api/v3/export/Persist/HostFields |
Schedule | api/v3/export/singleSchedule |
Activity | api/v3/export/Activities |
Activity Link | api/v3/export/ActivityLinks |
Resource | api/v3/export/Resources |
Resource Assignment | api/v3/export/ResourceAssignments |
Calendar | api/v3/export/Calendars |
Test
Allowed Method
Get
Description
This endpoint should indicate the liveness of the server.
If the server is unhealthy, then it should either have a non success status code or should the value of the property isSuccess should be explicitly set to false. IDE will consider the api as healthy if the return status code is success status code and the property isSuccess is not false. We expect this end-point to handle authentication as well.
After defining the connectivity properties users can test the connectivity through the application using this end-point.
Request Query parameter
- None required
Response Model
Check the model Test Response
All Schedules
Allowed Method
GET
Description
This endpoint should return a list of the schedules in the host system.
Request Query Param
- see pagination section for pagination parameters
- No query param for revision type or schedule id is added.
Response Model
Paginated Response
{
"data": [
{
// Schedule object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}Check the section Schedule for details on Schedule Model.
Custom Fields
Allowed Method
GET
Description
This endpoint should return a list of custom host fields and their planning object types.
Note: This is optional if there is no usage of custom fields.
Request Query Param
- see pagination section for pagination parameters
- No query param for revision type or schedule id is added.
Response Model
Paginated Response
{
"data": [
{
// custom host field object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}See the section CustomHostField to check the model of CustomHostField
Schedule
Get single Schedule By schedule id
Allowed Method
GET
Description
This endpoint should return a schedule. By the schedule id.
Request Query Param
- No pagination is supported since it returns only one schedule
- Query param for revision type or schedule id is added. Schedule Id is mandatory, and revision type is optional. See Schedule & revision type query parameters section for more details.
Response Model
Same as the Schedule model.
Update Schedule
Allowed Method
PUT
Description
This endpoint should update a schedule filtered by scheduleId and revisionType(optional)
Request Body
{
"scheduleId": "SCH-001",
"revisionType": 1,
//schedule object properties
}Check out the Schedule and RevisionType section for more details.
Response Model
Common PUT/POST Response for a single object.
Activity
Get List of Activities
Allowed Method
GET
Description
This endpoint should return a list of activities.
Request Query Param
- pagination is supported. See pagination section for more details.
- Query param for revision type or schedule id is added. Schedule Id is mandatory, and revision type is optional. See Schedule & revision type query parameters section for more details.
Response Model
{
"data": [
{
// activity object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}Check Activity model for more details.
Update List of Activities
Allowed Method
PUT
Description
This endpoint should update a list of activities. The activity should be identified by its ID.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// activity object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// activity object properties
}
]Check out the Activity, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Create List of activities
Allowed Method
POST
Description
This endpoint should create a list of activities. The activity should be identified by its ID.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// activity object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// activity object properties
}
]Check out the Activity, Common Post request Body for a list of object, and RevisionType section for more details. When the IDE only wants to update the Code of the activity, it sets UpdateOnlyActivityCode to true. In that case, the API shouldn’t update any other property for the activity.
Response Model
Common PUT/POST Response for a list of objects.
Delete list of activities
Allowed Method
DELETE
Description
This endpoint should delete a list of activities. The activity should be identified by its ID. Implement this endpoint if you want to enable conflict analysis.
Request Body
The request body will be a list of common delete request.
Response Model
Common PUT/POST Response for a list of objects.
Activity Link
Get List of Activity Links
Allowed Method
GET
Description
This endpoint should return a list of activity links.
Request Query Param
- pagination is supported. See pagination section for more details.
- Query param for revision type or schedule id is added. Schedule Id is mandatory, and revision type is optional. See Schedule & revision type query parameters section for more details.
Response Model
{
"data": [
{
// activity link object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}Check the ActivityLink model for more details.
Update List of Activity Links
Allowed Method
PUT
Description
This endpoint should update a list of activity links. The activity link should be identified by its ID.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// activity link object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// activity link object properties
}
]Check out the ActivityLink, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Create List of Activity Links
Allowed Method
POST
Description
This endpoint should create a list of activity links.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// activity link object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// activity link object properties
}
]Check out the ActivityLink, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Resource
Create List of Resources
Allowed Method
POST
Description
This endpoint should update a list of activity links.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// resource object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// resource object properties
}
]Check out the Resource, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Get List of Resources
Allowed Method
GET
Description
This endpoint should return a list of resources.
Request Query Param
- pagination is supported. See pagination section for more details.
- Query param for schedule id is added. No need to send the revision type query param. See Schedule & revision type query parameters section for more details.
Response Model
{
"data": [
{
// resource object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}Check the Resource model for more details.
Update List of Resources
Allowed Method
PUT
Description
This endpoint should update a list of activity links. The activity link should be identified by its ID.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// resource object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// resource object properties
}
]Check out the Resource, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Resource Assignment
Create List of Resource Assignments
Allowed Method
POST
Description
This endpoint should create a list of activity links.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// resource assignment object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// resource assignment object properties
}
]Check out the ResourceAssignment, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Get List of Resource Assignment
Allowed Method
GET
Description
This endpoint should return a list of resource assignments.
Request Query Param
- pagination is supported. See pagination section for more details.
- Query param for schedule id is added. No need to send the revision type query param. See Schedule & revision type query parameters section for more details.
Response Model
{
"data": [
{
// resource assignment object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}
Check the ResourceAssignment model for more details.
Update List of Resource Assignments
Allowed Method
PUT
Description
This endpoint should update a list of activity links.
Request Body
[
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 1,
// resource assignment object properties
},
{
"revisionType": 1,
"scheduleId": "SCH-001",
"rowId": 2,
// resource assignment object properties
}
]Check out the ResourceAssignment, Common Post request Body for a list of object, and RevisionType section for more details.
Response Model
Common PUT/POST Response for a list of objects.
Delete list of Resource Assignments
Allowed Method
DELETE
Description
This endpoint should delete a list of resource assignments. The activity should be identified by its ID. Implement this endpoint if you want to enable conflict analysis.
Request Body
The request body will be a list of common delete request.
Response Model
Common PUT/POST Response for a list of objects.
Calendar
Create a single Calendar
Allowed Method
POST
Description
This endpoint should create a calendar.
Request Body
{
"scheduleId": "SCH-001",
"revisionType": 1,
// calendar object properties
}Check out the Calendar and RevisionType section for more details.
Response Model
Common PUT/POST Response for a single object.
Get a list of Calendar
Allowed Method
GET
Description
This endpoint should return a list of calendars.
Request Query Param
- Pagination is supported. See pagination section for more details.
- Query param for schedule id is added. No need to send the revision type query param. See Schedule & revision type query parameters section for more details.
Response Model
{
"data": [
{
// calendar object
}
],
"pageNumber": 1,
"pageSize": 10,
"totalItems": 50,
"totalPages": 5
}
Check the Calendar model for more details.
Update a single Calendar
Allowed Method
PUT
Description
This endpoint should update a calendar.
Request Body
{
"scheduleId": "SCH-001",
"revisionType": 1,
// calendar object properties
}Check out the Calendar and RevisionType section for more details.
Response Model
Common PUT/POST Response for a single object.
Creating a connector in ILAP Data Exchange
Pre-requisite
An ILAP Data Exchange user with Setup Admin Role.
Steps to follow
- Log in to the IDE web application.
- Go to Setup -> Connectors -> New connector.
- Add entries to the related fields
Field Name | Required | Description / Comment | HTTP Verb(s) | Remarks |
Title | Yes | The display name of the connector. | – | Must be unique within ILAP. |
Host System | Yes | Select ‘IDE Compliant API’ to indicate this connector follows the ILAP Custom API contract. | – | Fixed value for Custom Connectors. |
Execution Component | Yes | Defines where the transfer will be executed. Choose Desktop or Autonomous component. | – | Determines the runtime environment. |
Authentication Type | Yes | Defines the authentication method used to access the external API (Token, OAuth2). Depending on the authentication type other input fields will be displayed. | – | Determines what credential fields are displayed. |
Base URL | Yes | The root URL of the external API (e.g. https://example.com/api/v1). All endpoint paths are appended to this. | – | Must end without a trailing slash. |
Test Path | Yes | Relative path used to check the server’s health or version. Should return a simple success or version response. | GET | Used for connection and authentication validation. |
Get All Schedules Path | Yes | Path to retrieve all available schedules from the external system. | GET | Should return an array of schedule summaries. |
Get Custom Fields Path | No | Path to fetch custom field definitions from the external system. Not required if the system does not support custom fields. | GET | Optional; used if the system supports custom fields. |
Schedule Id Query Parameter | Yes | Name of the query parameter used to identify a schedule when fetching related objects (default: scheduleId). | – | Required for all data-fetching endpoints. |
Schedule Path | Yes | Endpoint for schedule/project operations. Used to fetch or update a schedule. | GET, PUT | Must support fetching by ID and updating details. |
Calendar Path | Yes | Endpoint for calendar operations. Used to create, fetch, or update calendar data. | GET, POST, PUT |
|
Resource Path | Yes | Endpoint for resource operations (create, update, fetch). | GET, POST, PUT |
|
Activity Path | Yes | Endpoint for activity operations (create, update, delete, fetch). | GET, POST, PUT, DELETE |
|
Activity Link Path | Yes | Endpoint for managing activity links or dependencies. | GET, POST, PUT |
|
Resource Assignment Path | Yes | Endpoint for resource assignment operations. | GET, POST, PUT, DELETE |
|
Read Batch Size | No | Number of entities retrieved per API call. Recommended for large schedules (i.e. 10k+ activities). | – | Optimizes performance during data import. |
Write Batch Size | Yes | Number of entities created or updated per API call. Applicable only for endpoints that accept array requests. | – | Recommended to prevent timeouts on large writes. |
Note: All Path fields below should specify relative paths only (not full URLs). ILAP Data Exchange automatically appends each path to the Base URL when forming complete endpoint URLs.
Example:
If Base URL = https://example.com/api/v1 and Test Path = health, the actual endpoint will be:
https://example.com/api/v1/health.
Sample Values for configuring a Connector
Field Name | Sample Value | Comment |
Title | IDE Compliant Ilap Analytics API |
|
Host System | IDE Compliant API |
|
Execution Component | Desktop Client |
|
Authentication Type | Service Token |
|
Base URL | http://idecomplaiantapi.promineo.no | If you want to test with your ILAP Analytics API, put the ILAP analytics API’s base URL |
Test Path | api/v3/export/Status | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Get All Schedules Path | api/v3/export/Persist/Schedules | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Get Custom Fields Path | api/v3/export/Persist/HostFields | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Schedule Id Query Parameter | reportscheduleid | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Schedule Path | api/v3/export/singleSchedule | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Calendar Path | api/v3/export/Calendars | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Resource Path | api/v3/export/Resources | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Activity Path | api/v3/export/Activities | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Activity Link Path | api/v3/export/ActivityLinks | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Resource Assignment Path | api/v3/export/ResourceAssignments | If you want to test with your ILAP Analytics API, put this value, if you want to test with your own API, change it to an appropriate value. |
Read Batch Size | 1000 | Number of entities retrieved per API call. Recommended for large schedules (i.e. 10k+ activities). |
Write Batch Size | 1000 | Number of entities created or updated per API call. Applicable only for endpoints that accept array requests. |
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article