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

# Action erstellen

> Füge eine Action zu einer Integration hinzu, die Agenten ausführen können

<Info>
  **Nutzt du unsere API über ein Dedicated Deployment?** Ersetze einfach `api.langdock.com` mit der Basis-URL deines Deployments: **`<deployment-url>/api/public`**
</Info>

Erstellt eine neue Action für eine Integration. Actions sind Fähigkeiten, die Agenten ausführen können, wie zum Beispiel Nachrichten senden, Daten abrufen oder Datensätze in externen Systemen erstellen.

## Erforderliche Scopes

Dieser Endpoint erfordert den `INTEGRATION_API` Scope.

## Pfad-Parameter

| Parameter       | Typ    | Erforderlich | Beschreibung         |
| --------------- | ------ | ------------ | -------------------- |
| `integrationId` | string | Ja           | UUID der Integration |

## Request Body

| Parameter              | Typ     | Erforderlich | Beschreibung                                                                                |
| ---------------------- | ------- | ------------ | ------------------------------------------------------------------------------------------- |
| `name`                 | string  | Ja           | Action-Name (max. 100 Zeichen)                                                              |
| `description`          | string  | Nein         | Action-Beschreibung (max. 1.000 Zeichen)                                                    |
| `code`                 | string  | Nein         | Auszuführender JavaScript-Code (max. 40.000 Zeichen)                                        |
| `inputFields`          | array   | Nein         | Eingabefelder für die Action                                                                |
| `requiresConfirmation` | boolean | Nein         | Ob die Action vor der Ausführung eine Bestätigung durch den User erfordert (Standard: true) |

### Eingabefeld-Schema

Jedes Eingabefeld hat die folgenden Eigenschaften:

| Eigenschaft        | Typ     | Erforderlich | Beschreibung                                                                                                                                                                                  |
| ------------------ | ------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `label`            | string  | Ja           | Feld-Label (max. 100 Zeichen)                                                                                                                                                                 |
| `type`             | string  | Nein         | Feldtyp (Standard: "TEXT")                                                                                                                                                                    |
| `description`      | string  | Nein         | Feld-Beschreibung (max. 500 Zeichen)                                                                                                                                                          |
| `placeholder`      | string  | Nein         | Platzhaltertext (max. 200 Zeichen)                                                                                                                                                            |
| `required`         | boolean | Nein         | Ob das Feld erforderlich ist (Standard: false)                                                                                                                                                |
| `options`          | array   | Nein         | Optionen für SELECT-Felder                                                                                                                                                                    |
| `allowMultiSelect` | boolean | Nein         | Mehrfachauswahl für SELECT-Felder erlauben                                                                                                                                                    |
| `contextActionId`  | string  | Nein         | UUID der Action für dynamische Optionen                                                                                                                                                       |
| `jsonSchema`       | string  | Nein         | JSON Schema (als stringifiziertes JSON), das den erwarteten Wert beschreibt. Wird typischerweise mit `OBJECT`-Feldern verwendet, um die Struktur einzuschränken, die Agenten erzeugen müssen. |

### Feldtypen

| Typ               | Beschreibung                |
| ----------------- | --------------------------- |
| `TEXT`            | Einzeilige Texteingabe      |
| `MULTI_LINE_TEXT` | Mehrzeilige Texteingabe     |
| `NUMBER`          | Numerische Eingabe          |
| `BOOLEAN`         | Wahr/Falsch-Umschalter      |
| `SELECT`          | Dropdown-Auswahl            |
| `PASSWORD`        | Passwort-Eingabe (maskiert) |
| `VECTOR`          | Vektor-Eingabe              |
| `OBJECT`          | Objekt-Eingabe              |
| `FILE`            | Datei-Eingabe               |
| `ID`              | Bezeichner-Eingabe          |

## Beispiel

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

async function createAction(integrationId) {
  const response = await axios.post(
    `https://api.langdock.com/integrations/v1/${integrationId}/actions/create`,
    {
      name: "Get User Data",
      description: "Retrieves user information from the internal API by user ID",
      code: `
        const response = await fetch('https://api.example.com/users/' + inputs.userId, {
          headers: {
            'Authorization': 'Bearer ' + secrets.API_TOKEN
          }
        });

        if (!response.ok) {
          throw new Error('User not found');
        }

        return await response.json();
      `,
      inputFields: [
        {
          label: "User ID",
          type: "TEXT",
          description: "The unique identifier of the user",
          placeholder: "e.g., user_123",
          required: true
        },
        {
          label: "Include Details",
          type: "BOOLEAN",
          description: "Include extended user details",
          required: false
        },
        {
          label: "Filters",
          type: "OBJECT",
          description: "Structured filters applied to the user lookup",
          required: false,
          jsonSchema: JSON.stringify({
            type: "object",
            properties: {
              status: { type: "string", enum: ["active", "inactive"] },
              limit: { type: "integer", minimum: 1, maximum: 100 }
            },
            required: ["status"]
          })
        }
      ]
    },
    {
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
      }
    }
  );

  console.log("Created action:", response.data.action);
}

createAction("550e8400-e29b-41d4-a716-446655440000");
```

## Antwortformat

### Erfolgreiche Antwort (201 Created)

```typescript theme={null}
{
  action: {
    id: string;           // UUID der erstellten Action
    name: string;         // Action-Name
    slug: string;         // URL-freundliche Kennung (automatisch generiert)
    description: string;  // Action-Beschreibung
    code: string | null;  // JavaScript-Code
    order: number;        // Anzeigereihenfolge
    requiresConfirmation: boolean; // Ob die Action vor der Ausführung eine Bestätigung durch den User erfordert
    inputFields: Array<{
      slug: string;       // Feld-Kennung
      label: string;      // Anzeige-Label
      type: string;       // Feldtyp
      description: string;
      placeholder: string | null;
      required: boolean;
      order: number;
      options: Array<{label: string, value: string}> | null;
      allowMultiSelect: boolean | null;
      contextActionId: string | null;
      jsonSchema: string | null;
    }>;
  };
}
```

## Fehlerbehandlung

| Status Code | Beschreibung                                                      |
| ----------- | ----------------------------------------------------------------- |
| 400         | Ungültiger Request Body oder ungültige Integration-ID             |
| 401         | Ungültiger oder fehlender API-Schlüssel                           |
| 403         | Kein Zugriff auf diese Integration                                |
| 404         | Integration nicht gefunden                                        |
| 409         | Eine Action mit diesem Namen existiert bereits in der Integration |
| 429         | Rate Limit überschritten                                          |
| 500         | Interner Serverfehler                                             |

## Code-Ausführungsumgebung

Action-Code läuft in einer isolierten JavaScript-Umgebung mit Zugriff auf:

* `inputs` - Objekt mit den Werten der Eingabefelder
* `secrets` - Objekt mit konfigurierten Secrets für die Integration
* `fetch` - Standard fetch API für HTTP-Anfragen
* Standard JavaScript-Built-ins

<Warning>
  Action-Code sollte Fehler sauber behandeln. Unbehandelte Fehler führen dazu, dass die Action fehlschlägt und eine Fehlermeldung an den Agenten zurückgegeben wird.
</Warning>

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