---
title: "✨ List user progress for a learning resource"
method: GET
path: "/api/learning-resources/{id}/user-progress/"
tags: ["Learning Resources"]
---

# ✨ List user progress for a learning resource

`GET /api/learning-resources/{id}/user-progress/`

<Card href="https://humansignal.com/goenterprise">
        <img style="pointer-events: none; margin-left: 0px; margin-right: 0px;" src="https://docs.humansignal.com/images/badge.svg" alt="Label Studio Enterprise badge"/>
        <p style="margin-top: 10px; font-size: 14px;">
            This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)
        </p>
    </Card>
Paginated progress for users who started the course.

## Path parameters

- `id` integer, required

## Query parameters

- `ordering` string
- `page` integer
- `page_size` integer
- `scope` string
- `search` string
- `workspace` integer

## Response `200`

- PaginatedUserLearningProgressListList
  - `count` integer, required
  - `next` string, uri, nullable
  - `previous` string, uri, nullable
  - `results` UserLearningProgressList[], required
    - `completed_at` string, date-time, nullable, required
    - `imported_at` string, date-time, nullable, required
    - `is_stale` boolean, required
    - `last_module_title` string, nullable, required
    - `last_page_id` string, nullable, required
    - `last_page_title` string, nullable, required
    - `pages_visited` string[], required
    - `progress_percent` number, double, required
    - `quiz_summary` object, required
    - `requires_retake` boolean, required
    - `started_at` string, date-time, nullable, required
    - `status` string, required
    - `time_spent_seconds` integer, required
    - `user` UserSimple, required — A ModelSerializer that takes additional arguments for "fields", "omit" and "expand" in order to control which fields are displayed, and whether to replace simple values with complex, nested serializations
      - `avatar` string, nullable, required
      - `email` string, email
      - `first_name` string
      - `id` integer, required
      - `last_name` string
      - `username` string, required

## Changes

- **2026-07-08** `b5f055b9d45b` — 7 breaking
  - the response property `results/items/last_module_title` became nullable for the status `200`
  - the response property `results/items/last_page_id` became nullable for the status `200`
  - the response property `results/items/last_page_title` became nullable for the status `200`
  - the response property `results/items/user/allOf[#/components/schemas/UserSimple]/avatar` became nullable for the status `200`
  - …3 more
- **2026-07-06** `c2893748a8d3` — 1 breaking, 2 info
  - for the `path` request parameter `id`, the type/format was changed from `string`/`` to `integer`/``
  - added the new optional `query` request parameter `scope`
  - added the new optional `query` request parameter `workspace`
- **2026-06-16** `5e3bb574b08d` — 1 info
  - added the required property `results/items/imported_at` to the response with the `200` status
- **2026-06-12** `99c2c668ac54` — 1 breaking
  - the `results/items/pages_visited` response's property type/format changed from ``/`` to `array`/`` for status `200`
- **2026-06-11** `d76c2afe3671` — 1 info
  - added the required property `results/items/pages_visited` to the response with the `200` status

[Full history](https://skmtc.dev/humansignal/apis/label-studio-api/changes/api/learning-resources/:id/user-progress/get.md)

---

[API](https://skmtc.dev/humansignal/apis/label-studio-api.md) · [All operations](https://skmtc.dev/humansignal/apis/label-studio-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/humansignal/label-studio-api/revisions/89caa2dca86f/schema)
