Program Progress API — Queries
Retrieve program enrollment and progress records for the authenticated company.
Endpoint
POSThttps://api.udacity.com/api/public/api/v1/program-progress/graphql
programProgress
Required scope: COMPANY:<companyId>
Input fields
queryString
Free-text search (matches on user email, name, etc.).
filterProgramProgressFilter
Filter criteria.
orderByProgramProgressOrderBy
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
programKey[ID!]
Filter by program keys.
programType[ProgramType!]
Filter by program type.
enrollmentStatus[EnrollmentStatus!]
Filter by enrollment status.
onTrackStatus[OnTrackStatus!]
Filter by on-track status.
learningPlanId[ID!]
Filter by associated learning plan IDs.
Returns: ProgramProgressConnection!
SignatureQueryResponse
type Query {
programProgress(input: ProgramProgressInput!): ProgramProgressConnection!
}query GetProgramProgress {
programProgress(input: {
query: "jamie"
filter: {
enrollmentStatus: [ENROLLED]
programType: [NANODEGREE]
}
orderBy: LAST_ACTIVE
order: DESC
first: 10
}) {
totalCount
pageInfo { hasNextPage endCursor }
edges {
node {
userId
userEmail
userFirstName
userLastName
enrollmentStatus
enrolledAt
programKey
programVersion
programType
completionPercentage
projectsRequiredTotal
projectsRequiredCompleted
learnerHours
onTrackStatus
lastActiveAt
learningPlanId
}
}
}
}{
"data": {
"programProgress": {
"totalCount": 87,
"pageInfo": {
"hasNextPage": true,
"endCursor": "eyJpZCI6IjEwIn0="
},
"edges": [
{
"node": {
"userId": "8a386eac-5a18-4229-88a4-add7f1ee600f",
"userEmail": "j.martinez@acmecorp.com",
"userFirstName": "Jamie",
"userLastName": "Martinez",
"enrollmentStatus": "ENROLLED",
"enrolledAt": "2026-01-15T10:30:00Z",
"programKey": "nd00113",
"programType": "NANODEGREE",
"completionPercentage": 65.0,
"onTrackStatus": "ON_TRACK",
"lastActiveAt": "2026-03-10T14:30:00Z"
}
}
]
}
}
}