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

# Erste Schritte

> Authentifizierung, erster Request, Fehlercodes

Mit der Partner-API nutzt du Delicious AI als Chat-Backend für ein eigenes Frontend. Tools, Prompts und Datenzugriff laufen auf unserer Seite. Du bekommst die Antwort als Stream.

## Base URL

```text theme={null}
https://delicious-ai-app.wonderfulgrass-3eed3e5c.westeurope.azurecontainerapps.io/api/public/v1
```

Die API arbeitet auf denselben Daten wie die Delicious Data App. Der Nutzer sieht hier genau das, was er auch in der App sieht.

## Authentifizierung

Jeder Request braucht das Access Token des Nutzers als Bearer Token. Das Token identifiziert den Nutzer und sein Unternehmen.

```http theme={null}
Authorization: Bearer <token>
```

<Steps>
  <Step title="Token kopieren">
    In der [Delicious Data App](https://app.delicious-data.com) unter **Einstellungen → Benutzerkonto → API-Token** auf **Token kopieren** klicken.
  </Step>

  <Step title="Im Playground verwenden">
    Auf jeder Endpoint-Seite rechts unter **Authorization** einfügen und den Request absenden.
  </Step>
</Steps>

<Warning>
  Das Token ist das Session-Token des Nutzers. Es gilt bis zu sechs Tage und wird beim Logout aus der App ungültig. Wer das Token hat, hat die Rechte des Nutzers.
</Warning>

### Token in einer eigenen Anwendung

Eine Anwendung holt sich das Token über den Connect-Flow:

1. Die Anwendung leitet den Nutzer zu `https://app.delicious-data.com/partner/connect?ref=<Callback-URL>` weiter.
2. Der Nutzer meldet sich an (falls nötig) und bestätigt die Verbindung.
3. Die App leitet zurück zur Callback-URL, mit dem Token im URL-Fragment: `https://deine-app.example/connect#token=<token>`

Die Anwendung liest das Token aus dem Fragment, speichert es und entfernt es aus der URL. Das Fragment wird nicht an den Server übertragen.

Die Origin der Callback-URL muss bei uns registriert sein (dieselbe Liste, die CORS erlaubt). Schick uns die Origins deiner Deployments.

<Note>
  Für den Produktivbetrieb ersetzen wir diesen Flow durch OAuth 2.0 (Authorization Code mit PKCE), mit Refresh Tokens und einer eigenen Client-ID pro Partner.
</Note>

## Erster Chat

Chat anlegen, Nachricht senden. Die Antwort kommt als Stream.

```bash theme={null}
TOKEN=...
BASE=https://delicious-ai-app.wonderfulgrass-3eed3e5c.westeurope.azurecontainerapps.io/api/public/v1

CHAT=$(curl -s -X POST "$BASE/chats" -H "Authorization: Bearer $TOKEN" | jq -r .id)

curl -N -X POST "$BASE/chats/$CHAT/messages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text": "Wie haben sich die Verkäufe letzte Woche entwickelt?"}'
```

Das Stream-Format steht unter [Streaming](/partner-api/streaming_de), alle Routen unter [Endpunkte](/partner-api/endpunkte/sitzung/angemeldeter-nutzer).

## Fehler

Fehler kommen als JSON mit `code` und `message`.

| Status | `code` | Bedeutung |
| - | - | - |
| `401` | `unauthorized` | Kein Token |
| `403` | `forbidden` | Der Assistent ist für diesen Nutzer nicht freigeschaltet |
| `404` | `chat_not_found` | Chat existiert nicht oder gehört einem anderen Nutzer |
| `404` | `prompt_not_found` | Prompt ist für diesen Nutzer nicht verfügbar |
| `400` | `empty_message` | Body enthält weder `text`, `promptId` noch `messages` |
| `503` | `no_model_preset` | Für dieses Unternehmen ist kein Modell konfiguriert |

Zwei Fehler kommen aus der Auth-Schicht und haben nur eine `message`:

| Status | Antwort | Bedeutung |
| - | - | - |
| `401` | `{ "message": "Invalid API token" }` | Token abgelaufen oder widerrufen. Neues Token holen. |
| `503` | `{ "message": "Product backend unavailable" }` | Backend vorübergehend nicht erreichbar. Request wiederholen. |

## CORS

Browser-Clients brauchen eine registrierte Origin. Die Registrierung gilt gleichzeitig für den Connect-Flow.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.