diff --git a/api/applog.php b/api/applog.php
new file mode 100644
index 0000000..9d77fc8
--- /dev/null
+++ b/api/applog.php
@@ -0,0 +1,99 @@
+
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/**
+ * \file netdiag/api/applog.php
+ * \ingroup netdiag
+ * \brief API-Endpunkt: Debug-Log der mobilen App entgegennehmen.
+ *
+ * Die App schickt erfasste Fehler/Meldungen per POST hierher; sie landen
+ * in llx_netdiag_applog und sind so serverseitig auswertbar — ohne Kabel
+ * und ohne Logcat. Authentifizierung über das normale App-JWT.
+ */
+
+require_once __DIR__.'/netdiag_api.lib.php';
+
+netdiag_api_bootstrap();
+
+/**
+ * @var Conf $conf
+ * @var DoliDB $db
+ */
+
+$user = netdiag_api_authenticate($db);
+
+if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
+ netdiag_api_error('Nur POST erlaubt', 405);
+}
+
+$body = netdiag_api_read_body();
+$entries = (isset($body['entries']) && is_array($body['entries'])) ? $body['entries'] : array();
+if (empty($entries)) {
+ netdiag_api_respond(array('ok' => true, 'stored' => 0));
+}
+
+$appVersion = isset($body['appVersion']) ? mb_substr((string) $body['appVersion'], 0, 32) : '';
+$device = isset($body['device']) ? mb_substr((string) $body['device'], 0, 128) : '';
+
+$prefix = $db->prefix();
+
+// Tabelle bei Bedarf anlegen — das Modul kann in Prod schon vor diesem
+// Feature installiert worden sein, dann lief die sql/-Datei nie.
+$db->query(
+ "CREATE TABLE IF NOT EXISTS ".$prefix."netdiag_applog("
+ ." rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,"
+ ." entity integer DEFAULT 1 NOT NULL,"
+ ." fk_user integer,"
+ ." app_version varchar(32),"
+ ." device varchar(128),"
+ ." level varchar(8),"
+ ." message text,"
+ ." date_log datetime,"
+ ." date_creation datetime NOT NULL,"
+ ." INDEX idx_netdiag_applog_creation(date_creation)"
+ .") ENGINE=innodb"
+);
+
+// Schutz gegen überlange Requests
+$entries = array_slice($entries, 0, 500);
+
+$now = $db->idate(dol_now());
+$stored = 0;
+$db->begin();
+foreach ($entries as $e) {
+ if (!is_array($e)) {
+ continue;
+ }
+ $level = isset($e['level']) ? mb_substr((string) $e['level'], 0, 8) : 'info';
+ $msg = isset($e['msg']) ? mb_substr((string) $e['msg'], 0, 2000) : '';
+ // Client-Zeitstempel in ms -> Sekunden -> DB-Datetime
+ $ts = isset($e['ts']) ? (int) $e['ts'] : 0;
+ $dateLog = $ts > 0 ? $db->idate((int) ($ts / 1000)) : $now;
+
+ $sql = "INSERT INTO ".$prefix."netdiag_applog"
+ ." (entity, fk_user, app_version, device, level, message, date_log, date_creation)"
+ ." VALUES (".((int) $conf->entity).", ".((int) $user->id).","
+ ." '".$db->escape($appVersion)."', '".$db->escape($device)."',"
+ ." '".$db->escape($level)."', '".$db->escape($msg)."',"
+ ." '".$db->escape($dateLog)."', '".$db->escape($now)."')";
+ if ($db->query($sql)) {
+ $stored++;
+ }
+}
+$db->commit();
+
+netdiag_api_respond(array('ok' => true, 'stored' => $stored));
diff --git a/sql/llx_netdiag_applog.key.sql b/sql/llx_netdiag_applog.key.sql
new file mode 100644
index 0000000..121c15c
--- /dev/null
+++ b/sql/llx_netdiag_applog.key.sql
@@ -0,0 +1,5 @@
+-- Copyright (C) 2026 Eduard Wisch
+--
+-- Index für llx_netdiag_applog
+
+ALTER TABLE llx_netdiag_applog ADD INDEX idx_netdiag_applog_creation(date_creation);
diff --git a/sql/llx_netdiag_applog.sql b/sql/llx_netdiag_applog.sql
new file mode 100644
index 0000000..b709b98
--- /dev/null
+++ b/sql/llx_netdiag_applog.sql
@@ -0,0 +1,20 @@
+-- Copyright (C) 2026 Eduard Wisch
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- Tabelle: Debug-Log der mobilen App (von api/applog.php befüllt)
+
+CREATE TABLE llx_netdiag_applog(
+ rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
+ entity integer DEFAULT 1 NOT NULL,
+ fk_user integer,
+ app_version varchar(32),
+ device varchar(128),
+ level varchar(8),
+ message text,
+ date_log datetime,
+ date_creation datetime NOT NULL
+) ENGINE=innodb;