Learning Plan Progress API — Queries

Retrieve per-user learning plan progress records for the authenticated company.

Endpoint
POSThttps://api.udacity.com/api/public/api/v1/learning-plan-progress/graphql

learningPlanProgress

Required scope: COMPANY:<companyId>

Input fields

planIdID!Required

The learning plan ID to retrieve progress for.

filterLearningPlanProgressFilter

Filter criteria.

orderByLearningPlanProgressOrderBy

Field to sort results by.

orderSortOrder

Sort direction (ASC or DESC).

firstInt

Maximum results to return (default 50).

afterString

Cursor for forward pagination.

Filter fields

userIds[ID!]

Filter by specific user IDs.

subscriptionStatus[SubscriptionStatus!]

Filter by subscription status.

Returns: LearningPlanProgressConnection!

Signature
type Query {
  learningPlanProgress(input: LearningPlanProgressInput!): LearningPlanProgressConnection!
}
Query
query GetLearningPlanProgress($planId: ID!) {
  learningPlanProgress(input: {
    planId: $planId
    filter: { subscriptionStatus: [ACTIVE] }
    orderBy: LAST_ACTIVE_AT
    order: DESC
    first: 10
  }) {
    totalCount
    pageInfo { hasNextPage endCursor }
    edges {
      node {
        userId
        planId
        subscriptionStatus
        requiredStepsTotal
        requiredStepsCompleted
        assessmentsComplete
        startedAt
        lastActiveAt
        completedAt
        createdAt
        updatedAt
      }
    }
  }
}
Variables
{
  "planId": "YOUR_PLAN_ID"
}
Response
{
  "data": {
    "learningPlanProgress": {
      "totalCount": 48,
      "pageInfo": {
        "hasNextPage": true,
        "endCursor": "eyJpZCI6IjEwIn0="
      },
      "edges": [
        {
          "node": {
            "userId": "8a386eac-5a18-4229-88a4-add7f1ee600f",
            "planId": "fd6f0490-2072-43b0-b1d0-7ee82fe96df2",
            "subscriptionStatus": "ACTIVE",
            "requiredStepsTotal": 5,
            "requiredStepsCompleted": 3,
            "assessmentsComplete": 2,
            "startedAt": "2026-01-15T10:00:00Z",
            "lastActiveAt": "2026-03-10T14:30:00Z",
            "completedAt": null,
            "createdAt": "2026-01-15T10:00:00Z",
            "updatedAt": "2026-03-10T14:30:00Z"
          }
        }
      ]
    }
  }
}