GraphQL API

Modified on Wed, 15 Jul at 4:13 PM

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

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