IDE Compliant API Connector

Modified on Wed, 19 Nov at 10:43 AM

TABLE OF CONTENTS



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

 

  1. Service token authentication
  2. 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).
 The query parameter name is fixed and can’t be changed.

 

 

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

 

  1. Page number to be queried is greater than the total page size.
  2. 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

  1. Requests with a single object
  2. 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

  1. ScheduleId
  2. RevisionType
  3. 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
 This is only applicable if the API support custom field and there is a certain set of custom fields which are specific to this schedule only. Otherwise this can be kept null.

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
GenericRestApiCalendarWeeklyRepeatingPeriod

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

Test

GET

Single object of Test Response





All Schedules

GET

Paginated List of Schedule





Custom Fields

GET

Paginated List of custom fields





Schedule

GET, PUT

Single Schedule object

Single schedule object with schedule id and revision type

Single common response



Activity

GET, PUT, POST, DELETE

Paginated List of activities

List of Activity Request

List of Common update response



Activity Link

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

Resource

GET, PUT, POST

Paginated List of resources

List of resource request

List of Common update response



Resource Assignment

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

Calendar

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.

 

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.

 

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.

 

 

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

  1. Log in to the IDE web application.
  2. Go to Setup -> Connectors -> New connector.
  3. 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

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article