Index: TFP-WebServer/MarkersMod/src/Markers.cs
===================================================================
--- TFP-WebServer/MarkersMod/src/Markers.cs	(revision 439)
+++ TFP-WebServer/MarkersMod/src/Markers.cs	(revision 459)
@@ -21,8 +21,8 @@
 			
 			for (int i = 0; i < numRandomMarkers; i++) {
-				int lat = random.RandomRange (-1000, 1001);
-				int lng = random.RandomRange (-1000, 1001);
+				int x = random.RandomRange (-1000, 1001);
+				int y = random.RandomRange (-1000, 1001);
 
-				markers.Add (WebUtils.GenerateGuid (), (lat, lng, null));
+				markers.Add (WebUtils.GenerateGuid (), (x, y, null));
 			}
 			
@@ -31,6 +31,6 @@
 
 		private static readonly byte[] jsonKeyId = JsonWriter.GetEncodedPropertyNameWithBeginObject ("id");
-		private static readonly byte[] jsonKeyLat = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lat");
-		private static readonly byte[] jsonKeyLng = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lng");
+		private static readonly byte[] jsonKeyX = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("x");
+		private static readonly byte[] jsonKeyY = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("y");
 		private static readonly byte[] jsonKeyIcon = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("icon");
 
@@ -78,9 +78,9 @@
 			_writer.WriteRaw (jsonKeyId);
 			_writer.WriteString (_markerId);
-			_writer.WriteRaw (jsonKeyLat);
-			(int lat, int lng, string icon) = _properties;
-			_writer.WriteInt32 (lat);
-			_writer.WriteRaw (jsonKeyLng);
-			_writer.WriteInt32 (lng);
+			_writer.WriteRaw (jsonKeyX);
+			(int x, int y, string icon) = _properties;
+			_writer.WriteInt32 (x);
+			_writer.WriteRaw (jsonKeyY);
+			_writer.WriteInt32 (y);
 			_writer.WriteRaw (jsonKeyIcon);
 			_writer.WriteString (icon ?? defaultIcon);
@@ -89,11 +89,11 @@
 
 		protected override void HandleRestPost (RequestContext _context, IDictionary<string, object> _jsonInput, byte[] _jsonInputData) {
-			if (!JsonCommons.TryGetJsonField (_jsonInput, "lat", out int lat)) {
-				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_LAT");
+			if (!JsonCommons.TryGetJsonField (_jsonInput, "x", out int x)) {
+				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_X");
 				return;
 			}
 
-			if (!JsonCommons.TryGetJsonField (_jsonInput, "lng", out int lng)) {
-				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_LNG");
+			if (!JsonCommons.TryGetJsonField (_jsonInput, "y", out int y)) {
+				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_Y");
 				return;
 			}
@@ -105,5 +105,5 @@
 
 			string newId = WebUtils.GenerateGuid ();
-			markers.Add (newId, (lat, lng, icon));
+			markers.Add (newId, (x, y, icon));
 
 			PrepareEnvelopedResult (out JsonWriter writer);
@@ -113,11 +113,11 @@
 
 		protected override void HandleRestPut (RequestContext _context, IDictionary<string, object> _jsonInput, byte[] _jsonInputData) {
-			if (!JsonCommons.TryGetJsonField (_jsonInput, "lat", out int lat)) {
-				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_LAT");
+			if (!JsonCommons.TryGetJsonField (_jsonInput, "x", out int x)) {
+				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_X");
 				return;
 			}
 
-			if (!JsonCommons.TryGetJsonField (_jsonInput, "lng", out int lng)) {
-				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_LNG");
+			if (!JsonCommons.TryGetJsonField (_jsonInput, "y", out int y)) {
+				SendEmptyResponse (_context, HttpStatusCode.BadRequest, _jsonInputData, "NO_OR_INVALID_Y");
 				return;
 			}
@@ -139,13 +139,13 @@
 				icon = properties.Item3;
 			}
-			markers [id] = (lat, lng, icon);
+			markers [id] = (x, y, icon);
 
 			PrepareEnvelopedResult (out JsonWriter writer);
 			writer.WriteRaw (jsonKeyId);
 			writer.WriteString (id);
-			writer.WriteRaw (jsonKeyLat);
-			writer.WriteInt32 (lat);
-			writer.WriteRaw (jsonKeyLng);
-			writer.WriteInt32 (lng);
+			writer.WriteRaw (jsonKeyX);
+			writer.WriteInt32 (x);
+			writer.WriteRaw (jsonKeyY);
+			writer.WriteInt32 (y);
 			writer.WriteRaw (jsonKeyIcon);
 			writer.WriteString (icon);
Index: TFP-WebServer/MarkersMod/src/Markers.openapi.yaml
===================================================================
--- TFP-WebServer/MarkersMod/src/Markers.openapi.yaml	(revision 459)
+++ TFP-WebServer/MarkersMod/src/Markers.openapi.yaml	(revision 459)
@@ -0,0 +1,217 @@
+openapi: 3.1.0
+info:
+  title: Markers
+  version: 1
+
+components:
+  schemas:
+    MarkerId:
+      type: string
+      format: uuid
+      description: Unique identifier of the marker
+
+    MarkersElement:
+      type: object
+      properties:
+        id:
+          $ref: '#/components/schemas/MarkerId'
+        x:
+          type: integer
+          examples:
+            - -57
+        y:
+          type: integer
+          examples:
+            - 321
+        icon:
+          type:
+            - string
+            - 'null'
+          format: uri
+          examples:
+            - https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Blue_question_mark_icon.svg/1200px-Blue_question_mark_icon.svg.png
+          description: Icon used for the marker
+      required:
+        - id
+        - x
+        - y
+
+    MarkersList:
+      type: array
+      items:
+        $ref: '#/components/schemas/MarkersElement'
+
+
+  requestBodies:
+    MarkersBodyIn:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              x:
+                type: integer
+                examples:
+                  - -43
+              y:
+                type: integer
+                examples:
+                  - 842
+              icon:
+                type: string
+                format: uuid
+                examples:
+                  - https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Blue_question_mark_icon.svg/1200px-Blue_question_mark_icon.svg.png
+            required:
+              - x
+              - y
+      required: true
+
+
+  responses:
+    MarkersBodyOut:
+      description: Found marker
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              data:
+                $ref: '#/components/schemas/MarkersList'
+              meta:
+                $ref: '#/components/schemas/ResultEnvelopeMeta'
+            required:
+              - data
+              - meta
+
+    MarkersIdOut:
+      description: Created marker's ID
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              data:
+                type: string
+                format: uuid
+              meta:
+                $ref: '#/components/schemas/ResultEnvelopeMeta'
+            required:
+              - data
+              - meta
+
+
+  parameters:
+    MarkerIdParameter:
+      name: id
+      in: path
+      required: true
+      schema:
+        type: string
+        format: uuid
+
+
+paths:
+  /api/markers:
+    get:
+      tags:
+        - Map
+      summary: Markers list
+      description: Fetch a list of the all defined map markers
+      operationId: markers.get
+      responses:
+        200:
+          description: List of found markers
+          $ref: '#/components/responses/MarkersBodyOut'
+
+    post:
+      tags:
+        - Map
+      summary: Marker create
+      description: Create a new map marker
+      operationId: markers.post
+      requestBody:
+        $ref: '#/components/requestBodies/MarkersBodyIn'
+      responses:
+        201:
+          description: Marker with updated values
+          $ref: '#/components/responses/MarkersIdOut'
+        400:
+          description: >-
+            Invalid request body, errorCode will be one of 'NO_OR_INVALID_X',
+            'NO_OR_INVALID_Y'
+          $ref: '#/components/responses/HttpEmptyEnvelopedResponse'
+        403:
+          $ref: '#/components/responses/Unauthorized'
+      security:
+        - apiTokenName: []
+          apiTokenSecret: []
+        - sessionCookie: []
+
+  /api/markers/{id}:
+    get:
+      tags:
+        - Map
+      summary: Marker show
+      description: Fetch a single defined map marker
+      operationId: markers.get.id
+      parameters:
+        - $ref: '#/components/parameters/MarkerIdParameter'
+      responses:
+        200:
+          description: Single found marker
+          $ref: '#/components/responses/MarkersBodyOut'
+        404:
+          description: Marker ID not found, errorCode will be 'ID_NOT_FOUND'
+          $ref: '#/components/responses/HttpEmptyEnvelopedResponse'
+
+    put:
+      tags:
+        - Map
+      summary: Marker update
+      description: Update a single defined map marker
+      operationId: markers.put.id
+      parameters:
+        - $ref: '#/components/parameters/MarkerIdParameter'
+      requestBody:
+        $ref: '#/components/requestBodies/MarkersBodyIn'
+      responses:
+        200:
+          description: Marker with updated values
+          $ref: '#/components/responses/MarkersBodyOut'
+        400:
+          description: >-
+            Invalid request body, errorCode will be one of 'NO_OR_INVALID_X',
+            'NO_OR_INVALID_Y'
+          $ref: '#/components/responses/HttpEmptyEnvelopedResponse'
+        404:
+          description: Marker ID not found, errorCode will be 'ID_NOT_FOUND'
+          $ref: '#/components/responses/HttpEmptyEnvelopedResponse'
+        403:
+          $ref: '#/components/responses/Unauthorized'
+      security:
+        - apiTokenName: []
+          apiTokenSecret: []
+        - sessionCookie: []
+
+    delete:
+      tags:
+        - Map
+      summary: Marker delete
+      description: Delete a single defined map marker
+      operationId: markers.delete.id
+      parameters:
+        - $ref: '#/components/parameters/MarkerIdParameter'
+      responses:
+        204:
+          description: Deleted marker
+          $ref: '#/components/responses/HttpEmptyEnvelopedResponse'
+        404:
+          description: Marker ID not found
+          $ref: '#/components/responses/HttpEmptyEnvelopedResponse'
+        403:
+          $ref: '#/components/responses/Unauthorized'
+      security:
+        - apiTokenName: []
+          apiTokenSecret: []
+        - sessionCookie: []
