diff --git a/WebHostLib/downloads.py b/WebHostLib/downloads.py
index 6a83b674c9..053fa35ce4 100644
--- a/WebHostLib/downloads.py
+++ b/WebHostLib/downloads.py
@@ -79,6 +79,8 @@ def download_slot_file(room_id, player_id: int):
fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}_SP.apzl"
elif slot_data.game == "Super Mario 64":
fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}_SP.apsm64ex"
+ elif slot_data.game == "Dark Souls III":
+ fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}.json"
else:
return "Game download not supported."
return send_file(io.BytesIO(slot_data.data), as_attachment=True, download_name=fname)
diff --git a/WebHostLib/templates/macros.html b/WebHostLib/templates/macros.html
index 4840cb1383..9a92edbbf1 100644
--- a/WebHostLib/templates/macros.html
+++ b/WebHostLib/templates/macros.html
@@ -43,6 +43,9 @@
{% elif patch.game | supports_apdeltapatch %}
Download Patch File...
+ {% elif patch.game == "Dark Souls III" %}
+
+ Download JSON File...
{% else %}
No file to download for this game.
{% endif %}
diff --git a/WebHostLib/upload.py b/WebHostLib/upload.py
index 45d7284006..22e1353fbe 100644
--- a/WebHostLib/upload.py
+++ b/WebHostLib/upload.py
@@ -69,6 +69,11 @@ def upload_zip_to_db(zfile: zipfile.ZipFile, owner=None, meta={"race": False}, s
slots.add(Slot(data=zfile.open(file, "r").read(), player_name=slot_name,
player_id=int(slot_id[1:]), game="Ocarina of Time"))
+ elif file.filename.endswith(".json"):
+ _, seed_name, slot_id, slot_name = file.filename.split('.')[0].split('-', 3)
+ slots.add(Slot(data=zfile.open(file, "r").read(), player_name=slot_name,
+ player_id=int(slot_id[1:]), game="Dark Souls III"))
+
elif file.filename.endswith(".txt"):
spoiler = zfile.open(file, "r").read().decode("utf-8-sig")