diff --git a/WebHostLib/downloads.py b/WebHostLib/downloads.py
index 9b93b82c54..0704f5d0ec 100644
--- a/WebHostLib/downloads.py
+++ b/WebHostLib/downloads.py
@@ -78,6 +78,8 @@ def download_slot_file(room_id, player_id: int):
fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}_SP.apv6"
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, attachment_filename=fname)
diff --git a/WebHostLib/templates/macros.html b/WebHostLib/templates/macros.html
index 70b41fad9e..6ed2ca492a 100644
--- a/WebHostLib/templates/macros.html
+++ b/WebHostLib/templates/macros.html
@@ -43,6 +43,9 @@
{% elif patch.game in ["A Link to the Past", "Secret of Evermore", "Super Metroid", "SMZ3"] %}
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 e6b2c7de95..00825df47b 100644
--- a/WebHostLib/upload.py
+++ b/WebHostLib/upload.py
@@ -80,6 +80,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")