REST API

Modified on Wed, 15 Jul at 4:14 PM

This reference covers the ILAP Analytics REST export endpoints for pulling schedule data — schedules, activities, periodized progress, resources, links, and metadata — for reporting and bulk extract. It is aimed at report developers, data engineers, and planners, and assumes you already have a DataReader bearer token or service token.

Base URL

https://app-ilapanalytics-api-dev.azurewebsites.net

Substitute your own environment's base URL. All endpoints described here live under /api/v3/export.

Authentication

The export endpoints accept either of these headers:

Authorization: bearer <jwt>
Authorization: IlapAnalyticsToken <service token>

The DataReader role is sufficient for all export reads. See the Authentication guide for how to obtain a token. A typical Python token acquisition, using Azure.Identity, looks like this:

from azure.identity import DefaultAzureCredential

# Get token
credential = DefaultAzureCredential() # DefaultAzureCredential will try and find the option that is setup
token = credential.get_token(f"api://{your_api_azure_id}/.Default")

Revision types

Every export endpoint takes a RevisionType parameter, one of:

  • Live — the current live schedule data.
  • Baseline — the current baseline.
  • OriginalBaseline — the original baseline, unaffected by later re-baselining.
  • Current — the latest revision, whatever its type.

See the API overview for the canonical explanation of revision types.

Export endpoints

All endpoints take ReportScheduleId (int) and RevisionType. The paginated endpoints additionally take PageNumber and PageSize.

Endpoint Paginated
/api/v3/export/Activities Yes
/api/v3/export/Successors Yes
/api/v3/export/ResourceAssignments Yes
/api/v3/export/PeriodizedActivities Yes
/api/v3/export/ActivityMetadataValues Yes
/api/v3/export/ActivityLinks Yes
/api/v3/export/Schedules No
/api/v3/export/Calendars No
/api/v3/export/Profiles No
/api/v3/export/Resources No
/api/v3/export/Structures No
/api/v3/export/MetadataFields No
/api/v3/export/ScheduleMetadataValues No
/api/v3/export/singleSchedule No

Response shape

Every export GET returns an OffsetPaginationResult object. Property names are PascalCase (the API serializes with Newtonsoft.Json), and properties whose value is null are omitted from the response:

  • Data — array of records.
  • PageNumber
  • PageSize
  • TotalItems
  • TotalPages

Responses are gzip-compressed; HTTP clients such as Python's requests decompress them transparently.

Pagination

For the paginated endpoints, pass PageNumber (1-based) and PageSize. Keep requesting subsequent pages until PageNumber >= TotalPages in the response.

Worked example — pull all activities

curl -s -H "Authorization: bearer $TOKEN" \
  "https://app-ilapanalytics-api-dev.azurewebsites.net/api/v3/export/Activities?ReportScheduleId=123&RevisionType=Live&PageNumber=1&PageSize=1000"
import requests

BASE  = "https://app-ilapanalytics-api-dev.azurewebsites.net"   # your environment
TOKEN = "<DataReader bearer token>"                             # see Authentication
HEADERS = {"Authorization": f"bearer {TOKEN}"}
REPORT_SCHEDULE_ID = "<report schedule id>"
REVISION = "Live"   # Live | Baseline | OriginalBaseline | Current

def export_all(resource, page_size=1000):
    """Page a /api/v3/export collection. Each response is an OffsetPaginationResult:
    {"Data": [...], "PageNumber", "PageSize", "TotalItems", "TotalPages"} (PascalCase)."""
    rows, page = [], 1
    while True:
        params = {"ReportScheduleId": REPORT_SCHEDULE_ID, "RevisionType": REVISION,
                  "PageNumber": page, "PageSize": page_size}
        r = requests.get(f"{BASE}/api/v3/export/{resource}", headers=HEADERS, params=params, timeout=180)
        r.raise_for_status()
        payload = r.json()
        rows.extend(payload["Data"])
        if page >= payload["TotalPages"]:
            break
        page += 1
    return rows

activities = export_all("Activities")
print(len(activities), "activities")

Abridged response (shape shown; PascalCase; null fields omitted):

{
  "Data": [
    { "ScheduleId": 123, "Description": "Install pump P-101",
      "ActualStart": "2026-01-05T00:00:00", "PlannedWorkHours": 40.0,
      "CurrentProgress": 0.35, "PlannedProgress": 0.40 }
  ],
  "PageNumber": 1, "PageSize": 1000, "TotalItems": 8421, "TotalPages": 9
}

Extension fields

Tenant-specific metadata values come through the export as dynamic fields via the metadata endpoints (/api/v3/export/ActivityMetadataValues, /api/v3/export/ScheduleMetadataValues, /api/v3/export/MetadataFields), so field names vary per tenant and are not enumerated here.

See also

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