> ## Documentation Index
> Fetch the complete documentation index at: https://docs.langdock.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Datei in eine Wissensdatenbank hochladen

> Lade eine neue Datei in eine Wissensdatenbank hoch

<Info>
  **Du nutzt unsere API in einem Dedicated Deployment?** Ersetze einfach `api.langdock.com` durch die Base URL deines Deployments: **`<deployment-url>/api/public`**
</Info>

Lädt eine neue Datei in eine bestimmte Wissensdatenbank hoch. Die Datei wird verarbeitet, eingebettet und für die semantische Suche verfügbar gemacht.

<Info>
  Erfordert einen API-Schlüssel mit dem `KNOWLEDGE_FOLDER_API` Scope. Der API-Schlüssel selbst benötigt die Rolle Bearbeiter für die Wissensdatenbank. Siehe [Wissensdatenbank mit der API teilen](/de/developer/knowledge-folder-api/sharing) für die Einrichtung.
</Info>

## Anforderungsformat

Dieser Endpunkt akzeptiert `multipart/form-data` Anfragen mit der angehängten Datei.

### Pfadparameter

| Parameter  | Typ    | Erforderlich | Beschreibung                |
| ---------- | ------ | ------------ | --------------------------- |
| `folderId` | string | Ja           | Die ID der Wissensdatenbank |

### Formularfelder

| Feld   | Typ    | Erforderlich | Beschreibung                                          |
| ------ | ------ | ------------ | ----------------------------------------------------- |
| `file` | file   | Ja           | Die hochzuladende Datei (max. 256MB)                  |
| `url`  | string | Nein         | Optionale Quell-URL, die mit der Datei verknüpft wird |

### Unterstützte Dateitypen

Wissensdatenbanken unterstützen folgende Dokumenttypen:

* PDF (`.pdf`)
* Word-Dokumente (`.doc`, `.docx`)
* Textdateien (`.txt`)
* Markdown (`.md`)
* HTML (`.html`)
* PowerPoint (`.pptx`, `.ppt`)

<Warning>
  Ausführbare Dateien und andere potenziell gefährliche Dateitypen werden aus Sicherheitsgründen blockiert.
</Warning>

## Beispiele

### Datei mit cURL hochladen

```bash theme={null}
curl -X POST "https://api.langdock.com/knowledge/{folderId}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@/pfad/zu/dokument.pdf"
```

### Datei mit JavaScript hochladen

```javascript theme={null}
const FormData = require("form-data");
const fs = require("fs");
const axios = require("axios");

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

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

  return response.data;
}
```

### Upload mit Quell-URL

```javascript theme={null}
const FormData = require("form-data");
const fs = require("fs");
const axios = require("axios");

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

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

  return response.data;
}
```

## Antwortformat

### Erfolgreiche Antwort (200 OK)

```typescript theme={null}
{
  status: "success";
  result: {
    id: string;          // Eindeutige Attachment-ID
    name: string;        // Originaler Dateiname
    mimeType: string;    // MIME-Typ der Datei
    createdAt: string;   // ISO 8601 Zeitstempel
    updatedAt: string;   // ISO 8601 Zeitstempel
    url: string | null;  // Quell-URL, falls angegeben
  };
}
```

### Beispielantwort

```json theme={null}
{
  "status": "success",
  "result": {
    "id": "att_abc123def456",
    "name": "quartalsbericht.pdf",
    "mimeType": "application/pdf",
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:30:00.000Z",
    "url": null
  }
}
```

## Fehlerbehandlung

```typescript theme={null}
try {
  const response = await uploadFile(folderId, filePath);
} catch (error) {
  if (error.response) {
    switch (error.response.status) {
      case 400:
        console.error("Ungültige Anfrage:", error.response.data.message);
        break;
      case 401:
        console.error("Ungültiger oder fehlender API-Schlüssel");
        break;
      case 403:
        console.error("API-Schlüssel hat keinen Zugriff auf diese Wissensdatenbank");
        break;
      case 404:
        console.error("Wissensdatenbank nicht gefunden");
        break;
      case 408:
        console.error("Upload-Anfrage hat das Zeitlimit überschritten");
        break;
      case 413:
        console.error("Dateigröße überschreitet das 256MB-Limit");
        break;
      case 429:
        console.error("Rate Limit überschritten");
        break;
      case 500:
        console.error("Server-Fehler");
        break;
    }
  }
}
```

## Verarbeitungsstatus

Nach dem Upload wird die Datei asynchron verarbeitet. Verwende den [Dateien abrufen](/de/developer/knowledge-folder-api/retrieve-files) Endpunkt, um den Verarbeitungsstatus zu prüfen. Das `syncStatus` Feld zeigt den aktuellen Zustand:

* `UPLOADING` - Datei wird hochgeladen
* `UPLOADED` - Datei ist hochgeladen und in der Warteschlange
* `EXTRACTING` - Text wird aus der Datei extrahiert
* `EMBEDDING` - Embeddings werden generiert
* `SYNCED` - Datei ist bereit für die Suche
* `ACTION_FAILED`, `EXTRACTION_FAILED`, `EMBEDDING_FAILED`, `TIMEOUT` - Verarbeitung fehlgeschlagen

### Asynchrone Upload-Variante

Für große Dateien oder wenn du nicht auf die Upload-Antwort warten musst, kannst du den asynchronen Upload-Endpunkt verwenden:

```text theme={null}
POST /knowledge/{folderId}/upload-async
```

Dieser Endpunkt akzeptiert die gleichen `multipart/form-data` Felder und gibt `202 Accepted` zurück, sobald die Datei empfangen wurde. Die Verarbeitung läuft im Hintergrund weiter.

```json theme={null}
{
  "status": "processing",
  "result": {
    "id": "att_abc123def456",
    "name": "quartalsbericht.pdf",
    "mimeType": "application/pdf",
    "createdAt": "2025-01-15T10:30:00.000Z",
    "updatedAt": "2025-01-15T10:30:00.000Z",
    "url": null,
    "processingStatus": "UPLOADED",
    "statusUrl": "/api/public/knowledge/{folderId}/{attachmentId}"
  },
  "message": "File uploaded successfully and is being processed in the background. Poll the statusUrl to check when processing completes (syncStatus: SYNCED)."
}
```

Nutze `GET {statusUrl}`, um den Verarbeitungsstatus abzufragen. Die Antwort gibt den aktuellen Status in `result.syncStatus` zurück.

<Info>
  Langdock blockiert bewusst Browser-basierte Anfragen, um deinen API-Schlüssel zu schützen und die Sicherheit deiner Anwendungen zu gewährleisten. Weitere Informationen findest du in unserem Guide zu [Best Practices für API-Schlüssel](/de/admin/ai-adoption-and-rollout/best-practices/api-key-best-practices).
</Info>


## OpenAPI

````yaml post /knowledge/{folderId}
openapi: 3.0.0
info:
  title: Langdock API
  version: 3.0.0
servers:
  - url: https://api.langdock.com
    description: Production
security:
  - bearerAuth: []
paths:
  /knowledge/{folderId}:
    post:
      summary: Upload a file to a knowledge folder
      parameters:
        - name: folderId
          in: path
          required: true
          description: The ID of the knowledge folder
          schema:
            type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The file to upload
                url:
                  type: string
                  description: The associated URL
      responses:
        '200':
          description: File uploaded successfully
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: API key as Bearer token. Format "Bearer YOUR_API_KEY"

````