# Log ergänzen

Einen Verlaufseintrag zu einem Event hinzufügen.

`POST /v1/event/{eventId}/logs`

**Authentifizierung:** Benutzer-Access-JWT mit Projektzugriff.

## Body

`type` und `message` sind erforderlich. `type` erlaubt `info`, `success`, `warning`, `error`, `manual`. Optional: `details` als Objekt, `actionId` als interne Action-ID, `userId` als String. Der Server ergänzt den Zeitpunkt.

## Antwort

HTTP `200` liefert das Event mit ergänztem Verlauf. Das Beispiel ist gekürzt.


## SDK-Nutzung

Die SDK-Beispiele stehen neben den HTTP-Requests unter **SDKs**. Installation und Einrichtung: [JavaScript / TypeScript](/sdks/javascript), [Next.js](/sdks/nextjs) und [Swift](/sdks/swift). Projekt-Slugs werden vom Client ergänzt.

Diese Operation benötigt einen Benutzer-Access-JWT mit Projektzugriff. Der API-Token allein genügt nicht. Next.js-Beispiele gehören in eine Serverumgebung; Swift-Zugänge stammen aus deiner Laufzeitkonfiguration.

## Request

```bash
curl -X POST 'https://api.tracklytic.de/v1/event/EVENT_ID/logs' \
  -H "Authorization: Bearer $TRACKLYTIC_ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "type": "info",
  "message": "Prüfung abgeschlossen",
  "details": {
    "checks": 3
  }
}'
```

```js
const response = await fetch("https://api.tracklytic.de/v1/event/EVENT_ID/logs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TRACKLYTIC_ACCESS_TOKEN}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify(
    {
      "type": "info",
      "message": "Prüfung abgeschlossen",
      "details": {
        "checks": 3
      }
    }
  )
});

if (!response.ok) throw new Error(await response.text());
const result = await response.json();
```

```python
import json
import os
from urllib.request import Request, urlopen

payload = {
  "type": "info",
  "message": "Prüfung abgeschlossen",
  "details": {
    "checks": 3
  }
}

request = Request(
    "https://api.tracklytic.de/v1/event/EVENT_ID/logs",
    method="POST",
    headers={
        "Authorization": "Bearer " + os.environ["TRACKLYTIC_ACCESS_TOKEN"],
        "Content-Type": "application/json"
    },
    data=json.dumps(payload).encode("utf-8")
)

with urlopen(request) as response:
    result = json.load(response)
```

## SDKs

### JavaScript / TypeScript

```ts
import Tracklytic from 'tracklytic';

const tracklytic = new Tracklytic({
  token: process.env.TRACKLYTIC_API_TOKEN!,
  project: "my-project",
  accessToken: process.env.TRACKLYTIC_ACCESS_TOKEN!,
});

const event = await tracklytic.events.addLog("EVENT_ID", {
  type: "info", message: "Prüfung abgeschlossen", details: { checks: 3 },
});
```

### Next.js

```ts
import { TracklyticServer } from 'tracklytic-next/server';

const tracklytic = new TracklyticServer({
  token: process.env.TRACKLYTIC_API_TOKEN!,
  project: "my-project",
  accessToken: process.env.TRACKLYTIC_ACCESS_TOKEN!,
});

const event = await tracklytic.events.addLog("EVENT_ID", {
  type: "info", message: "Prüfung abgeschlossen", details: { checks: 3 },
});
```

### Swift

```swift
import Foundation
import Tracklytic

let tracklytic = TracklyticClient(
    project: "my-project",
    token: apiToken,
    accessToken: userAccessToken
)

let event = try await tracklytic.addLog(
    eventId: "EVENT_ID",
    log: EventLog(type: .info, message: "Prüfung abgeschlossen",
                  details: ["checks": AnyCodable(3)])
)
```

## Response (200)

```json
{
  "id": "EVENT_ID",
  "logs": [
    {
      "type": "info",
      "message": "Prüfung abgeschlossen",
      "details": {
        "checks": 3
      }
    }
  ]
}
```