---
title: "✨ Update or delete a module"
method: PATCH
path: "/api/learning-resources/{id}/modules/{module_id}/"
tags: ["Learning Resources"]
---

# ✨ Update or delete a module

`PATCH /api/learning-resources/{id}/modules/{module_id}/`

<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>
Update or delete a module in a learning resource.

## Path parameters

- `id` integer, required
- `module_id` string, required

## Request body

- PatchedLearningResourceRequest
  - `allow_standalone` boolean
  - `color` string, nullable
  - `cover_image_url` string
  - `default_allow_manual_access` boolean
  - `default_gate_annotator_data_manager` boolean, nullable
  - `default_gate_annotator_label_stream` boolean, nullable
  - `default_gate_reviewer_data_manager` boolean, nullable
  - `default_gate_reviewer_label_stream` boolean, nullable
  - `default_gate_reviewer_review_stream` boolean, nullable
  - `estimated_duration_unit` 'minutes' | 'hours' | 'days' | 'weeks' — * `minutes` - Minutes * `hours` - Hours * `days` - Days * `weeks` - Weeks
  - `estimated_duration_value` integer, nullable
  - `generate_certificate_on_completion` boolean
  - `hide_completed_quizzes` boolean
  - `summary` string
  - `title` string
  - `workspace` integer, nullable

## Response `200`

- CourseModule
  - `content` unknown
  - `created_at` string, date-time, required
  - `id` integer, required
  - `learning_resource` integer, required
  - `marked_stale` boolean
  - `page_count` integer, required
  - `sort_order` integer
  - `title` string
  - `updated_at` string, date-time, required
  - `updated_by` 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

## Other responses

- `204` — No response body

## Changes

- **2026-07-08** `b5f055b9d45b` — 2 breaking
  - the response property `updated_by/allOf[#/components/schemas/UserSimple]/avatar` became nullable for the status `200`
  - the `page_count` response's property type/format changed from `string`/`` to `integer`/`` for status `200`
- **2026-07-06** `c2893748a8d3` — 1 breaking
  - for the `path` request parameter `id`, the type/format was changed from `string`/`` to `integer`/``
- **2026-06-17** `4a7384ebdfdf` — 1 info
  - added the required property `updated_by` to the response with the `200` status
- **2026-06-16** `77f50e3ef220` — 3 warning, 15 info
  - removed the request property `default_gate_before_first_annotation` (media type: application/json)
  - removed the request property `default_gate_before_first_annotation` (media type: application/x-www-form-urlencoded)
  - removed the request property `default_gate_before_first_annotation` (media type: multipart/form-data)
  - added the new optional request property `default_gate_annotator_data_manager` (media type: application/json)
  - …14 more
- **2026-06-10** `d3cf6cceebfd` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/humansignal/apis/label-studio-api/changes/api/learning-resources/:id/modules/:module_id/patch.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/037e8b19fbfd/schema)
