The ILAP Analytics GraphQL API lets you query scheduling and progress data with precise control over which fields, filters, and page sizes you get back. This reference is for planners and Power BI / report developers building filtered, shaped reporting queries — for example, feeding a BI tool or a custom report with exactly the fields and rows it needs.
Endpoint
POST https://app-ilapanalytics-api-dev.azurewebsites.net/graphql
Use the /graphql-voyager endpoint to explore the schema interactively — types, fields, and relationships, including any tenant-specific extension fields.
Schema introspection is open and does not require a token. Querying actual data requires a bearer token scoped to the DataReader role — see Authentication.
Reporting queries
| Query | Purpose |
|---|---|
reportSchedules |
List report schedules with their metadata field values; filter with where. |
reportScheduleByIdWithRevisions |
One report schedule with all revision variants (Live / Baseline / OriginalBaseline / Current). Cursor variant: reportScheduleByIdWithRevisionsPaginated. |
reportScheduleByIdWithActivitiesPeriodized |
One report schedule with its activities and periodized progress. Cursor variant: reportScheduleByIdWithActivitiesPeriodizedPaginated. |
reportActivitiesByReportScheduleId |
Report activities for a report schedule. Cursor variant: reportActivitiesByReportScheduleIdPaginated. |
reportResourceAssignmentByReportScheduleId |
Resource assignments for a report schedule. Cursor variant: reportResourceAssignmentByReportScheduleIdPaginated. |
activitiesByScheduleId |
Activities for a raw (imported) schedule by schedule id. |
calendarById |
A calendar (with operations) by id. |
metadataFields |
Metadata field definitions. |
dataById |
Data from an imported ILAP file by id. |
reportScheduleLevelProgressSummary |
Aggregated progress (planned / earned / actual hours) at schedule level for a cutoff date; cursor-paginated. |
reportActivityLevelProgressSummary |
Aggregated progress at activity level for a cutoff date and report schedule; cursor-paginated. |
Filtering, sorting, projection, paging
Every list query accepts a where argument for filtering (e.g. where: { id: { eq: 4 } }) and an order argument for sorting. Queries that return large result sets — like the progress summary queries — are cursor-paged: use first to set a page size and after (with the endCursor from pageInfo) to fetch the next page. Projection is automatic — you only get back the fields you list in the query, so keep queries narrow to reduce payload size.
Example — list report schedules
{
reportSchedules {
reportScheduleTypeId
description
status
isClosed
lastSubmitted
}
}
Example — schedule-level progress summary (reporting)
query Progress($cutoff: DateTime!) {
reportScheduleLevelProgressSummary(cutoffDate: $cutoff, first: 50) {
nodes {
reportScheduleCode
reportScheduleDescription
perPlannedHours
perEarnedHours
perActualHours
cumPlannedHours
cumEarnedHours
cumActualHours
}
pageInfo { hasNextPage endCursor }
}
}
Extension fields
Tenant-specific metadata fields are added dynamically to types like Activity/ReportActivity; discover them per tenant via /graphql-voyager.
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
Feedback sent
We appreciate your effort and will try to fix the article