---
title: "Update training content (bulk patch)"
method: PATCH
path: "/learning/lms-integrations/{provider-identifier}/training-content"
tags: ["Provider integrations"]
---

# Update training content (bulk patch)

`PATCH /learning/lms-integrations/{provider-identifier}/training-content`

Updates one or more existing training content items. Only the fields you include in the request are changed — fields you omit remain as they are. Use `/trainingContent/externalIdentifier` in each item to identify which content row to update.

Returns `200 OK` with a `success` array of updated identifiers and an `errors` array for any items that could not be found.

**Before using this endpoint:**
<ul>
  <li>Training content items must already exist — create them first using <a href="/reference/post_learning-lms-integrations-provider-identifier-training-content" target="_blank">Create training content</a>.</li>
  <li>Include `/trainingContent/externalIdentifier` in each item to identify the content row to update.</li>
  <li>Only the fields you provide will be updated (patch semantics). Omitted fields are left unchanged.</li>
</ul>

**Testing notes:** Open the **Examples** panel and select a **Request Example** to inspect the body parameters.

## Path parameters

- `provider-identifier` string, required

## Request body

- PartnerContentBulkWriteRequest — Bulk training content write request. Each element of `items` is a JSON object whose keys are field IDs under `/trainingContent/`.
  - `items` TrainingContentItemFields[], required — Content rows. Maximum count is enforced by the service (default 500).
    - `/trainingContent/externalIdentifier` string — External idempotency key for the content row.
    - `/trainingContent/title` string — Title of the training content.
    - `/trainingContent/description` string — Description text.
    - `/trainingContent/sourceLink` string — URL to the content at the provider.
    - `/trainingContent/thumbnail` string — Thumbnail image URL.
    - `/trainingContent/duration` integer — Duration in seconds.
    - `/trainingContent/language` string — Language code for the training content. To obtain the available language codes, call the <a href="https://apidocs.hibob.com/reference/get_company-named-lists-listname" target="_blank">Get all company lists Metadata API</a> with `languages` in the listname path parameter.
    - `/trainingContent/category` string — Optional. The category label (display name) to assign to the training content. If the name matches an existing entry in the Bob's categories list, that category is used. If no match is found, a new category is created automatically. To view existing categories, call the <a href="https://apidocs.hibob.com/reference/get_company-named-lists-listname" target="_blank">Get all company lists Metadata API</a> with `trainingContentCategories` in the listname path parameter.
    - `/trainingContent/learningGoals` string — Learning goals or outcomes text.
    - `/trainingContent/publishDate` string — Publish date-time (ISO-8601 string as accepted by the mapper).
    - `/trainingContent/createdAt` string — The time the content was last updated on the provider's side (ISO-8601 date-time string). Used for delta sync scenarios to determine whether a content item has changed since the last sync.
    - `/trainingContent/intendedFor` string — Free-text description of the intended audience (for example, "All employees" or "Managers").

## Response `200`

Success — per-item outcomes

- PartnerContentBulkResponse — Bulk operation outcome from `PartnerContentBulkResponse`.
  - `success` string[] — External identifiers that were processed successfully.
  - `errors` PartnerContentErrorItem[] — Per-item failures with external id and message.
    - `externalIdentifier` string, required — External identifier of the failing item.
    - `message` string, required — Failure reason (for example validation or downstream error).

## Other responses

- `400` — Bad request
- `401` — Authentication failed
- `403` — Forbidden — feature disabled or missing permissions
- `404` — Not found — unknown integration
- `422` — Unprocessable entity — invalid item(s)
- `429` — Rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.net/hibob/apis/employee-data-api.md) · [All operations](https://skmtc.net/hibob/apis/employee-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/hibob/employee-data-api/revisions/0781ebbdda91/schema)
