# API, MCP und Agenten

Entwicklerdokumentation

Ein Agent kann eine Entscheidung einreichen, eine Rückfrage erhalten und anschließend eine begründete Empfehlung bekommen. Kein Konto und kein Anbieterschlüssel erforderlich.

REST v1.1.0 MCP · Streamable HTTP [Markdown ↗](https://dilem.si/de/docs/index.md)

## [MCP ↗](https://dilem.si/de/docs/#connect)

Für Assistenten und MCP-Clients. Server konfigurieren, dann Werkzeuge entdecken.

## [REST API ↗](https://dilem.si/de/docs/#quickstart)

Für deine App oder dein Skript. HTTP, Bearer-Authentifizierung und JSON-Antworten.

## [WebMCP ↗](https://dilem.si/de/docs/#browser)

Für Agenten in der geöffneten Seite. Nutzt Browseridentität und Verlauf.

## MCP-Verbindung

MCP-Adresse

```
https://dilem.si/api/v1/mcp
```

Entfernter HTTP-Transport ohne OAuth. Der Anwendungstoken wird an Werkzeuge übergeben, nicht in der Serverkonfiguration gespeichert. Für einen Entscheidungsaufruf 110 Sekunden vorsehen.

Wähle deinen Client. Ergänze die vorhandene Konfiguration mit dem Beispiel, ohne sie zu ersetzen. Lade die MCP-Werkzeuge neu und prüfe, ob start_session, get_usage und decide verfügbar sind.

**Claude Code**

Terminal · Bash

```
claude mcp add --transport http dilem https://dilem.si/api/v1/mcp
```

[Client-Dokumentation ↗](https://code.claude.com/docs/en/mcp)

**Codex**

Konfigurationsdatei

```
~/.codex/config.toml
```

Konfiguration · TOML

```
[mcp_servers.dilem]
url = "https://dilem.si/api/v1/mcp"
tool_timeout_sec = 110
```

[Client-Dokumentation ↗](https://developers.openai.com/codex/mcp/)

**Cursor**

Konfigurationsdatei

```
.cursor/mcp.json
```

Konfiguration · JSON

```
{
  "mcpServers": {
    "dilem": {
      "url": "https://dilem.si/api/v1/mcp"
    }
  }
}
```

[Client-Dokumentation ↗](https://cursor.com/docs/mcp)

**OpenCode**

Konfigurationsdatei

```
opencode.json
```

Konfiguration · JSON

```
{
  "mcp": {
    "dilem": {
      "type": "remote",
      "url": "https://dilem.si/api/v1/mcp",
      "enabled": true,
      "oauth": false
    }
  }
}
```

[Client-Dokumentation ↗](https://opencode.ai/docs/mcp-servers/)

**Hermes Agent**

Terminal · Bash

```
hermes mcp add dilem --url https://dilem.si/api/v1/mcp
```

[Client-Dokumentation ↗](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp)

**Mistral Vibe**

Konfigurationsdatei

```
~/.vibe/config.toml
```

Konfiguration · TOML

```
[[mcp_servers]]
name = "dilem"
transport = "streamable-http"
url = "https://dilem.si/api/v1/mcp"
tool_timeout_sec = 110

[mcp_servers.auth]
type = "static"
headers = {}
```

[Client-Dokumentation ↗](https://docs.mistral.ai/vibe/code/cli/mcp-servers)

**OpenClaw**

Konfigurationsdatei

```
~/.openclaw/openclaw.json
```

Konfiguration · JSON

```
{
  "mcp": {
    "servers": {
      "dilem": {
        "url": "https://dilem.si/api/v1/mcp",
        "transport": "streamable-http",
        "enabled": true,
        "connectionTimeoutMs": 10000,
        "requestTimeoutMs": 110000
      }
    }
  }
}
```

[Client-Dokumentation ↗](https://docs.openclaw.ai/tools/mcp)

**Pi**

Konfigurationsdatei

```
~/.pi/agent/mcp.json
```

Konfiguration · JSON

```
{
  "mcpServers": {
    "dilem": {
      "url": "https://dilem.si/api/v1/mcp",
      "timeout": 110
    }
  }
}
```

[Client-Dokumentation ↗](https://pi.dev/docs/latest/mcp)

## MCP-Referenz

### [start_session](https://dilem.si/de/docs/#tool-start_session)

Schreiben

Private Clientidentität erstellen oder verlängern.

- `session` `string | null` optional · Standard null

Antwort: `Session`

**POST `/api/v1/session`**

#### Eingabe

##### Header

- `Authorization` `string`

Sitzungstoken im Format Bearer <session>.

Kein Anfrageinhalt erforderlich.

#### Antwort

##### 200 `application/json`

Illustratives Beispiel · JSON

```
{
  "session": "OPAQUE_SESSION_KEEP_PRIVATE",
  "expires_in": 7776000
}
```

- `session` `string` · erforderlich

Privates Client-Token für nachfolgende Aufrufe.

- `expires_in` `integer` · erforderlich

Gültigkeitsdauer der Sitzung in Sekunden.

Wert: `7776000`

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

### [get_usage](https://dilem.si/de/docs/#tool-get_usage)

Lesen

Guthaben, Erneuerung und optionalen Fallstatus lesen.

- `session` `string` erforderlich
- `case_id` `string | null` optional · Standard null

Antwort: `Usage`

**GET `/api/v1/usage`**

#### Eingabe

##### Header

- `Authorization` `string` · erforderlich

Sitzungstoken im Format Bearer <session>.

- `X-Dilem-Case-ID` `string`

Diese Kennung für alle Schritte desselben Dilemmas beibehalten.

**Technisches Format**

`^[a-zA-Z0-9_-]{1,80}$`

Kein Anfrageinhalt erforderlich.

#### Antwort

##### 200 `application/json`

Illustratives Beispiel · JSON

```
{
  "day": "2026-01-01",
  "resets_at": "2026-01-02T00:00:00Z",
  "collective": {
    "completed": 42
  },
  "dilemmas": {
    "used": 1,
    "limit": 20,
    "remaining": 19
  },
  "case": {
    "id": "my-unique-dilemma-id",
    "admitted": true,
    "completed": false
  },
  "voice": {
    "seconds_used": 0,
    "seconds_reserved": 0,
    "seconds_remaining": 1200,
    "seconds_limit": 1200,
    "max_seconds": 60
  },
  "budget": {
    "daily_usd": 5,
    "available": true
  }
}
```

- `day` `string` · erforderlich

UTC-Tag der Zähler.

Datum im ISO-8601-Format

- `resets_at` `string` · erforderlich

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

- `collective` `object` · erforderlich

Gemeinsamer Zähler abgeschlossener Dilemmas.

**Felder**

- `completed` `integer` · erforderlich

Anzahl abgeschlossener Dilemmas im gemeinsamen Zähler.

- `dilemmas` `object` · erforderlich

Verbrauchtes, verbleibendes und erlaubtes Dilemma-Guthaben.

**Felder**

- `used` `integer` · erforderlich

Bereits verbrauchtes Guthaben.

Minimum: 0

- `limit` `integer` · erforderlich

Guthabenlimit der aktiven Richtlinie.

Minimum: 0

- `remaining` `integer` · erforderlich

Noch verfügbares Guthaben.

Minimum: 0

- `case` `object` · erforderlich

Status des durch die Case-ID bezeichneten Dilemmas.

**Felder**

- `id` `string | null` · erforderlich

Angeforderte Case-ID oder null ohne Kennung.

- `admitted` `boolean` · erforderlich

Ob dieses Dilemma bereits im Kontingent zugelassen wurde.

- `completed` `boolean` · erforderlich

Ob eine erste Empfehlung dieses Dilemma abgeschlossen hat.

- `voice` `object` · erforderlich

Diktierdauer und Grenzen in Sekunden.

**Felder**

- `seconds_used` `number`

Bereits verbrauchte Diktiersekunden.

- `seconds_reserved` `number`

Durch eine laufende Aufnahme vorübergehend reservierte Sekunden.

- `seconds_remaining` `number`

Noch verfügbare Diktiersekunden.

- `seconds_limit` `number`

Gesamtes Diktierlimit in Sekunden.

- `max_seconds` `number`

Maximale Aufnahmedauer in Sekunden.

- `budget` `object` · erforderlich

Gemeinsames Finanzbudget und Verfügbarkeit des Dienstes.

**Felder**

- `daily_usd` `number` · erforderlich

Tägliches Finanzlimit des Dienstes in US-Dollar.

- `available` `boolean` · erforderlich

Ob das Budget weitere Berechnungen zulässt.

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

### [decide](https://dilem.si/de/docs/#tool-decide)

KI-Berechnung

Entscheidungsschritt senden: Frage, Empfehlung oder Fehler.

- `session` `string` erforderlich
- `case_id` `string` erforderlich
- `text` `string` erforderlich
- `language` `"fr" | "en" | "it" | "de" | "es" | "pt"` optional · Standard "fr"
- `refinements` `string[] | null` optional · Standard null
- `force_decision` `boolean` optional · Standard false
- `clarification_count` `integer` optional · Standard 0
- `clarification_version` `2` optional · Standard 2

Antwort: `DecisionResponse`

**POST `/api/v1/decide`**

#### Eingabe

##### Header

- `Authorization` `string` · erforderlich

Sitzungstoken im Format Bearer <session>.

- `X-Dilem-Case-ID` `string` · erforderlich

Diese Kennung für alle Schritte desselben Dilemmas beibehalten.

**Technisches Format**

`^[a-zA-Z0-9_-]{1,80}$`

##### Anfrageinhalt `application/json`

REST · Anfrage · Illustratives Beispiel · JSON

```
{
  "text": "Train or bus for my commute?",
  "language": "en",
  "refinements": [],
  "clarification_version": 2
}
```

- `text` `string` · erforderlich

Ursprüngliche Wahl bei jedem Aufruf beibehalten.

1–6 000 Zeichen

- `language` `string` · erforderlich

Sprache der Oberfläche. Antworten folgen den Worten des Nutzers.

Mögliche Werte: `"fr"`, `"en"`, `"it"`, `"de"`, `"es"`, `"pt"`

- `refinements` `string[]`

Echte Fragen und Antworten in zeitlicher Reihenfolge.

Höchstens 40 Einträge · Höchstens 6 000 Zeichen pro Eintrag · Standard: `[]`

- `force_decision` `boolean`

Nur wenn der Nutzer eine Empfehlung ohne weitere Fragen verlangt.

Standard: `false`

- `clarification_count` `integer`

Anzahl beantworteter Rückfragen.

0–20 · Standard: `0`

- `clarification_version` `integer`

Vertragsversion, immer 2.

Standard: `2` · Wert: `2`

MCP · decide · Anfrage · JSON

```
{
  "session": "<session from start_session>",
  "case_id": "my-unique-dilemma-id",
  "text": "Train or car for a weekend trip?",
  "language": "en"
}
```

#### Antwort

##### 200 `application/json`

**Rückfrage `Clarification`**

Eine Frage oder ein Hinweis gemäß purpose. insufficient_evidence bedeutet, dass eine begründete Rangfolge nicht möglich ist; ohne neue Angaben des Nutzers nicht erneut aufrufen.

Illustratives Beispiel · JSON

```
{
  "type": "clarification",
  "question": "How far is your commute?",
  "choices": [],
  "format": "number",
  "unit": "km",
  "summary": "Train or bus"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"clarification"`

- `question` `string` · erforderlich

Rückfrage an den Nutzer vor dem Fortfahren.

- `choices` `string[]` · erforderlich

Vorgeschlagene Antworten, falls vorhanden.

Höchstens 6 Einträge

- `format` `string` · erforderlich

Von der Frage erwartetes Antwortformat.

Mögliche Werte: `"single"`, `"multiple"`, `"text"`, `"number"`

- `unit` `string | null`

Einheit einer numerischen Antwort oder null.

- `summary` `string` · erforderlich

Zusammenfassung des Dilemmas.

- `purpose` `string`

Zweck der Frage oder des Umfangshinweises.

Mögliche Werte: `"decision_scope"`, `"scope_notice"`, `"insufficient_evidence"`

- `metrics` `object`

Technische Messwerte der Verarbeitung.

**Empfehlung `Result`**

Empfehlung, Optionen, Gründe und Quellen. Gewichte sind relative Präferenzen, keine Erfolgswahrscheinlichkeiten. result_id kann fehlen.

Illustratives Beispiel · JSON

```
{
  "type": "result",
  "summary": "Train or bus for my commute?",
  "options": [
    {
      "id": "train",
      "label": "Take the train",
      "description": "Use the direct rail connection.",
      "probability": 0.7
    },
    {
      "id": "bus",
      "label": "Take the bus",
      "description": "Use the bus stop near home.",
      "probability": 0.3
    }
  ],
  "selected": "train",
  "sources": [],
  "result_id": "0123456789abcdef0123456789abcdef"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"result"`

- `summary` `string` · erforderlich

Zusammenfassung des Dilemmas.

- `context` `string`

Für die Empfehlung berücksichtigter Kontext.

- `assumptions` `string[]`

Annahmen für den Vergleich der Optionen.

- `criteria` `string[]`

Kriterien für den Vergleich der Optionen.

- `options` `object[]` · erforderlich

Verglichene Optionen mit zugehörigen Angaben.

2–8 Einträge

- `selected` `string` · erforderlich

Kennung der empfohlenen Option.

- `sources` `object[]` · erforderlich

Mit der Empfehlung zurückgegebene Quellen.

- `caution` `string | null`

Besonderer Hinweis oder null.

- `timings` `object`

Dauer der Verarbeitungsschritte.

- `models` `object`

Modellinformationen für diesen Schritt.

- `metrics` `object`

Technische Messwerte der Verarbeitung.

- `result_id` `string`

Kennung eines diesem Client gehörenden Ergebnisses.

**Fehler `Error`**

Ablehnung oder Pipelinefehler. type auch bei HTTP 200 prüfen; MCP meldet zusätzlich isError.

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

### [export_result_card](https://dilem.si/de/docs/#tool-export_result_card)

Lesen

Karte aus dem erhaltenen Ergebnis erstellen, ohne KI oder Bildspeicherung.

- `session` `string` erforderlich
- `result` `CardResult` erforderlich
- `language` `"fr" | "en" | "it" | "de" | "es" | "pt"` optional · Standard "fr"
- `theme` `"light" | "dark"` optional · Standard "light"

Antwort: `image/png`

**POST `/api/v1/result-card`**

#### Eingabe

##### Header

- `Authorization` `string` · erforderlich

Sitzungstoken im Format Bearer <session>.

##### Anfrageinhalt `application/json`

REST · Anfrage · Illustratives Beispiel · JSON

```
{
  "result": {
    "summary": "Train or bus for my commute?",
    "selected": "train",
    "options": [
      {
        "id": "train",
        "label": "Take the train",
        "description": "Use the direct rail connection.",
        "probability": 0.7
      },
      {
        "id": "bus",
        "label": "Take the bus",
        "description": "Use the bus stop near home.",
        "probability": 0.3
      }
    ]
  },
  "language": "en",
  "theme": "light"
}
```

- `result` `CardResult` · erforderlich

Bereits erhaltenes Ergebnis für die PNG-Erstellung.

**Felder**

- `summary` `string` · erforderlich

Zusammenfassung des Dilemmas.

1–6 000 Zeichen

- `selected` `string` · erforderlich

Kennung der empfohlenen Option.

Höchstens 32 Zeichen

- `options` `CardOption[]` · erforderlich

Verglichene Optionen mit zugehörigen Angaben.

2–8 Einträge

**Felder**

- `id` `string` · erforderlich

Eindeutige Kennung dieser Option im Ergebnis.

**Technisches Format**

`^[a-z][a-z0-9_]{0,31}$`

- `label` `string` · erforderlich

Bezeichnung der Option auf der Karte.

1–120 Zeichen

- `description` `string`

Kurze Beschreibung zur Option.

Höchstens 240 Zeichen · Standard: `""`

- `probability` `number` · erforderlich

Präferenzgewicht, keine Erfolgswahrscheinlichkeit.

0–1

- `language` `string`

Anzeigesprache.

Mögliche Werte: `"fr"`, `"en"`, `"it"`, `"de"`, `"es"`, `"pt"` · Standard: `"fr"`

- `theme` `string`

Darstellungsthema der PNG-Karte.

Mögliche Werte: `"light"`, `"dark"` · Standard: `"light"`

#### Antwort

##### 200 `image/png`

Privater PNG-Anhang. Der Dateiname steht in Content-Disposition.

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

### [get_result_feedback](https://dilem.si/de/docs/#tool-get_result_feedback)

Lesen

Bewertung des ursprünglichen Clients lesen.

- `session` `string` erforderlich
- `result_id` `string` erforderlich

Antwort: `Feedback`

**GET `/api/v1/feedback/{result_id}`**

#### Eingabe

##### Header

- `Authorization` `string` · erforderlich

Sitzungstoken im Format Bearer <session>.

##### Pfadparameter

- `result_id` `string` · erforderlich

Kennung eines diesem Client gehörenden Ergebnisses.

**Technisches Format**

`^[0-9a-f]{32}$`

Kein Anfrageinhalt erforderlich.

#### Antwort

##### 200 `application/json`

Illustratives Beispiel · JSON

```
{
  "result_id": "0123456789abcdef0123456789abcdef",
  "helpful": false,
  "reason": "missing_constraint"
}
```

- `result_id` `string` · erforderlich

Kennung eines diesem Client gehörenden Ergebnisses.

**Technisches Format**

`^[0-9a-f]{32}$`

- `helpful` `boolean | null` · erforderlich

Gespeicherte Bewertung oder null ohne Bewertung.

- `reason` `null | string` · erforderlich

Grund einer negativen Bewertung oder null.

Mögliche Werte: `null`, `"misunderstood"`, `"missing_constraint"`, `"too_many_questions"`, `"too_vague"`

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 · 404 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

### [set_result_feedback](https://dilem.si/de/docs/#tool-set_result_feedback)

Schreiben

Ausdrückliche Nutzerbewertung speichern, Zufriedenheit nicht ableiten.

- `session` `string` erforderlich
- `result_id` `string` erforderlich
- `helpful` `boolean` erforderlich
- `reason` `"misunderstood" | "missing_constraint" | "too_many_questions" | "too_vague" | null` optional · Standard null

Antwort: `Feedback`

**POST `/api/v1/feedback`**

#### Eingabe

##### Header

- `Authorization` `string` · erforderlich

Sitzungstoken im Format Bearer <session>.

##### Anfrageinhalt `application/json`

REST · Anfrage · Illustratives Beispiel · JSON

```
{
  "result_id": "0123456789abcdef0123456789abcdef",
  "helpful": false,
  "reason": "missing_constraint"
}
```

- `result_id` `string` · erforderlich

Kennung eines diesem Client gehörenden Ergebnisses.

**Technisches Format**

`^[0-9a-f]{32}$`

- `helpful` `boolean` · erforderlich

Ausdrückliche Bewertung der Antwort durch den Nutzer.

- `reason` `null | string`

Grund einer negativen Bewertung oder null.

Mögliche Werte: `null`, `"misunderstood"`, `"missing_constraint"`, `"too_many_questions"`, `"too_vague"`

#### Antwort

##### 200 `application/json`

Illustratives Beispiel · JSON

```
{
  "result_id": "0123456789abcdef0123456789abcdef",
  "helpful": false,
  "reason": "missing_constraint"
}
```

- `result_id` `string` · erforderlich

Kennung eines diesem Client gehörenden Ergebnisses.

**Technisches Format**

`^[0-9a-f]{32}$`

- `helpful` `boolean | null` · erforderlich

Gespeicherte Bewertung oder null ohne Bewertung.

- `reason` `null | string` · erforderlich

Grund einer negativen Bewertung oder null.

Mögliche Werte: `null`, `"misunderstood"`, `"missing_constraint"`, `"too_many_questions"`, `"too_vague"`

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 · 404 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

### [send_user_feedback](https://dilem.si/de/docs/#tool-send_user_feedback)

Schreiben

Ausdrücklich erlaubte Nachricht oder Meldung senden.

- `session` `string` erforderlich
- `request_id` `string` erforderlich
- `message` `string` erforderlich
- `language` `"fr" | "en" | "it" | "de" | "es" | "pt"` optional · Standard "fr"
- `kind` `"general" | "response"` optional · Standard "general"
- `email` `string` optional · Standard ""
- `response` `object | null` optional · Standard null

Antwort: `FeedbackAck`

**POST `/api/v1/user-feedback`**

#### Eingabe

##### Header

- `Authorization` `string` · erforderlich

Sitzungstoken im Format Bearer <session>.

##### Anfrageinhalt `application/json`

REST · Anfrage · Illustratives Beispiel · JSON

```
{
  "request_id": "0123456789abcdef0123456789abcdef",
  "kind": "general",
  "message": "Please explain how the recommendation uses my constraints.",
  "email": "",
  "language": "en",
  "source": "agent",
  "version": "unknown",
  "screen": "other",
  "response": null
}
```

- `request_id` `string` · erforderlich

Kennung zur Deduplizierung derselben Übermittlung.

**Technisches Format**

`^[0-9a-f]{32}$`

- `kind` `string` · erforderlich

Allgemeine Nachricht oder Meldung zu einer Antwort.

Mögliche Werte: `"general"`, `"response"`

- `message` `string` · erforderlich

Vom Nutzer ausdrücklich übermittelter Kommentar.

5–4 000 Zeichen

- `email` `string` · erforderlich

Kontaktadresse oder leere Zeichenfolge.

Höchstens 254 Zeichen

- `language` `string` · erforderlich

Anzeigesprache.

Mögliche Werte: `"fr"`, `"en"`, `"it"`, `"de"`, `"es"`, `"pt"`

- `source` `string` · erforderlich

Einstiegspunkt der Nachricht.

Mögliche Werte: `"agent"`, `"menu"`, `"help"`, `"response"`

- `version` `string` · erforderlich

SHA der Anwendung oder unknown.

**Technisches Format**

`^[0-9a-f]{40}$|^unknown$`

- `screen` `string` · erforderlich

Ansicht, aus der die Nachricht gesendet wird.

Mögliche Werte: `"home"`, `"clarification"`, `"result"`, `"other"`

- `response` `null | ReportedResponse` · erforderlich

Der Meldung beigefügte exakte Antwort, sonst null.

**Felder**

**`null`**

`null`

**Beigefügte Antwort `ReportedResponse`**

- `kind` `string` · erforderlich

Art der einer Meldung beigefügten Antwort.

Mögliche Werte: `"clarification"`, `"recommendation"`

- `text` `string` · erforderlich

Exakter Text der beigefügten Antwort.

1–12 000 Zeichen

- `reference` `string` · erforderlich

Referenz der betreffenden Antwort.

**Technisches Format**

`^[A-Za-z0-9._:-]{1,80}$`

#### Antwort

##### 200 `application/json`

Illustratives Beispiel · JSON

```
{
  "ok": true
}
```

- `ok` `boolean` · erforderlich

Bestätigt die Speicherung der Nachricht.

Wert: `true`

**Fehler und Wiederaufnahme**

403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 `application/json`

Illustratives Beispiel · JSON

```
{
  "type": "error",
  "code": "case_completed"
}
```

- `type` `string` · erforderlich

Art der zurückgegebenen Antwort.

Wert: `"error"`

- `code` `string` · erforderlich

Code zur Behandlung einer Ablehnung oder eines Fehlers.

- `message` `string`

Verständliche Erklärung der Ablehnung oder des Fehlers.

- `retryable` `boolean`

Ob ein weiterer Versuch in Betracht kommt.

- `resets_at` `string`

Datum und Uhrzeit der nächsten Guthabenerneuerung.

Datum und Uhrzeit im ISO-8601-Format

## Schnellstart

Benötigt curl und Python 3. Erstelle die Identität einmal, speichere den Token privat und verwende ihn bei späteren Besuchen erneut.

Erstelle eine Sitzung und speichere den Wert session. Sende ihn bei weiteren Aufrufen als Authorization: Bearer *** Er gilt 90 Tage; erneuere ihn mit demselben Aufruf und Token.

POST /api/v1/session · Bash

```
DILEM_SESSION=$(curl --fail-with-body --silent --show-error --max-time 15 \
  https://dilem.si/api/v1/session \
  -H 'Content-Type: application/json' -d '{}' | \
  python3 -c 'import json, sys; print(json.load(sys.stdin)["session"])')
```

GET /api/v1/usage · Bash

```
curl --fail-with-body --max-time 15 https://dilem.si/api/v1/usage \
  -H "Authorization: Bearer ${DILEM_SESSION:?}" \
  -H 'X-Dilem-Case-ID: my-unique-dilemma-id'
```

Wähle eine Case-ID für dein Dilemma und behalte sie im Gespräch bei. Du erhältst eine Frage oder eine Empfehlung. Hänge zum Antworten Frage und Antwort an refinements an und erhöhe clarification_count um 1.

POST /api/v1/decide · Bash

```
curl --fail-with-body --max-time 110 --output result.json https://dilem.si/api/v1/decide \
  -H "Authorization: Bearer ${DILEM_SESSION:?}" \
  -H 'X-Dilem-Case-ID: my-unique-dilemma-id' \
  -H 'Content-Type: application/json' \
  -d '{"text":"Train or car for a weekend trip?","language":"en","refinements":[],"clarification_count":0,"clarification_version":2}'
```

## Sitzung und Authentifizierung

Ohne Token erstellt start_session eine Identität. Mit session wird dieselbe Identität um 90 Tage verlängert. Ungültige oder abgelaufene Token werden abgelehnt, nie still ersetzt. REST und MCP teilen den Token; Browser-Cookies werden nicht gelesen.

Eine eindeutige Case-ID pro Dilemma bis zum Ergebnis: 1 bis 80 Zeichen aus a-z, A-Z, 0-9, _ und -. Sie identifiziert den Fall, macht Berechnungen aber nicht idempotent.

## Ablauf eines Dilemmas

1. Ursprüngliche Wahl mit einer neuen Case-ID senden.
2. Bei clarification zuerst purpose prüfen: insufficient_evidence ist ein Hinweis, keine Frage und keine Aufforderung zu einer erfundenen Rangfolge. Sonst die Frage stellen und die echte Antwort abwarten; Frage + Antwort an refinements anhängen und clarification_count erhöhen.
3. Bei result das JSON aufbewahren: Der Fall ist abgeschlossen. Für eine neue Berechnung eine neue Case-ID verwenden.
4. Bei error code und retryable prüfen. Berechnungen mit unklarem Ausgang nicht automatisch wiederholen.

Der Agent stellt dir die Fragen und wartet auf deine Antworten, ohne fehlende Angaben zu erfinden. Du kannst eine Empfehlung ohne weitere Fragen anfordern.

## Entscheidungsparameter

- `text` erforderlich

Ursprüngliche Wahl bei jedem Aufruf beibehalten.

`string · 1–6000`
- `language` erforderlich

Sprache der Oberfläche. Antworten folgen den Worten des Nutzers.

`fr | en | it | de | es | pt`
- `refinements` optional

Echte Fragen und Antworten in zeitlicher Reihenfolge.

`array · ≤40 × 6000`
- `clarification_count` optional

Anzahl beantworteter Rückfragen.

`integer · 0–20`
- `clarification_version` optional

Vertragsversion, immer 2.

`2`
- `force_decision` optional

Nur wenn der Nutzer eine Empfehlung ohne weitere Fragen verlangt.

`boolean`

Text + Ergänzungen: insgesamt 24 000 Zeichen. HTTP-Anfrage: 300 000 Byte in 10 Sekunden; zu große Anbieter-Payloads können vor dem Verbrauch abgelehnt werden.

## Antworten

### Rückfrage `type: clarification`

Eine Frage oder ein Hinweis gemäß purpose. insufficient_evidence bedeutet, dass eine begründete Rangfolge nicht möglich ist; ohne neue Angaben des Nutzers nicht erneut aufrufen.

`type, question, choices, format, unit, summary, purpose, metrics`

### Empfehlung `type: result`

Empfehlung, Optionen, Gründe und Quellen. Gewichte sind relative Präferenzen, keine Erfolgswahrscheinlichkeiten. result_id kann fehlen.

`type, summary, context, assumptions, criteria, options, selected, sources, caution, timings, models, metrics, result_id`

### Fehler `type: error`

Ablehnung oder Pipelinefehler. type auch bei HTTP 200 prüfen; MCP meldet zusätzlich isError.

`type, code, message, retryable, resets_at`

Illustratives Beispiel · clarification · JSON

```
{
  "type": "clarification",
  "question": "How far is your commute?",
  "choices": [],
  "format": "number",
  "unit": "km",
  "summary": "Train or bus"
}
```

## Ergebnisse und Rückmeldungen

### Ergebnis als PNG exportieren

Erhaltenes Ergebnis als result mit language und theme (light oder dark) übergeben. Privates PNG, Dateiname in Content-Disposition, Cache-Control: no-store. Kein Guthabenverbrauch und keine Veröffentlichung. MCP liefert ein natives Bild mit Dateimetadaten.

Anfrage · Illustratives Beispiel · Bash

```
python3 -c 'import json, sys; print(json.dumps({"result": json.load(sys.stdin), "language": "fr", "theme": "light"}))' < result.json > card-input.json
```

POST /api/v1/result-card · Bash

```
curl --fail-with-body --max-time 15 https://dilem.si/api/v1/result-card \
  -H "Authorization: Bearer ${DILEM_SESSION:?}" \
  -H "Content-Type: application/json" \
  --data-binary @card-input.json --output dilem.png
```

### Bewertung lesen oder speichern

result_id gehört zu dieser Identität. helpful ist boolesch; reason nur bei negativer Bewertung optional: misunderstood, missing_constraint, too_many_questions oder too_vague. Fehlende, abgelaufene und fremde Ergebnisse liefern denselben 404.

`GET /api/v1/feedback/{result_id}`

Anfrage · Illustratives Beispiel · JSON

```
{"result_id": "<result_id from your result>", "helpful": false, "reason": "missing_constraint"}
```

POST /api/v1/feedback · Bash

```
curl --fail-with-body --max-time 15 https://dilem.si/api/v1/feedback \
  -H "Authorization: Bearer ${DILEM_SESSION:?}" \
  -H "Content-Type: application/json" \
  --data-binary @feedback-input.json
```

### Nachricht senden oder Antwort melden

request_id: 32 hexadezimale Kleinbuchstaben/Ziffern. message: mindestens 5 Nicht-Leerzeichen, höchstens 4 000 Zeichen. kind=general für Nachrichten; kind=response für Meldungen mit exakter Antwort. E-Mail optional. ID und Inhalt beibehalten; nach unklarem Fehler nicht automatisch wiederholen.

Anfrage · Illustratives Beispiel · JSON

```
{
  "request_id": "<32 lowercase hex characters>",
  "kind": "general",
  "message": "<user-authorized message>",
  "email": "",
  "language": "fr",
  "source": "agent",
  "version": "unknown",
  "screen": "other",
  "response": null
}
```

POST /api/v1/user-feedback · Bash

```
curl --fail-with-body --max-time 15 https://dilem.si/api/v1/user-feedback \
  -H "Authorization: Bearer ${DILEM_SESSION:?}" \
  -H "Content-Type: application/json" \
  --data-binary @user-feedback-input.json
```

## Guthaben

Ein Guthaben deckt ein Dilemma bis zur ersten Empfehlung ab, einschließlich Rückfragen. Jede weitere Berechnung nach dieser Empfehlung verbraucht ein neues Guthaben.

Mit get_usage über MCP oder GET /api/v1/usage über REST siehst du dein verbleibendes Guthaben und den Zeitpunkt der Erneuerung.

Grenzen stammen aus der aktiven Richtlinie, nicht aus festen Werten in diesem Leitfaden. PNG und Feedback verbrauchen kein Dilemma-Guthaben, behalten aber technische und Missbrauchsgrenzen.

## Fehler und Wiederaufnahme

[`HTTP 403`](https://dilem.si/openapi.json)[`HTTP 408`](https://dilem.si/openapi.json)[`HTTP 409`](https://dilem.si/openapi.json)[`HTTP 413`](https://dilem.si/openapi.json)[`HTTP 422`](https://dilem.si/openapi.json)[`HTTP 429`](https://dilem.si/openapi.json)[`HTTP 503`](https://dilem.si/openapi.json)

403: fehlende, ungültige oder abgelaufene Sitzung, abgelehnte Herkunft oder unzulässige Cookies. 408/413/422: Zeitlimit, Größe oder ungültige Eingabe. 409: abgeschlossener Fall. 429: Kontingent, Budget oder Kapazität. 503: Dienst nicht verfügbar. Auch type prüfen: Fehler können nach Zulassung auftreten. Nach einem mehrdeutigen Fehler keine Berechnung automatisch wiederholen; die Case-ID ist kein Idempotenzschlüssel.

Eine Trennung kann bereits verbrauchte Arbeit hinterlassen. Verbrauchsdaten stellen eine verlorene Antwort nicht wieder her.

## Agenten im Browser

In einem kompatiblen Browser kann dein Agent über WebMCP die offene Seite mit deinem Verlauf und Guthaben nutzen. Andernfalls verwende MCP oder die API. Der Fernzugriff nimmt Text entgegen; Diktieren bleibt in der App verfügbar.

Zuerst get_dilemma lesen. submit_dilemma sendet eine Wahl oder Antwort; recommend_dilemma fordert eine Empfehlung ohne weitere Frage an. Aktionen nutzen den sichtbaren Fall, nicht den entfernten Token.

WebMCP ergänzt lokalen Bildexport mit Vorschau, Bewertungen und Meldungen sowie list_saved_dilemmas und get_saved_dilemma für diesen Browserverlauf. Die Bild-URL verfällt beim Schließen der Vorschau. Verlauf und Browser-Cookies werden nicht mit MCP remote geteilt.

## Technische Referenz

OpenAPI-Schemata beschreiben vollständige Anfragen und Antworten. Der Markdown-Leitfaden dient Agenten als Einstieg; Katalog und Server Card ermöglichen MCP-Erkennung.

[OpenAPI 3.1](https://dilem.si/openapi.json)[AI Catalog](https://dilem.si/.well-known/ai-catalog.json)[MCP Server Card](https://dilem.si/mcp-server-card.json)[Agent guide · Markdown](https://dilem.si/agents.md)[llms.txt](https://dilem.si/llms.txt)

Der Dienst speichert Textgespräche 30 Tage lang. Der Browserverlauf bleibt auf deinem Gerät und wird nicht mit einem entfernten Agenten geteilt.

[Datenschutz und Anbieter](https://dilem.si/de/privacy/)

[Kontakt · contact@dilem.si](mailto:contact@dilem.si)

[HTML](https://dilem.si/de/docs/)
