Skip to main content

File Management

Endpoints for uploading, listing, reading, writing, and deleting files within libraries.

Files can be addressed two ways: by id (/files/{fileId}) or by path (/contents/{path*}). The path-based routes create parent directories on demand and accept JSON, which makes them convenient for programmatic and AI-generated content.

POST /api/_library-upload

Upload a previously-staged file into a library.

Authentication: Required

Permissions: Requires write access to the target library (defaults to the caller's personal uploads library when libraryId is omitted)

Request Body:

FieldTypeRequiredDescription
uploadIdstringYesId of a staged upload (from the upload flow)
libraryIdstring (UUID)NoTarget library id. Omit to use the caller's uploads library
pathstringNoFile path within the library (e.g. "assets/index.js"). Creates parent directories
progressstringNoProgress-tracking identifier

Response:

Uploaded files are stored as embedded with a 90-day expiresAt. For non-embedded target libraries the file is queued for vector indexing. Responds 201 Created with a Location header pointing at the new file.

Upload a filePOST /api/_library-upload
Two-step: stage bytes via the upload flow to get an uploadId, then POST it here. Omit libraryId to target your personal uploads library. Uploaded files are stored as embedded with a 90-day expiry. Responds 201 with a Location header.
Request body
{
"uploadId": "00000000-0000-4000-8000-000000000001",
"libraryId": "00000000-0000-4000-8000-000000000002"
}
Response · 201
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/00000000-0000-4000-8000-000000000002/files/00000000-0000-4000-8000-000000000003"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000003",
"contentType": "text/markdown",
"directory": false,
"filename": "runbook.md",
"parentId": null,
"libraryId": "00000000-0000-4000-8000-000000000002",
"embedded": true,
"expiresAt": "2026-01-15T16:20:00.000Z",
"indexed": true,
"indexingStartedAt": null,
"ownerId": "admin",
"modifiedAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"lobId": "16400",
"data": {},
"templateId": null,
"role": null,
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"description": null,
"assistantId": null,
"integrationId": null,
"remoteId": null,
"remoteUrl": null,
"size": 524288,
"indexedAt": "2026-01-15T16:20:00.000Z",
"indexingErroredAt": null,
"indexingErrorMessage": null,
"messageId": null,
"chatId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.
Two-step upload

This route does not receive the file bytes directly. First stage the bytes through the upload flow to obtain an uploadId, then post that id here. See the Storage API for the staging step.


GET /api/libraries/{id}/files

List files under a directory with filtering, sorting, and pagination.

Authentication: Required

Permissions: Read access to the library

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id

Query Parameters:

ParameterTypeDefaultDescription
parentIdstringnullFilter by parent directory id
dirstringnullFilter by directory path (e.g. /docs); accepts a leading slash or not
qstring-Filter by filename (case-insensitive substring)
startinteger0Pagination offset
endinteger100Pagination limit (max rows returned)
sortarray[{ colId: "filename", sort: "asc" }]Sort model; sortable columns: filename, indexed, modifiedAt, indexingStartedAt, indexedAt, remoteSize
dirOnlybooleanfalseReturn only directories

Response:

A flat array of the immediate children matching the filter (directories sort first). Each row carries path, canIndex (eligible for vector indexing), and runningDescendantsCount (files currently indexing beneath a directory).

List filesGET /api/libraries/admin:engineering-docs/files
A flat array of the immediate children of the library root (pass parentId or dir to descend). Directories sort first. canIndex marks files eligible for vector indexing; runningDescendantsCount counts files indexing under a directory.
Response · 200
[
{
"id": "00000000-0000-4000-8000-000000000001",
"filename": "docs",
"canIndex": true,
"remoteUrl": null,
"directory": true,
"contentType": "false",
"indexed": false,
"modifiedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexingStartedAt": null,
"indexedAt": null,
"path": "/docs",
"size": null,
"runningDescendantsCount": 0
},
{
"id": "00000000-0000-4000-8000-000000000002",
"filename": "README.md",
"canIndex": true,
"remoteUrl": null,
"directory": false,
"contentType": "text/markdown",
"indexed": false,
"modifiedAt": "2026-01-15T16:20:00.000Z",
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexingStartedAt": null,
"indexedAt": null,
"path": "/README.md",
"size": 524288,
"runningDescendantsCount": 0
}
]
Captured from the API examples test suite; ids and timestamps are normalized.
Directory indexing progress

runningDescendantsCount shows how many files within a directory are currently being indexed. Use it for progress indicators.


GET /api/libraries/{id}/files-list

Get the full, flat list of every file and directory in the library (a single non-paginated query, faster than the recursive listing above for large trees).

Authentication: Required

Permissions: Read access to the library. Non-configurers see only indexed files unless indexedOnly=false and they can configure.

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id

Query Parameters:

ParameterTypeDefaultDescription
dirOnlybooleanfalseReturn only directories
indexedOnlybooleanfalseRestrict to indexed files

Response:

A flat array ordered directories-first, then by filename.

List all files (flat)GET /api/libraries/admin:engineering-docs/files-list
A flat array of every file and directory in the library, ordered directories-first then by name. Faster than the recursive files listing for large libraries.
Response · 200
[
{
"id": "00000000-0000-4000-8000-000000000001",
"parentId": null,
"filename": "docs",
"canIndex": true,
"remoteUrl": null,
"directory": true,
"contentType": "false",
"indexed": false,
"modifiedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexingStartedAt": null,
"indexedAt": null,
"size": null,
"libraryId": "00000000-0000-4000-8000-000000000002"
},
{
"id": "00000000-0000-4000-8000-000000000003",
"parentId": "00000000-0000-4000-8000-000000000001",
"filename": "overview.md",
"canIndex": true,
"remoteUrl": null,
"directory": false,
"contentType": "text/markdown",
"indexed": false,
"modifiedAt": "2026-01-15T16:20:00.000Z",
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexingStartedAt": null,
"indexedAt": null,
"size": "524288",
"libraryId": "00000000-0000-4000-8000-000000000002"
},
{
"id": "00000000-0000-4000-8000-000000000004",
"parentId": null,
"filename": "README.md",
"canIndex": true,
"remoteUrl": null,
"directory": false,
"contentType": "text/markdown",
"indexed": false,
"modifiedAt": "2026-01-15T16:20:00.000Z",
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexingStartedAt": null,
"indexedAt": null,
"size": "524288",
"libraryId": "00000000-0000-4000-8000-000000000002"
},
"… 1 more items (4 total) — omitted from docs"
]
Captured from the API examples test suite; ids and timestamps are normalized.

PATCH /api/libraries/{id}/files

Bulk-update file metadata using JSON Patch replace operations with glob pattern matching on paths.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id

Request Body:

An array of JSON Patch operations. path is a glob over file paths followed by the property to set (e.g. /docs/*.md/modifiedAt).

FieldTypeDescription
opstringOnly replace is supported
pathstringGlob pattern over the file path plus the trailing property
valueanyNew value for the property

Allowed properties: filename, directory, contentType, remoteUrl, modifiedAt, indexingErroredAt, indexingErrorMessage, indexingStartedAt, indexedAt, size

Response:

Bulk-update file metadataPATCH /api/libraries/admin:engineering-docs/files
JSON Patch replace operations whose path is a glob over file paths plus the property to set, e.g. /docs/*.md/modifiedAt. Only replace is supported; use the bulk-index route for indexed status.
Request body
[
{
"op": "replace",
"path": "/docs/*.md/modifiedAt",
"value": "2026-01-15T16:20:00.000Z"
}
]
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/files"
}
},
"status": "success"
}
Captured from the API examples test suite; ids and timestamps are normalized.
Indexing operations

indexed is intentionally not an allowed property here. To bulk update indexed status, use POST /api/libraries/{id}/files/_bulk-index instead.


GET /api/libraries/{id}/files/{fileId}

Get metadata for a specific file.

Authentication: Required

Permissions: Read access to the library

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Response:

Get a single fileGET /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001
Full file metadata with HAL links to its contents and indexed state.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/files/00000000-0000-4000-8000-000000000001"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"filename": "overview.md",
"embedded": false,
"contentType": "text/markdown",
"lobId": "16400",
"role": null,
"description": null,
"data": {},
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"assistantId": null,
"directory": false,
"indexed": false,
"indexingStartedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexedAt": null,
"parentId": "00000000-0000-4000-8000-000000000002",
"libraryId": "00000000-0000-4000-8000-000000000003",
"remoteId": null,
"remoteUrl": null,
"size": "524288",
"modifiedAt": "2026-01-15T16:20:00.000Z",
"messageId": null,
"chatId": null,
"expiresAt": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"ownerId": null,
"templateId": null,
"integrationId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

PATCH /api/libraries/{id}/files/{fileId}

Edit a file's contents with exact search-and-replace edits.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Request Body:

FieldTypeRequiredDescription
editsarrayYesOne or more { oldText, newText } pairs
edits[].oldTextstringYesExact text to find. Must match exactly once in the file
edits[].newTextstringNoReplacement text (empty string deletes the matched text)

Example:

{
"edits": [
{ "oldText": "Welcome to the engineering documentation.", "newText": "Welcome to the Order Desk engineering documentation." }
]
}

Response:

Responds with the applied-edit count and a unified diff. Editing a directory returns 400.

Edit a file (search and replace)PATCH /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001
Body is { edits: [{ oldText, newText }] }. Each oldText must match exactly once. Responds with the applied-edit count and a unified diff.
Request body
{
"edits": [
{
"oldText": "Welcome to the engineering documentation.",
"newText": "Welcome to the Order Desk engineering documentation."
}
]
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/files/00000000-0000-4000-8000-000000000001"
}
},
"file": {
"id": "00000000-0000-4000-8000-000000000001",
"filename": "overview.md"
},
"editsApplied": 1,
"diff": "Index: overview.md\n===================================================================\n--- overview.md\toriginal\n+++ overview.md\tmodified\n@@ -1,2 +1,2 @@\n # Overview\n-Welcome to the engineering documentation.\n+Welcome to the Order Desk engineering documentation.\n"
}
Captured from the API examples test suite; ids and timestamps are normalized.
Not JSON Patch

This route does not accept RFC 6902 JSON Patch. It applies literal search-and-replace edits, which is the contract the AI file tools rely on. To replace a whole file, use PUT .../contents; for path-based incremental edits, use PATCH .../contents/{path*}.


DELETE /api/libraries/{id}/files/{fileId}

Delete a file from the library.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Response:

Responds 200 with an empty body.

Delete a fileDELETE /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001
Removes the file (or, for a directory, the directory and everything under it). Responds 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.
Recursive delete

Deleting a directory also deletes every file and subdirectory within it.


GET /api/libraries/{id}/files/{fileId}/contents

Get file contents as a stream. Served inline by default; pass ?download=true for a Content-Disposition: attachment download.

Authentication: Required

Permissions: Read access to the library and file

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Query Parameters:

ParameterTypeDescription
downloadbooleanWhen true, download instead of inline

Response:

The raw file bytes with the file's Content-Type. (Binary stream, not shown.)


PUT /api/libraries/{id}/files/{fileId}/contents

Replace a file's contents.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Request Body:

The raw new file content (the request body is the file bytes, not a JSON envelope).

Response:

Responds with the updated file. Writing to a directory returns 400.

Replace file contentsPUT /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001/contents
The request body is the raw new file content (sent as the file bytes, not JSON). Responds with the updated file.
Request body
"# Overview\nReplaced contents.\n"
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/files/00000000-0000-4000-8000-000000000001/contents"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"filename": "overview.md",
"embedded": false,
"contentType": "text/markdown",
"lobId": "16400",
"role": null,
"description": null,
"data": {},
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"assistantId": null,
"directory": false,
"indexed": false,
"indexingStartedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexedAt": null,
"parentId": "00000000-0000-4000-8000-000000000002",
"libraryId": "00000000-0000-4000-8000-000000000003",
"remoteId": null,
"remoteUrl": null,
"size": 524288,
"modifiedAt": "2026-01-15T16:20:00.000Z",
"messageId": null,
"chatId": null,
"expiresAt": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"ownerId": null,
"templateId": null,
"integrationId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/libraries/{id}/contents/{path*}

Read file contents by path (supports nested paths). This addresses a library file by path instead of id and serves identically to GET .../files/{fileId}/contents.

Authentication: Required

Permissions: Read access to the library and file

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
pathstringFile path (e.g. assets/index.js)

Query Parameters:

ParameterTypeDescription
downloadbooleanWhen true, download instead of inline

Response:

The raw file bytes with the file's Content-Type. (Binary stream, not shown.)

Example:

GET /api/libraries/admin:engineering-docs/contents/assets/images/logo.png

PUT /api/libraries/{id}/contents/{path*}

Write file contents by path. Creates the file and any missing parent directories.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
pathstringFile path (e.g. docs/new-file.md)

Request Body:

JSON, not raw bytes:

FieldTypeRequiredDescription
contentstringYesFile content (may be empty)
contentTypestringNoMIME type (auto-detected from the filename when omitted)
encodingstringNoutf8 (default) or base64

Response:

Responds 201 Created when the file is new, 200 OK when it already existed.

Write a file by pathPUT /api/libraries/admin:engineering-docs/contents/docs/overview.md
Body is JSON: { content, contentType?, encoding? }. Parent directories are created as needed. Responds 201 when the file is new, 200 when it already existed.
Request body
{
"content": "# Overview\nWelcome to the engineering documentation.\n"
}
Response · 201
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/contents/docs/overview.md"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"embedded": false,
"directory": false,
"libraryId": "00000000-0000-4000-8000-000000000002",
"parentId": "00000000-0000-4000-8000-000000000003",
"filename": "overview.md",
"contentType": "text/markdown",
"modifiedAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"createdAt": "2026-01-15T16:20:00.000Z",
"lobId": "16400",
"ownerId": null,
"data": {},
"templateId": null,
"role": null,
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"description": null,
"assistantId": null,
"integrationId": null,
"remoteId": null,
"remoteUrl": null,
"size": 524288,
"indexed": false,
"indexingStartedAt": null,
"indexedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"messageId": null,
"chatId": null,
"expiresAt": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

PATCH /api/libraries/{id}/contents/{path*}

Incrementally update file contents by path.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
pathstringFile path

Request Body:

FieldTypeRequiredDescription
operationstringYesOne of replace, append, prepend, insert
searchstringreplaceText to find (replace)
replacementstringNoReplacement text (replace)
replaceAllbooleanNoReplace all occurrences instead of the first (replace)
textstringappend/prepend/insertText to add
insertAtintegerinsertCharacter offset for insert

Example:

{ "operation": "append", "text": "\n## Troubleshooting\nSee the runbook.\n" }

Response:

Responds with the updated file. The file must already exist (404 otherwise); patching a directory returns 400.

Patch file contents by pathPATCH /api/libraries/admin:engineering-docs/contents/docs/setup.md
operation is one of replace, append, prepend, insert. replace uses { search, replacement, replaceAll? }; append/prepend/insert use { text } (insert also needs insertAt). Responds with the updated file.
Request body
{
"operation": "append",
"text": "\n## Troubleshooting\nSee the runbook.\n"
}
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/contents/docs/setup.md"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"filename": "setup.md",
"embedded": false,
"contentType": "text/markdown",
"lobId": "16400",
"role": null,
"description": null,
"data": {},
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"assistantId": null,
"directory": false,
"indexed": false,
"indexingStartedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexedAt": null,
"parentId": "00000000-0000-4000-8000-000000000002",
"libraryId": "00000000-0000-4000-8000-000000000003",
"remoteId": null,
"remoteUrl": null,
"size": 524288,
"modifiedAt": "2026-01-15T16:20:00.000Z",
"messageId": null,
"chatId": null,
"expiresAt": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"ownerId": null,
"templateId": null,
"integrationId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

POST /api/libraries/{id}/files/_bulk-index

Opt multiple files into or out of vector indexing.

Authentication: Required

Permissions: Requires strict configure access on the library

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id

Request Body:

FieldTypeRequiredDescription
filesarrayYesFile ids (UUIDs) to affect
indexedbooleanNoMark them indexed (true, default) or not

Example:

{ "files": ["00000000-0000-4000-8000-000000000001"], "indexed": true }

Response:

Opting in schedules the index-files job; database triggers cascade the change through directory subtrees and manage embeddings. Responds 200 with an empty body.

Bulk-set indexed statusPOST /api/libraries/admin:engineering-docs/files/_bulk-index
Body is { files: [fileId, ...], indexed: true|false }. Opting in schedules the index-files job. Responds 200 with an empty body.
Request body
{
"files": [
"00000000-0000-4000-8000-000000000001"
],
"indexed": true
}
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

GET /api/libraries/{id}/files/{fileId}/indexed

Get the current indexed flag of a file.

Authentication: Required

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Response:

A bare boolean.

Get a file’s indexed stateGET /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001/indexed
Responds with a bare boolean: true if the file is opted into vector indexing.
Response · 200
false
Captured from the API examples test suite; ids and timestamps are normalized.

PUT /api/libraries/{id}/files/{fileId}/indexed

Opt a file into indexing.

Authentication: Required

Permissions: Requires strict configure access on the library

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Request Body:

None. The route always sets indexed: true and schedules the index-files job; for a directory the change cascades to its subtree.

Response:

Responds with the updated file.

Opt a file into indexingPUT /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001/indexed
Marks the file (and, for a directory, its subtree) indexed and schedules the index-files job. No request body. Responds with the updated file.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/files/00000000-0000-4000-8000-000000000001/indexed"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"filename": "overview.md",
"embedded": false,
"contentType": "text/markdown",
"lobId": "16400",
"role": null,
"description": null,
"data": {},
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"assistantId": null,
"directory": false,
"indexed": true,
"indexingStartedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexedAt": null,
"parentId": "00000000-0000-4000-8000-000000000002",
"libraryId": "00000000-0000-4000-8000-000000000003",
"remoteId": null,
"remoteUrl": null,
"size": "524288",
"modifiedAt": "2026-01-15T16:20:00.000Z",
"messageId": null,
"chatId": null,
"expiresAt": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"ownerId": null,
"templateId": null,
"integrationId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.

DELETE /api/libraries/{id}/files/{fileId}/indexed

Opt a file out of indexing and delete its embeddings.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Response:

Responds 200 with an empty body. A database trigger clears indexedAt / indexingErroredAt and removes embeddings.

Clear a file’s indexed stateDELETE /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001/indexed
Opts the file out of indexing and deletes its embeddings. Responds 200 with an empty body.
Response · 200 · no body
Captured from the API examples test suite; ids and timestamps are normalized.

POST /api/libraries/{id}/files/{fileId}/_retry-indexing

Clear a file's indexing error and re-schedule indexing.

Authentication: Required

Permissions: Requires library:write

Path Parameters:

ParameterTypeDescription
idstringLibrary id or natural id
fileIdstring (UUID)File id

Response:

Responds with the updated file.

Retry indexing for a filePOST /api/libraries/admin:engineering-docs/files/00000000-0000-4000-8000-000000000001/_retry-indexing
Clears the file’s indexing error and re-schedules the index-files job. Responds with the updated file.
Response · 200
{
"_links": {
"self": {
"href": "https://informer.example.com/api/libraries/admin%3Aengineering-docs/files/00000000-0000-4000-8000-000000000001/_retry-indexing"
}
},
"extension": "md",
"tenant": "acme",
"id": "00000000-0000-4000-8000-000000000001",
"filename": "overview.md",
"embedded": false,
"contentType": "text/markdown",
"lobId": "16400",
"role": null,
"description": null,
"data": {},
"createdById": null,
"letterheadId": null,
"jobActionAttachmentId": null,
"jobActionId": null,
"oauthClientId": null,
"assistantId": null,
"directory": false,
"indexed": true,
"indexingStartedAt": null,
"indexingErroredAt": null,
"indexingErrorMessage": null,
"indexedAt": "2026-01-15T16:20:00.000Z",
"parentId": "00000000-0000-4000-8000-000000000002",
"libraryId": "00000000-0000-4000-8000-000000000003",
"remoteId": null,
"remoteUrl": null,
"size": "524288",
"modifiedAt": "2026-01-15T16:20:00.000Z",
"messageId": null,
"chatId": null,
"expiresAt": null,
"createdAt": "2026-01-15T16:20:00.000Z",
"updatedAt": "2026-01-15T16:20:00.000Z",
"ownerId": null,
"templateId": null,
"integrationId": null
}
Captured from the API examples test suite; ids and timestamps are normalized.
Error recovery

Use this when indexingErroredAt is set and you want to retry after fixing the underlying issue.