> ## 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.

# Dateien aus Wissensdatenbank abrufen

> Liste alle Dateien in einer Wissensdatenbank auf oder rufe Details für eine bestimmte Datei ab

<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>

Listet alle Dateien (Attachments) in einer bestimmten Wissensdatenbank auf. Verwende diesen Endpunkt, um zu sehen, welche Dateien verfügbar sind und ihren Verarbeitungsstatus zu prüfen.

<Info>
  Erfordert einen API-Schlüssel mit dem `KNOWLEDGE_FOLDER_API` Scope. Die Wissensdatenbank muss mit dem API-Schlüssel geteilt sein. Siehe [Wissensdatenbank mit der API teilen](/de/developer/knowledge-folder-api/sharing) für die Einrichtung.
</Info>

## Anforderungsformat

### Pfadparameter

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

## Beispiele

### Dateien mit cURL auflisten

```bash theme={null}
curl -X GET "https://api.langdock.com/knowledge/{folderId}/list" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Dateien mit JavaScript auflisten

```javascript theme={null}
const axios = require("axios");

async function listFiles(folderId) {
  const response = await axios.get(
    `https://api.langdock.com/knowledge/${folderId}/list`,
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
      },
    }
  );

  return response.data;
}

// Beispiel
const files = await listFiles("folder_abc123");
console.log(`${files.result.length} Dateien gefunden`);

files.result.forEach((file) => {
  console.log(`- ${file.name} (${file.syncStatus})`);
});
```

### Verarbeitungsstatus prüfen

```javascript theme={null}
async function waitForProcessing(folderId, attachmentId, maxAttempts = 30) {
  for (let i = 0; i < maxAttempts; i++) {
    const files = await listFiles(folderId);
    const file = files.result.find((f) => f.id === attachmentId);

    if (!file) {
      throw new Error("Datei nicht gefunden");
    }

    if (file.syncStatus === "SYNCED") {
      console.log("Dateiverarbeitung abgeschlossen!");
      return file;
    }

    if (
      file.syncStatus === "ACTION_FAILED" ||
      file.syncStatus === "EXTRACTION_FAILED" ||
      file.syncStatus === "EMBEDDING_FAILED" ||
      file.syncStatus === "TIMEOUT"
    ) {
      throw new Error(`Verarbeitung fehlgeschlagen: ${file.syncStatus}`);
    }

    console.log(`Verarbeitung... (${file.syncStatus})`);
    await new Promise((resolve) => setTimeout(resolve, 2000));
  }

  throw new Error("Zeitlimit für Verarbeitung überschritten");
}
```

## Antwortformat

### Erfolgreiche Antwort (200 OK)

```typescript theme={null}
{
  status: "success";
  result: Array<{
    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 beim Upload angegeben
    path: string | null;     // Speicherpfad
    syncStatus: string;      // Verarbeitungsstatus (siehe unten)
    pageCount: number | null; // Seitenanzahl (bei PDFs)
    summary: string | null;  // Automatisch generierte Zusammenfassung
    externalId: string | null; // Externe Referenz-ID
    syncParams: object | null; // Synchronisierungskonfiguration aus der Quellintegration
  }>;
}
```

### Verarbeitungsstatus-Werte

| Status              | Beschreibung                                 |
| ------------------- | -------------------------------------------- |
| `UPLOADING`         | Datei wird hochgeladen                       |
| `UPLOADED`          | Datei 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`     | Verarbeitungsaktion fehlgeschlagen           |
| `EXTRACTION_FAILED` | Textextraktion fehlgeschlagen                |
| `EMBEDDING_FAILED`  | Embedding-Generierung fehlgeschlagen         |
| `TIMEOUT`           | Verarbeitung hat das Zeitlimit überschritten |

### 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:35:00.000Z",
      "url": "https://example.com/reports/q4",
      "path": "/attachments/abc123/quartalsbericht.pdf",
      "syncStatus": "SYNCED",
      "pageCount": 15,
      "summary": "Dieser Quartalsbericht behandelt die Q4 2024 Finanzergebnisse...",
      "externalId": null,
      "syncParams": null
    },
    {
      "id": "att_new456abc",
      "name": "meeting-notizen.txt",
      "mimeType": "text/plain",
      "createdAt": "2025-01-16T14:00:00.000Z",
      "updatedAt": "2025-01-16T14:00:00.000Z",
      "url": null,
      "path": "/attachments/new456/meeting-notizen.txt",
      "syncStatus": "EXTRACTING",
      "pageCount": null,
      "summary": null,
      "externalId": null,
      "syncParams": null
    }
  ]
}
```

## Einzelne Datei abrufen

Um Details für eine bestimmte Datei abzurufen, verwende den `GET /knowledge/{folderId}/{attachmentId}` Endpunkt:

```bash theme={null}
curl -X GET "https://api.langdock.com/knowledge/{folderId}/{attachmentId}" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Dieser gibt die gleichen Felder wie oben für ein einzelnes Attachment zurück, plus eine Fehlermeldung, falls die Verarbeitung fehlgeschlagen ist:

```json theme={null}
{
  "status": "error",
  "message": "Dateiverarbeitung fehlgeschlagen. Bitte versuche es erneut oder kontaktiere den Support.",
  "result": {
    "id": "att_failed123",
    "name": "beschaedigte-datei.pdf",
    "syncStatus": "EXTRACTION_FAILED",
    "syncMessage": "Unable to extract text from PDF"
  }
}
```

## Fehlerbehandlung

```typescript theme={null}
try {
  const response = await listFiles(folderId);
} 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 429:
        console.error("Rate Limit überschritten");
        break;
      case 500:
        console.error("Server-Fehler");
        break;
    }
  }
}
```

<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 get /knowledge/{folderId}/list
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}/list:
    get:
      summary: Retrieve files from a knowledge folder
      parameters:
        - name: folderId
          in: path
          required: true
          description: The ID of the knowledge folder
          schema:
            type: string
      responses:
        '200':
          description: List of files retrieved successfully
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: API key as Bearer token. Format "Bearer YOUR_API_KEY"

````