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

# Authentifizierung

> API-Schlüsselverwaltung, Umgebungsvariablen, Ratenlimits und Sicherheitsbest Practices.

Alle RAIL API-Anfragen werden mit API-Schlüsseln authentifiziert. Die Schlüssel sind an Ihr Konto gebunden, tragen Ihr Guthaben und erscheinen in Ihren Nutzungsprotokollen.

```mermaid theme={null}
flowchart LR
    App["Ihre Anwendung"] -->|"Authorization: Bearer rail_..."| API["RAIL API"]
    API -->|"200 + Ergebnis"| App
    API -->|"401 Ungültiger Schlüssel"| App
    API -->|"429 Ratenlimit"| App
```

## API-Schlüssel erhalten

<Steps>
  <Step title="Registrieren">
    [Erstellen Sie ein kostenloses Konto](https://responsibleailabs.ai/register) bei responsibleailabs.ai.
  </Step>

  <Step title="Öffnen Sie Ihr Dashboard">
    Gehen Sie zu Ihrem [Dashboard](https://responsibleailabs.ai/dashboard) und navigieren Sie zum Abschnitt **API-Schlüssel**.
  </Step>

  <Step title="Schlüssel generieren">
    Klicken Sie auf **Schlüssel generieren**. Die Schlüssel beginnen mit `rail_` und werden genau einmal angezeigt. Kopieren Sie Ihren sofort.

    <Warning>
      Ihr Schlüssel wird nach dem Schließen des Dialogs nicht mehr angezeigt. Bewahren Sie ihn sicher auf, bevor Sie die Seite verlassen.
    </Warning>
  </Step>
</Steps>

## Verwendung des API-Schlüssels

Übergeben Sie Ihren Schlüssel als Bearer-Token im `Authorization`-Header bei jeder Anfrage:

```
Authorization: Bearer YOUR_RAIL_API_KEY
```

Vollständiges cURL-Beispiel:

```bash theme={null}
curl -X POST https://api.responsibleailabs.ai/railscore/v1/eval \
  -H "Authorization: Bearer YOUR_RAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Ihr von KI generierter Text hier", "mode": "basic"}'
```

## SDK-Authentifizierung

Beide SDKs akzeptieren den API-Schlüssel bei der Client-Konstruktion und fügen den Header automatisch hinzu:

<CodeGroup>
  ```python Python theme={null}
  from rail_score_sdk import RailScoreClient
  import os

  # Schlüssel direkt übergeben (in Ordnung für Skripte)
  client = RailScoreClient(api_key="YOUR_RAIL_API_KEY")

  # Empfohlen: aus Umgebungsvariable lesen
  client = RailScoreClient(api_key=os.environ["RAIL_API_KEY"])
  ```

  ```typescript JavaScript theme={null}
  import { RailScoreClient } from "@responsible-ai-labs/rail-score";

  // Schlüssel direkt übergeben
  const client = new RailScoreClient({ apiKey: "YOUR_RAIL_API_KEY" });

  // Empfohlen: aus Umgebungsvariable lesen
  const client = new RailScoreClient({ apiKey: process.env.RAIL_API_KEY });
  ```
</CodeGroup>

## Umgebungsvariablen

API-Schlüssel niemals in Quellcodedateien hartkodieren. Verwenden Sie Umgebungsvariablen und halten Sie Schlüssel aus der Versionskontrolle heraus.

<Tabs>
  <Tab title="Local (dotenv)">
    ```bash theme={null}
    # .env  — zu .gitignore hinzufügen, diese Datei niemals committen
    RAIL_API_KEY=YOUR_RAIL_API_KEY
    ```

    ```python theme={null}
    from dotenv import load_dotenv
    import os

    load_dotenv()
    api_key = os.environ["RAIL_API_KEY"]
    ```
  </Tab>

  <Tab title="Vercel / Edge">
    Hinzufügen über **Vercel Dashboard > Einstellungen > Umgebungsvariablen**.

    Variablenname: `RAIL_API_KEY`

    <Warning>
      Niemals die Variable mit `NEXT_PUBLIC_` voranstellen. Das würde sie im Browser-Bundle exponieren.
    </Warning>

    ```typescript theme={null}
    // Nur serverseitig
    const apiKey = process.env.RAIL_API_KEY;
    ```
  </Tab>

  <Tab title="Docker">
    ```bash theme={null}
    # Zur Laufzeit übergeben — niemals Geheimnisse in Bildschichten einbacken
    docker run -e RAIL_API_KEY=YOUR_RAIL_API_KEY my-app

    # docker-compose.yml
    services:
      app:
        image: my-app
        environment:
          - RAIL_API_KEY=${RAIL_API_KEY}
    ```
  </Tab>
</Tabs>

## Schlüsselverwaltung

Sie können mehrere Schlüssel für verschiedene Umgebungen (Produktion, Staging, CI) erstellen. Verwalten Sie alle Schlüssel von Ihrem [Dashboard](https://responsibleailabs.ai/dashboard).

| Aktion                   | Wann zu verwenden                                                                                   |
| ------------------------ | --------------------------------------------------------------------------------------------------- |
| **Schlüssel generieren** | Neue Umgebung, Einarbeitung eines neuen Dienstes oder planmäßiges Rotieren von Anmeldeinformationen |
| **Schlüssel umbenennen** | Kontext hinzufügen wie "production-chatbot" oder "staging-ci" zur Nutzungstracking                  |
| **Schlüssel widerrufen** | Verdacht auf Leck, Mitarbeiterabgang oder Stilllegung eines Dienstes. Wirkt sofort.                 |

<Tip>
  **Null-Downtime-Rotation:** Generieren Sie einen neuen Schlüssel, implementieren Sie ihn in Ihrem Dienst und überprüfen Sie, ob er funktioniert, und widerrufen Sie dann den alten Schlüssel. Der Austausch dauert Sekunden.
</Tip>

## Ratenlimits

Ratenlimits werden pro API-Schlüssel angewendet. Das Überschreiten des Limits gibt HTTP 429 zurück.

| Plan         | Anfragen / min    | Anfragen / Tag    |
| ------------ | ----------------- | ----------------- |
| Kostenlos    | 10                | 100               |
| Pro          | 60                | 5.000             |
| Geschäftlich | 300               | 50.000            |
| Enterprise   | Benutzerdefiniert | Benutzerdefiniert |

## Sicherheitsbest Practices

<Warning>
  * **Schlüssel niemals im Client-seitigen Code exponieren.** Browser sind öffentlich. Rufen Sie die API immer von Ihrem Backend oder serverlosen Funktion auf.
  * **Schlüssel in Umgebungsvariablen speichern,** niemals hartkodiert in Quellcodedateien oder Docker-Images.
  * **Fügen Sie `.env` zu `.gitignore`** hinzu, bevor Sie den ersten Commit machen, damit Schlüssel niemals versehentlich gepusht werden.
  * **Verwenden Sie separate Schlüssel pro Umgebung.** Wenn Staging kompromittiert wird, bleibt die Produktion sicher.
  * **Sofort widerrufen, wenn exponiert.** Zuerst einen Ersatz generieren, dann widerrufen.
  * **Planmäßig rotieren.** Periodisches Regenerieren von Schlüsseln begrenzt den Schadensradius eines unentdeckten Lecks.
</Warning>

## Auth-Fehlerantworten

| Status | Fehler                                           | Behebung                                                                       |
| ------ | ------------------------------------------------ | ------------------------------------------------------------------------------ |
| `401`  | Fehlender oder fehlerhafter Authorization-Header | Fügen Sie `Authorization: Bearer …` hinzu                                      |
| `401`  | Ungültiger API-Schlüssel                         | Überprüfen Sie, ob der Schlüssel mit `rail_` beginnt und korrekt kopiert wurde |
| `403`  | API-Schlüssel widerrufen oder inaktiv            | Generieren Sie einen neuen Schlüssel im Dashboard                              |
| `429`  | Ratenlimit überschritten                         | Reduzieren Sie die Anfragefrequenz oder upgraden Sie den Plan                  |

## Was kommt als Nächstes

<CardGroup cols={2}>
  <Card title="Schnellstart" icon="rocket" href="/getting-started/quickstart">
    Machen Sie Ihre erste Bewertungsanfrage in weniger als 5 Minuten.
  </Card>

  <Card title="Guthaben & Preise" icon="coins" href="/getting-started/credits">
    Verstehen, wie Guthaben pro Anfrage berechnet werden.
  </Card>

  <Card title="API-Referenz" icon="code" href="/api-reference/overview">
    Vollständige Parameterreferenz für alle Endpunkte.
  </Card>

  <Card title="Dashboard" icon="chart-line" href="https://responsibleailabs.ai/dashboard">
    Verwalten Sie Schlüssel, sehen Sie die Nutzung und überwachen Sie das Guthaben.
  </Card>
</CardGroup>
