diff --git a/static/webui/script.js b/static/webui/script.js
index 25f1ffe3..27c2c528 100644
--- a/static/webui/script.js
+++ b/static/webui/script.js
@@ -649,6 +649,14 @@ function updateInventory() {
             ];
 
             // Populate inventory route
+
+            document.getElementById("typeName-tab").classList.remove("active");
+            document.getElementById("typeName-tab-content").classList.remove("active", "show");
+            document.getElementById("typeName-type").value = "";
+
+            document.getElementById("miscItems-tab").classList.add("active");
+            document.getElementById("miscItems-tab-content").classList.add("active", "show");
+
             ["RegularCredits", "PremiumCredits", "FusionPoints", "PrimeTokens"].forEach(currency => {
                 document.getElementById(currency + "-owned").textContent = loc("currency_owned")
                     .split("|COUNT|")
@@ -1685,7 +1693,7 @@ function doAcquireEvolution() {
     setEvolutionProgress([{ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 }]);
 }
 
-$(document).on("input", "input[list]", function () {
+$(document).on("input", "input", function () {
     $(this).removeClass("is-invalid");
 });
 
@@ -2008,6 +2016,35 @@ function doAcquireMiscItems() {
     }
 }
 
+function addItemByItemType() {
+    const ItemType = document.getElementById("typeName-type").value;
+    // Must start with "/Lotus/", contain only A–Z letters, no "//", and not end with "/"
+    if (!ItemType || !/^\/Lotus\/(?:[A-Za-z]+(?:\/[A-Za-z]+)*)$/.test(ItemType)) {
+        $("#typeName-type").addClass("is-invalid").focus();
+        return;
+    }
+    revalidateAuthz().then(() => {
+        $.post({
+            url: "/custom/addItems?" + window.authz,
+            contentType: "application/json",
+            data: JSON.stringify([
+                {
+                    ItemType,
+                    ItemCount: 1
+                }
+            ])
+        })
+            .done(function (_, _, jqXHR) {
+                if (jqXHR.status === 200) {
+                    updateInventory();
+                }
+            })
+            .fail(function () {
+                $("#typeName-type").addClass("is-invalid").focus();
+            });
+    });
+}
+
 function doAcquireRiven() {
     let fingerprint;
     try {
diff --git a/static/webui/translations/de.js b/static/webui/translations/de.js
index e6f07e28..ef14b2ed 100644
--- a/static/webui/translations/de.js
+++ b/static/webui/translations/de.js
@@ -79,6 +79,8 @@ dict = {
     navbar_cheats: `Cheats`,
     navbar_import: `Importieren`,
     inventory_addItems: `Gegenstände hinzufügen`,
+    inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
+    inventory_addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`,
     inventory_suits: `Warframes`,
     inventory_longGuns: `Primärwaffen`,
     inventory_pistols: `Sekundärwaffen`,
diff --git a/static/webui/translations/en.js b/static/webui/translations/en.js
index 93359663..25f13799 100644
--- a/static/webui/translations/en.js
+++ b/static/webui/translations/en.js
@@ -78,6 +78,8 @@ dict = {
     navbar_cheats: `Cheats`,
     navbar_import: `Import`,
     inventory_addItems: `Add Items`,
+    inventory_addItemByItemType: `Raw`,
+    inventory_addItemByItemType_warning: `Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`,
     inventory_suits: `Warframes`,
     inventory_longGuns: `Primary Weapons`,
     inventory_pistols: `Secondary Weapons`,
diff --git a/static/webui/translations/es.js b/static/webui/translations/es.js
index e7185a9e..118742e2 100644
--- a/static/webui/translations/es.js
+++ b/static/webui/translations/es.js
@@ -79,6 +79,8 @@ dict = {
     navbar_cheats: `Trucos`,
     navbar_import: `Importar`,
     inventory_addItems: `Agregar objetos`,
+    inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
+    inventory_addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`,
     inventory_suits: `Warframes`,
     inventory_longGuns: `Armas primarias`,
     inventory_pistols: `Armas secundarias`,
diff --git a/static/webui/translations/fr.js b/static/webui/translations/fr.js
index 93d8fa94..98d19139 100644
--- a/static/webui/translations/fr.js
+++ b/static/webui/translations/fr.js
@@ -79,6 +79,8 @@ dict = {
     navbar_cheats: `Cheats`,
     navbar_import: `Importer`,
     inventory_addItems: `Ajouter des items`,
+    inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
+    inventory_addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`,
     inventory_suits: `Warframes`,
     inventory_longGuns: `Armes principales`,
     inventory_pistols: `Armes secondaires`,
diff --git a/static/webui/translations/ru.js b/static/webui/translations/ru.js
index b24304b7..5b4f79d4 100644
--- a/static/webui/translations/ru.js
+++ b/static/webui/translations/ru.js
@@ -79,6 +79,8 @@ dict = {
     navbar_cheats: `Читы`,
     navbar_import: `Импорт`,
     inventory_addItems: `Добавить предметы`,
+    inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
+    inventory_addItemByItemType_warning: `Используйте эту функцию на свой страх и риск. Она может повредить ваш инвентарь, и в случае проблем вам придётся удалять предметы вручную.`,
     inventory_suits: `Варфреймы`,
     inventory_longGuns: `Основное оружие`,
     inventory_pistols: `Вторичное оружие`,
diff --git a/static/webui/translations/uk.js b/static/webui/translations/uk.js
index 55d4a884..76caf6a4 100644
--- a/static/webui/translations/uk.js
+++ b/static/webui/translations/uk.js
@@ -79,6 +79,8 @@ dict = {
     navbar_cheats: `Чити`,
     navbar_import: `Імпорт`,
     inventory_addItems: `Додати предмети`,
+    inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
+    inventory_addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`,
     inventory_suits: `Ворфрейми`,
     inventory_longGuns: `Основна зброя`,
     inventory_pistols: `Допоміжна зброя`,
diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js
index 8998786d..fb742f18 100644
--- a/static/webui/translations/zh.js
+++ b/static/webui/translations/zh.js
@@ -79,6 +79,8 @@ dict = {
     navbar_cheats: `作弊选项`,
     navbar_import: `导入`,
     inventory_addItems: `添加物品`,
+    inventory_addItemByItemType: `[UNTRANSLATED] Raw`,
+    inventory_addItemByItemType_warning: `[UNTRANSLATED] Use this feature at your own risk. It may break your inventory, and you will need to remove items manually if something goes wrong.`,
     inventory_suits: `战甲`,
     inventory_longGuns: `主要武器`,
     inventory_pistols: `次要武器`,