Update Asset Library Item
Update Asset Library item metadata. Providing sourceUrl re-fetches the file for ingestible types.
Updates metadata on an existing Asset Library item. Sending sourceUrl re-fetches the file for
ingestible types (image, resource_file, scorm, xapi). Metadata-only requests skip file
processing.
https://example.thoughtindustries.com/v3/assetLibraryItems/:idThis endpoint is served by the v3 API. Its full path is
https://{instance}.thoughtindustries.com/v3/assetLibraryItems/{id}, not the/incoming/v2base URL used by the rest of this reference. Use the full URL shown in the examples below.
Example request — metadata only
curl -X PUT "https://{instance}.thoughtindustries.com/v3/assetLibraryItems/7a6b5c4d-3e2f-1a0b-9c8d-7e6f5a4b3c2d" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"title": "Company logo (updated)",
"description": "Primary brand mark"
}'Example request — replace the file
curl -X PUT "https://{instance}.thoughtindustries.com/v3/assetLibraryItems/443d8182-d461-4568-a777-918ca729fd85" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"sourceUrl": "https://example.com/packages/golf-scorm-2004-rev2.zip",
"fileName": "golf-scorm-2004-rev2.zip"
}'Parameters
Requires the centrallibrary.edit permission. A company API key satisfies this.
| Name | Type | Required | Location | Description |
|---|---|---|---|---|
id | uuid | Yes | path | Asset Library item ID. |
title | string | No | body | Display title. Maximum 500 characters. Empty string is rejected. |
sourceUrl | url | No | body | Hosted HTTP or HTTPS URL. Re-fetches and replaces the stored file. |
description | string | No | body | Maximum 5000 characters. |
fileName | string | No | body | Original file name. Maximum 500 characters. When omitted on a sourceUrl replace, the last path segment of the URL is used. |
tagIds | uuid[] | No | body | Replacement tag ID list. |
imageAltText | string | No | body | Image only. Maximum 250 characters. |
imageCaption | string | No | body | Image only. Maximum 2000 characters. |
imageLink | url | No | body | Image only. |
imageNewTab | boolean | No | body | Image only. |
imageTitle | string | No | body | Image only. Maximum 500 characters. |
You cannot change assetType. Image-specific fields are rejected unless the existing item is an
image.
sourceUrl on a wysiwyg or certificateTemplate item returns 422 — those types cannot be
re-ingested. For scorm and xapi, a new sourceUrl sets processingStatus to pending and
re-queues extraction. For image and resource_file, the fetch runs in this request.
Example response
Note the data wrapper — v3 endpoints nest their payload under data.
{
"data": {
"id": "7a6b5c4d-3e2f-1a0b-9c8d-7e6f5a4b3c2d",
"title": "Company logo (updated)",
"assetType": "image",
"description": "Primary brand mark",
"body": "https://ti-course-uploads.s3.amazonaws.com/…/logo.png",
"contentType": "image/png",
"fileName": "logo.png",
"tagIds": [],
"version": 1,
"locationIds": [],
"imageAltText": null,
"imageCaption": null,
"imageLink": null,
"imageNewTab": false,
"imageTitle": null,
"isNew": true,
"processingStatus": "ready",
"createdAt": "2026-08-26T15:36:24.000Z",
"updatedAt": "2026-08-26T16:02:11.000Z"
}
}After a SCORM or xAPI sourceUrl replace, poll
Get Asset Library Item until processingStatus is ready or
failed.
Errors
A missing, soft-deleted, revision, or cross-tenant ID returns 404 with
code: "RESOURCE_NOT_FOUND" and
message: "AssetLibraryItem with identifier \"{id}\" was not found".
Image fields on a non-image item return 422:
{
"code": "IMAGE_FIELDS_NOT_ALLOWED",
"message": "Image-specific fields can only be set on assets with type \"image\".",
"category": "BUSINESS_LOGIC",
"timestamp": "2026-08-26T16:02:11.000Z",
"statusCode": 422
}sourceUrl on a non-ingestible type returns 422 with code: "SOURCE_URL_NOT_SUPPORTED" and
message: "Re-ingestion is not supported for asset type \"wysiwyg\"." (the type in the message is
the stored type).
When an image or resource_file replace fails to fetch, metadata that was also in the body is
still saved, then the request returns 422 with code: "ASSET_UPLOAD_FAILED" and
message: "Failed to process the asset file. The metadata changes were saved but the file was not updated. Please verify the source URL and try again."
A path id that is not a UUID, a malformed URL, or an unrecognized property returns 400 with
code: "BAD_REQUEST" and category: "CLIENT_ERROR". message names the field. timestamp,
statusCode, and metadata.errors are present on the same body; see
List Asset Library Items for the shape.
A missing or invalid API key returns 401 with code: "UNAUTHENTICATED". A manager session
without centrallibrary.edit returns 403 with code: "FORBIDDEN" and
message: "Insufficient permissions: centrallibrary.edit required".
Rate limit
60 requests per 60 seconds, counted per instance. This limit is specific to this endpoint and is
independent of the per-family rate limits that apply to /incoming/v2 endpoints.