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

# API-basierte Agenten

> Business-Logik flexibel auslagern und erweitern

<Tip>
  API-basierte Agenten ermöglichen die **Auslagerung komplexer Business-Logik** an externe Dienste. Sie verbinden die **Leistungsfähigkeit von KI-Agenten** mit der **Flexibilität externer APIs**, um anspruchsvolle Prozesse zu automatisieren und bestehende Systeme nahtlos zu integrieren. Diese Agenten sind ideal für Szenarien, die **spezialisierte Berechnungen**, den **Zugriff auf externe Datenquellen** oder die **Integration mit bestehenden Microservices** erfordern.
</Tip>

API-basierte Agenten bilden die Brücke zwischen der Enneo-Plattform und Ihrer individuellen IT-Landschaft. Sie ermöglichen es, die gesamte Business-Logik in externe Dienste auszulagern und dabei die volle Kontrolle über Datenflüsse und Verarbeitungsschritte zu behalten. Durch die standardisierte Kommunikation über HTTP können beliebige Systeme angebunden werden – von internen Microservices bis hin zu externen SaaS-Lösungen.

Im Gegensatz zu regelbasierten Agenten, deren Logik direkt in Enneo implementiert wird, setzen API-basierte Agenten auf eine klare Trennung zwischen der Enneo-Plattform und der eigentlichen Geschäftslogik. Dies ermöglicht nicht nur eine höhere Skalierbarkeit und bessere Wartbarkeit, sondern auch die Wiederverwendung bestehender Dienste und Infrastrukturen.

<CodeGroup>
  ```php PHP ApiAgent.php icon="php" lines expandable theme={null}
  <?php

  use EnneoSDK\Api;
  use EnneoSDK\IntentInfo;
  use EnneoSDK\IntentOption;
  use EnneoSDK\Interaction;

  require(getenv()['SDK'] ?? 'sdk.php');
  /** @var stdClass $in */

  // Create a mocked API response:
  //{
  //    "data": {
  //    "_action": null
  //  },
  //  "options": [
  //    {
  //        "type": "success",
  //      "name": "Ok",
  //      "icon": "check",
  //      "recommended": true,
  //      "order": 0,
  //      "handler": ""
  //    }
  //  ],
  //  "infos": [
  //    {
  //        "type": "success",
  //      "message": "API-Aufruf erfolgreich",
  //      "extraInfo": null,
  //      "code": null
  //    }
  //  ]
  //}
  $interaction = new Interaction($in);
  $interaction->infos[] = new IntentInfo(
      type: 'success',
      message: 'API-Aufruf erfolgreich'
  );
  $interaction->options[] = new IntentOption(
      type: 'success',
      name: 'Ok',
      recommended: true
  );

  // TODO: replace this "echo" API call by your own API call. Use ApiEnneo::executeUdf to use custom code.
  // E.g.:
  //ApiEnneo::executeUdf(
  //    'customApiCall',
  //    [
  //        "method" => "POST",
  //        "api" => sprintf('contract/%s/anyApi', $in->_metadata->inputParameters->contractId),
  //        "params" => (array) $in
  //    ]
  //);
  $response = Api::call(
      method: 'POST',
      url: 'https://echo.enneo.ai',// echo.enneo.ai
      params: json_decode(json_encode($interaction), true)
  );
  $result = $response;

  echo json_encode($result);
  exit();

  ```

  ```python Python ApiAgent.py icon="python" lines expandable theme={null}
  import importlib.util
  import os
  import json

  file_path = os.getenv('SDK', 'sdk.py')
  spec = importlib.util.spec_from_file_location('sdk', file_path)
  sdk = importlib.util.module_from_spec(spec)
  spec.loader.exec_module(sdk)

  # Create a mocked API response:
  # {
  #   "data": {
  #     "_action": null
  #   },
  #   "options": [
  #     {
  #       "type": "success",
  #       "name": "Ok",
  #       "icon": "check",
  #       "recommended": true,
  #       "order": 0,
  #       "handler": ""
  #     }
  #   ],
  #   "infos": [
  #     {
  #       "type": "success",
  #       "message": "API-Aufruf erfolgreich",
  #       "extraInfo": null,
  #       "code": null
  #     }
  #   ]
  # }

  input_data = sdk.load_input_data()
  interaction = sdk.Interaction(data=input_data)

  interaction.infos.append(
      sdk.IntentInfo(
          type='success',
          message='API-Aufruf erfolgreich'
      )
  )

  interaction.options.append(
      sdk.IntentOption(
          type='success',
          name='Ok',
          recommended=True
      )
  )

  # TODO: replace this "echo" API call by your own API call. Use ApiEnneo::executeUdf to use custom code.
  # E.g.:
  # sdk.ApiEnneo.executeUdf(
  #     'customApiCall',
  #     {
  #         "method": "POST",
  #         "api": f'contract/{input_data["contractId"]}/anyApi',
  #         "params": input_data
  #     }
  # )

  response = sdk.Api.call(
      method='POST',
      url='https://echo.enneo.ai',  # echo.enneo.ai
      params=json.loads(json.dumps(interaction.model_dump()))
  )
  result = response

  print(json.dumps(result))

  ```
</CodeGroup>
