Skip to main content
PATCH
/
knowledge
/
{folderId}
Update a file in a knowledge folder
curl --request PATCH \
  --url https://api.langdock.com/knowledge/{folderId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: multipart/form-data' \
  --form file='@example-file' \
  --form 'url=<string>' \
  --form 'attachmentId=<string>'
Using our API via a dedicated deployment? Just replace api.langdock.com with your deployment’s base URL: <deployment-url>/api/public
Updates an existing file (attachment) in a knowledge folder by replacing it with a new version. The old file is removed and the new file is processed and embedded.
Requires an API key with the KNOWLEDGE_FOLDER_API scope. The knowledge folder must be shared with the API key. See Share Knowledge Folders with the API for setup instructions.

Request Format

This endpoint accepts multipart/form-data requests with the file attached.

Path Parameters

ParameterTypeRequiredDescription
folderIdstringYesThe ID of the knowledge folder

Form Fields

FieldTypeRequiredDescription
attachmentIdstringYesThe ID of the attachment to update
filefileYesThe new file to upload (max 256MB)
urlstringNoURL shown to users when this file is used in an answer

Examples

Update with cURL

curl -X PATCH "https://api.langdock.com/knowledge/{folderId}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "attachmentId=att_abc123def456" \
  -F "file=@/path/to/new-document.pdf"

Update with JavaScript

const FormData = require("form-data");
const fs = require("fs");
const axios = require("axios");

async function updateAttachment(folderId, attachmentId, filePath) {
  const form = new FormData();
  form.append("attachmentId", attachmentId);
  form.append("file", fs.createReadStream(filePath));

  const response = await axios.patch(
    `https://api.langdock.com/knowledge/${folderId}`,
    form,
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
        ...form.getHeaders(),
      },
    }
  );

  return response.data;
}

// Example usage
try {
  const result = await updateAttachment(
    "folder_abc123",
    "att_xyz789",
    "/path/to/updated-report.pdf"
  );
  console.log("Attachment updated:", result);
} catch (error) {
  console.error("Failed to update:", error.response?.data?.message);
}

Update with Source URL

const FormData = require("form-data");
const fs = require("fs");
const axios = require("axios");

async function updateAttachmentWithUrl(folderId, attachmentId, filePath, sourceUrl) {
  const form = new FormData();
  form.append("attachmentId", attachmentId);
  form.append("file", fs.createReadStream(filePath));
  form.append("url", sourceUrl);

  const response = await axios.patch(
    `https://api.langdock.com/knowledge/${folderId}`,
    form,
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
        ...form.getHeaders(),
      },
    }
  );

  return response.data;
}

Response Format

Success Response (200 OK)

{
  status: "success";
  result: {
    id: string;          // Unique attachment ID
    name: string;        // Original filename
    mimeType: string;    // MIME type of the file
    createdAt: string;   // ISO 8601 timestamp
    updatedAt: string;   // ISO 8601 timestamp
    url: string | null;  // Source URL if provided
  };
}

Example Response

{
  "status": "success",
  "result": {
    "id": "att_abc123def456",
    "name": "updated-report.pdf",
    "mimeType": "application/pdf",
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-20T14:45:00.000Z",
    "url": null
  }
}

Error Handling

try {
  const response = await updateAttachment(folderId, attachmentId, filePath);
} catch (error) {
  if (error.response) {
    switch (error.response.status) {
      case 400:
        console.error("Invalid request:", error.response.data.message);
        // Possible causes: missing attachmentId, missing file, unsupported file type
        break;
      case 401:
        console.error("Invalid or missing API key");
        break;
      case 403:
        console.error("API key does not have access to this knowledge folder");
        break;
      case 404:
        console.error("Knowledge folder or attachment not found");
        break;
      case 408:
        console.error("Upload request timed out");
        break;
      case 413:
        console.error("File size exceeds 256MB limit");
        break;
      case 429:
        console.error("Rate limit exceeded");
        break;
      case 500:
        console.error("Server error");
        break;
    }
  }
}

Processing Status

After updating, the new file is processed asynchronously. Use the Retrieve Files endpoint to check processing status. The syncStatus field indicates the current state:
  • UPLOADING - File is being uploaded
  • UPLOADED - File is uploaded and queued for processing
  • EXTRACTING - Text is being extracted from the file
  • EMBEDDING - Embeddings are being generated
  • SYNCED - File is ready for search
  • ACTION_FAILED, EXTRACTION_FAILED, EMBEDDING_FAILED, TIMEOUT - Processing failed
Langdock intentionally blocks browser-origin requests to protect your API key and ensure your applications remain secure. For more information, please see our guide on API Key Best Practices.

Authorizations

Authorization
string
header
required

API key as Bearer token. Format "Bearer YOUR_API_KEY"

Path Parameters

folderId
string
required

The ID of the knowledge folder

Body

multipart/form-data
file
file

The new file to upload

url
string

URL that is shown to the user if the file is used in an answer

attachmentId
string

The ID of the attachment to update

Response

200

Attachment updated successfully