Index: TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.cs
===================================================================
--- TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.cs	(revision 466)
+++ TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.cs	(revision 467)
@@ -19,34 +19,5 @@
 				}
 				
-				writer.WriteBeginObject ();
-
 				writeModJson (ref writer, webMod);
-
-				if (webMod.ReactBundle != null || webMod.CssPath != null) {
-					writer.WriteValueSeparator ();
-
-					writer.WritePropertyName ("web");
-					writer.WriteBeginObject ();
-					
-					string webModReactBundle = webMod.ReactBundle;
-					if (webModReactBundle != null) {
-						writer.WritePropertyName ("bundle");
-						writer.WriteString (webModReactBundle);
-					}
-
-					string webModCssFile = webMod.CssPath;
-					if (webModCssFile != null) {
-						if (webModReactBundle != null) {
-							writer.WriteValueSeparator ();
-						}
-
-						writer.WritePropertyName ("css");
-						writer.WriteString (webModCssFile);
-					}
-					
-					writer.WriteEndObject ();
-				}
-
-				writer.WriteEndObject ();
 			}
 
@@ -56,5 +27,7 @@
 		}
 
-		private void writeModJson (ref JsonWriter _writer, WebMod _webMod) {
+		private static void writeModJson (ref JsonWriter _writer, WebMod _webMod) {
+			_writer.WriteBeginObject ();
+
 			_writer.WritePropertyName ("name");
 			_writer.WriteString (_webMod.ParentMod.Name);
@@ -79,4 +52,36 @@
 			_writer.WritePropertyName ("website");
 			_writer.WriteString (_webMod.ParentMod.Website);
+			
+			writeWebModJson (ref _writer, _webMod);
+
+			_writer.WriteEndObject ();
+		}
+
+		private static void writeWebModJson (ref JsonWriter _writer, WebMod _webMod) {
+			if (_webMod.ModUrl != null) {
+				_writer.WriteValueSeparator ();
+
+				_writer.WritePropertyName ("web");
+				_writer.WriteBeginObject ();
+				
+				_writer.WritePropertyName ("baseUrl");
+				_writer.WriteString (_webMod.ModUrl);
+
+				string webModReactBundle = _webMod.ReactBundle;
+				if (webModReactBundle != null) {
+					_writer.WriteValueSeparator ();
+					_writer.WritePropertyName ("bundle");
+					_writer.WriteString (webModReactBundle);
+				}
+
+				string webModCssFile = _webMod.CssPath;
+				if (webModCssFile != null) {
+					_writer.WriteValueSeparator ();
+					_writer.WritePropertyName ("css");
+					_writer.WriteString (webModCssFile);
+				}
+
+				_writer.WriteEndObject ();
+			}
 		}
 
Index: TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.openapi.yaml
===================================================================
--- TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.openapi.yaml	(revision 466)
+++ TFP-WebServer/WebServer/src/WebAPI/APIs/GameData/Mods.openapi.yaml	(revision 467)
@@ -37,12 +37,21 @@
           type: object
           properties:
+            baseUrl:
+              type: string
+              examples:
+                - /webmods/TFP_MarkersExample/
+              description: Base URL of the WebMod folder of this mod. Always ends with a forward slash '/'.
             bundle:
               type: string
               examples:
-                - /webmods/Xample_MarkersMod/bundle.js
+                - /webmods/TFP_MarkersExample/bundle.js
+              description: URL of the React bundle if the mod has one.
             css:
               type: string
               examples:
-                - /webmods/Xample_MarkersMod/styling.css
+                - /webmods/TFP_MarkersExample/styling.css
+              description: URL of a styling CSS file if the mod has one.
+          required:
+            - baseUrl
       required:
         - name
Index: TFP-WebServer/WebServer/src/WebAPI/APIs/Log.openapi.yaml
===================================================================
--- TFP-WebServer/WebServer/src/WebAPI/APIs/Log.openapi.yaml	(revision 466)
+++ TFP-WebServer/WebServer/src/WebAPI/APIs/Log.openapi.yaml	(revision 467)
@@ -8,5 +8,9 @@
     LogEntry:
       type: object
-      properties: 
+      properties:
+        id:
+          type: integer
+          minimum: 0
+          description: Consecutive ID/number of this log line
         msg:
           type: string
@@ -33,6 +37,7 @@
           examples:
             - '87123'
-          description: Time since server was started in milliseconds.
+          description: Time since server was started in milliseconds
       required:
+        - id
         - msg
         - type
Index: TFP-WebServer/WebServer/src/WebAPI/APIs/LogApi.cs
===================================================================
--- TFP-WebServer/WebServer/src/WebAPI/APIs/LogApi.cs	(revision 466)
+++ TFP-WebServer/WebServer/src/WebAPI/APIs/LogApi.cs	(revision 467)
@@ -12,5 +12,6 @@
 		private static readonly byte[] jsonKeyLastLine = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lastLine");
 
-		private static readonly byte[] jsonMsgKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("msg");
+		private static readonly byte[] jsonIdKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("id");
+		private static readonly byte[] jsonMsgKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("msg");
 		private static readonly byte[] jsonTypeKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("type");
 		private static readonly byte[] jsonTraceKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("trace");
@@ -57,20 +58,5 @@
 				}
 
-				writer.WriteRaw (jsonMsgKey);
-				writer.WriteString (logEntry.Message);
-
-				writer.WriteRaw (jsonTypeKey);
-				writer.WriteString (logEntry.Type.ToStringCached ());
-
-				writer.WriteRaw (jsonTraceKey);
-				writer.WriteString (logEntry.Trace);
-
-				writer.WriteRaw (jsonIsotimeKey);
-				writer.WriteString (logEntry.IsoTime);
-
-				writer.WriteRaw (jsonUptimeKey);
-				writer.WriteString (logEntry.Uptime.ToString ());
-
-				writer.WriteEndObject ();
+				WriteLogMessageObject (ref writer, logEntry);
 			}
 
@@ -87,4 +73,26 @@
 			SendEnvelopedResult (_context, ref writer);
 		}
+
+		public static void WriteLogMessageObject (ref JsonWriter _writer, LogBuffer.LogEntry _logEntry) {
+			_writer.WriteRaw (jsonIdKey);
+			_writer.WriteInt32 (_logEntry.MessageId);
+			
+			_writer.WriteRaw (jsonMsgKey);
+			_writer.WriteString (_logEntry.Message);
+
+			_writer.WriteRaw (jsonTypeKey);
+			_writer.WriteString (_logEntry.Type.ToStringCached ());
+
+			_writer.WriteRaw (jsonTraceKey);
+			_writer.WriteString (_logEntry.Trace);
+
+			_writer.WriteRaw (jsonIsotimeKey);
+			_writer.WriteString (_logEntry.IsoTime);
+
+			_writer.WriteRaw (jsonUptimeKey);
+			_writer.WriteString (_logEntry.Uptime.ToString ());
+
+			_writer.WriteEndObject ();
+		}
 	}
 }
