diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e9d6e9c06d3cae80108456cf4d39bf012e4286cc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+formats/__pycache__
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a13956e2b4b6bcf78efe8423da25333a522aefc4..b3412c2c3f48e565f874d27f14c93d0b3203cc31 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -41,7 +41,7 @@ To add/edit labels, go to [manage labels](https://git.noc.ac.uk/communications-b
 | -------- | ---------------------------------------------------------- | ----------------------------------------------------------------------- |
 | Project  | `SoAR`                                                     | Associated project                                                      |
 | Partner  | `Planet Ocean`, `Hydro-Surv`, `NOC`, `RHU`                 | Associated partner                                                      |
-| Asset    | `ah1`, `ecosub`, `reav`, `autonomy engine`                 | Associated vehicle                                                      |
+| Asset    | `ah1`, `ecosub`, `reav`, `autonomy engine`                 | Associated platform                                                     |
 | Status   | `In Sprint Backlog`, `In Progress`, `In Review`, `BLOCKED` | Status of resolving issue                                               |
 | Weight   | `0`, `1`, `2`, `3`, `5`, `8`                               | Complexity of issue (0 - quick task and 8 - full 2 weeks worth of work) |
 | -        | `bug`, `feature`                                           | Type of issue i.e. new feature, bug                                     |
diff --git a/README.md b/README.md
index b5ac42eff33794d3da9bf3610a38d1549c1ae1ba..61f5e652ec2e2ba601ba755b8f84a949eb07707b 100644
--- a/README.md
+++ b/README.md
@@ -1,56 +1,29 @@
 # Overview
-This project repository is a collaborative workspace. It consists of all messages transferred into and out of the Communications Backbone. Message type schemas will be developed once reviewing each vehicle's data and statuses defined by each partner.
+This project repository is a collaborative workspace. It consists of all messages transferred into and out of the Communications Backbone. Message type schemas will be developed once reviewing each platform's data and statuses defined by each partner.
 
+The schemas are using OpenApi 3.0 (due to the `payload` sub-schemas that vary according to the `message_type`).
 
+## Message Types
+Each message below will be wrapped in a `payload` field and will have a `header` with message metadata information:
+* `mission_plan`: these would be two message types, i. encoded (platform-specific serialized message) and ii. parsed, human-readable message.
+* `platform_status`: these would be two message types, i. encoded (platform-specific serialized message) and ii. parsed, human-readable message.
+* `observation`: this would be desired scientific data sent by the platform
+* `acknowledgement`: level of acknowledgment where an acknowledgement is sent when a message is i. received, ii. sent to the next destination (e.g. platform in the water).
+* `planning_configuration`: sent from the GUI to initialise the AI model (autonomy engine).
 
-# Message Types
-* Each message below will be treated as the `payload` that are wrapped in a `full_message_format` that includes a `message_header`.
+## Run Docs
+Run the command below and go to `http://127.0.0.1:5000`
+```
+python3 generate_schema_config.py
+```
+## Run Tests
+Run the command below
+```
+python3 -m unittest tests/test_schemas.py
+```
 
-|  Type                     |  Summary of File                                                                               | Serialized/Compiled in Vehicle-Specific Format? |
-| --------------------------| ---------------------------------------------------------------------------------------------- | ----------------------------------------------- |
-|  `planning_configuration` |   Autonomy Engine's Configuration file (if c2 needs to update its respective vehicle directly) |             No                                  |
-|  `mission_plan`           |   Mission plan generated by Autonomy Engine per vehicle                                        |             No                                  |
-|  `encoded_mission_plan`   |   Encoded/serialized vehicle-specific mission plan                                             |             Yes                                 |
-|  `encoded_vehicle_status` |   Encoded/serialized vehicle-specific vehicle status                                           |             Yes                                 |
-|  `vehicle_status`         |   Decoded/de-serialized generic vehicle status                                                 |             No                                  |
-|  `encoded_observation`    |   Encoded/serialized observation data from vehicle for Autonomy Engine                         |             Yes                                 |
-|  `observation`            |   Decoded/de-serialized observation data from vehicle for Autonomy Engine                      |             No                                  |
-|  `acknowledgement`        |   Decoded/de-serialized acknowledgement message from the Hydrosurv Adapater                    |             No                                  |
-
------------------------------------
-
-## Message Data Flow Summary
-| Partner         | Message Type           | Source            | Destination            | Via Comms Backbone? | Contains Serialized Vehicle-Specific File? | Comment                                                                                  |
-| --------------- | ---------------------- | ----------------- | ---------------------- | ------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------- |
-| Autonomy Engine | vehicle status        | C2’s              | Autonomy Engine        | Yes                 | No                                         |                                                                                          |
-| Autonomy Engine | Hydrosurv/Ecosub/Ah1   |
-| Autonomy Engine | mission plan           | Autonomy Engine   | C2’s                   | Yes                 | No                                         |                                                                                          |
-| Autonomy Engine | Hydrosurv/Ecosub/Ah1   |
-| Autonomy Engine | autonomy configuration | GUI               | ALL                    | Yes                 | No                                         | Common file sent to all partners – to store                                              |
-| Autonomy Engine | autonomy configuration | C2’s              | Autonomy Engine        | Yes                 | No                                         | IF REQUIRED ONLY, UPDATE STORED FILE.                                                    |
-| Autonomy Engine | Hydrosurv/Ecosub/Ah1   |
-| Hydrosurv       | vehicle status        | Hydrosurv C2      | Autonomy Engine        | Yes                 | No                                         |                                                                                          |
-| Hydrosurv       | mission plan           | Autonomy Engine   | Hydrosurv C2           | Yes                 | No                                         |                                                                                          |
-| Hydrosurv       | mission plan           | Hydrosurv C2      | Reav-60                | No                  | Yes                                        |                                                                                          |
-| Hydrosurv       | autonomy configuration | GUI               | Hydrosurv C2 (ALL)     | Yes                 | No                                         | Common file sent to all partners – to store                                              |
-| Hydrosurv       | autonomy configuration | Hydrosurv C2      | GUI                    | Yes                 | No                                         | IF REQUIRED ONLY, UPDATE STORED FILE.                                                    |
-| Hydrosurv       | acknowledgment         | Hydrosurv C2      | Comms Backbone (Audit) | Yes                 | No                                         | When hydrosurv adapter has (a) Received, (b) Sent Plan to Reav, and (c) Executed by Reav |
-| Planet Ocean    | vehicle status        | Ecosub            | Hydrosurv Adapter      | No                  | Yes                                        |                                                                                          |
-| Planet Ocean    | vehicle status        | Hydrosurv Adapter | Ecosub C2              | Yes                 | Yes                                        |                                                                                          |
-| Planet Ocean    | vehicle status        | Ecosub C2         | Autonomy Engine        | Yes                 | No                                         |                                                                                          |
-| Planet Ocean    | mission plan           | Autonomy Engine   | Ecosub C2              | Yes                 | No                                         |                                                                                          |
-| Planet Ocean    | mission plan           | Ecosub C2         | Hydrosurv Adapter      | Yes                 | Yes                                        |                                                                                          |
-| Planet Ocean    | mission plan           | Hydrosurv Adapter | Ecosub                 | No                  | Yes                                        | Via Hermes + Router                                                                      |
-| Planet Ocean    | autonomy configuration | GUI               | Ecosub C2 (ALL)        | Yes                 | No                                         | Common file sent to all partners – to store                                              |
-| Planet Ocean    | autonomy configuration | Hydrosurv C2      | GUI                    | Yes                 | No                                         | IF REQUIRED ONLY, UPDATE STORED FILE.                                                    |
-| Planet Ocean    | observation            | Ecosub            | Hydrosurv Adapter      | No                  | Yes                                        | Via Hermes + Router                                                                      |
-| Planet Ocean    | observation            | Hydrosurv Adapter | Ecosub C2              | Yes                 | Yes                                        |                                                                                          |
-| Planet Ocean    | observation            | Ecosub C2         | Autonomy Engine        | Yes                 | No                                         |                                                                                          |
-| Planet Ocean    | vehicle status        | AH1               | Hydrosurv Adapter      | No                  | Yes                                        | Via Hermes + Router                                                                      |
-| NOC             | vehicle status        | Hydrosurv Adapter | NOC C2                 | Yes                 | Yes                                        |                                                                                          |
-| NOC             | vehicle status        | NOC C2            | Autonomy Engine        | Yes                 | No                                         |                                                                                          |
-| NOC             | mission plan           | Autonomy Engine   | NOC C2                 | Yes                 | No                                         |                                                                                          |
-| NOC             | mission plan           | NOC C2            | Hydrosurv Adapter      | Yes                 | Yes                                        |                                                                                          |
-| NOC             | mission plan           | Hydrosurv Adapter | AH1                    | No                  | Yes                                        | Via Hermes + Router                                                                      |
-| NOC             | autonomy configuration | GUI               | NOC C2 (ALL)           | Yes                 | No                                         | Common file sent to all partners – to store                                              |
-| NOC             | autonomy configuration | Hydrosurv C2      | GUI                    | Yes                 | No                                         | IF REQUIRED ONLY, UPDATE STORED FILE.                                                    |
\ No newline at end of file
+# Quick Links
+1. [Generated Swagger Docs (recommended to look at this)](https://git.noc.ac.uk/communications-backbone-system/backbone-message-format/-/blob/dev/project/soar/swagger.json)
+2. [Schema Fields Definitions](https://git.noc.ac.uk/communications-backbone-system/backbone-message-format/-/tree/dev/formats)
+3. [JSON Schema Examples](https://git.noc.ac.uk/communications-backbone-system/backbone-message-format/-/tree/dev/examples)
+4. Ongoing Project: [SoAR README.md](https://git.noc.ac.uk/communications-backbone-system/backbone-message-format/-/blob/dev/project/soar/SOAR_README.md)
\ No newline at end of file
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..42345bdd995796281efd1207c2cd04dea0c0b446
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,10 @@
+from flask_restx import Api
+from flask import Flask
+
+
+__all__ = [
+    "formats",
+    "tests",
+]
+app = Flask(__name__)
+api = Api(app)
diff --git a/examples/autonomy_engine_adapter/acknowledgement.json b/examples/autonomy_engine_adapter/acknowledgement.json
new file mode 100644
index 0000000000000000000000000000000000000000..c5290f54e90ddbad8eadb13c4c4e4d5f6abe6843
--- /dev/null
+++ b/examples/autonomy_engine_adapter/acknowledgement.json
@@ -0,0 +1,16 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 1,
+        "source": "hydrosurv_adapter",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "acknowledgement",
+        "acknowledged_message_ID": "11111111-7bc8-11ed-a1eb-0242ac999999",
+        "status": "c2_received"
+    }
+}
\ No newline at end of file
diff --git a/examples/autonomy_engine_adapter/mission_plan_AH1.json b/examples/autonomy_engine_adapter/mission_plan_AH1.json
new file mode 100644
index 0000000000000000000000000000000000000000..6dfe1a1a1d0bd895e6e0a23e3e2bb357b4e2b73d
--- /dev/null
+++ b/examples/autonomy_engine_adapter/mission_plan_AH1.json
@@ -0,0 +1,54 @@
+{
+  "header": {  
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "noc_c2",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "5-ah1",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "action": "move",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "dive",
+        "flight_style": "dive to depth",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "altitude": 10,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "scanline",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 60.00000000000000,
+        "altitude": 10,
+        "activate_payload": true,
+        "send_environmental_data": false
+      },
+      {
+        "action": "climb",
+        "flight_style": "go to surface",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/autonomy_engine_adapter/mission_plan_ECOSUB.json b/examples/autonomy_engine_adapter/mission_plan_ECOSUB.json
new file mode 100644
index 0000000000000000000000000000000000000000..d7fd238976ca6d4c93dbf00e808aa29891317076
--- /dev/null
+++ b/examples/autonomy_engine_adapter/mission_plan_ECOSUB.json
@@ -0,0 +1,54 @@
+{
+  "header": {  
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "ecosub_c2",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "ecosub-5",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "action": "move",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "dive",
+        "flight_style": "dive to depth",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "altitude": 10,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "scanline",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 60.00000000000000,
+        "altitude": 10,
+        "activate_payload": true,
+        "send_environmental_data": false
+      },
+      {
+        "action": "climb",
+        "flight_style": "go to surface",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0,
+        "activate_payload": false,
+        "send_environmental_data": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/autonomy_engine_adapter/mission_plan_HYDROSURV.json b/examples/autonomy_engine_adapter/mission_plan_HYDROSURV.json
new file mode 100644
index 0000000000000000000000000000000000000000..f5c1c0d92f1577d30320abb4d1e7c6cd8b4de3dc
--- /dev/null
+++ b/examples/autonomy_engine_adapter/mission_plan_HYDROSURV.json
@@ -0,0 +1,30 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "hydrosurv_adapter",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "reav-60-1",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "latitude_waypoint": -4.187143188645706,
+        "longitude_waypoint": 50.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.187143188645706,
+        "longitude_waypoint": 51.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/autonomy_engine_adapter/planning_configuration.json b/examples/autonomy_engine_adapter/planning_configuration.json
new file mode 100644
index 0000000000000000000000000000000000000000..f1191837bb12e4493bb9a534097e49500c39b014
--- /dev/null
+++ b/examples/autonomy_engine_adapter/planning_configuration.json
@@ -0,0 +1,161 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "ecosub_c2",
+    "destination": "autonomy_engine",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "platform_status",
+    "planning_config_ID": 3,
+    "exclusion_zones": [
+      {
+        "geometry_coordinates": [
+          [
+            [
+              -4.187143188645706,
+              50.37072283932642
+            ],
+            [
+              -4.202697005964865,
+              50.368816892405874
+            ],
+            [
+              -4.203156724702808,
+              50.365640144076906
+            ],
+            [
+              -4.19449868846155,
+              50.362267670845654
+            ]
+          ]
+        ]
+      }
+    ],
+    "squads": [
+      {
+        "squad_ID": 1,
+        "no_of_platforms": 1,
+        "squad_mission_type": "tracking",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "model": "reav",
+            "platform_ID": "reav-60-1",
+            "serial": "reav-60",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {}
+          }
+        ],
+        "region_of_interest": {
+          "geometry_coordinates": [
+            [
+              [
+                -4.187143188645706,
+                50.37072283932642
+              ],
+              [
+                -4.202697005964865,
+                50.368816892405874
+              ],
+              [
+                -4.203156724702808,
+                50.365640144076906
+              ],
+              [
+                -4.19449868846155,
+                50.362267670845654
+              ]
+            ]
+          ]
+        }
+      },
+      {
+        "squad_ID": 2,
+        "no_of_platforms": 3,
+        "squad_mission_type": "survey",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "ecosub-1",
+            "serial": "ecosub-2",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          },
+          {
+            "platform_ID": "ecosub-2",
+            "serial": "ecosubxyz-5",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -0.432,
+              "longitude_waypoint": 20.365,
+              "safe_command": "go_home",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          }
+        ],
+        "region_of_interest": {}
+      },
+      {
+        "squad_ID": 3,
+        "no_of_platforms": 1,
+        "squad_mission_type": "inspection",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "ah-1",
+            "serial": "autosubhover-1",
+            "model": "autosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": 20.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "abort_now",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "MBES"
+            }
+          }
+        ],
+        "region_of_interest": {}
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/autonomy_engine_adapter/platform_status-from_usbl_example.json b/examples/autonomy_engine_adapter/platform_status-from_usbl_example.json
new file mode 100644
index 0000000000000000000000000000000000000000..6721a35ffe5177d21fa0594dbf5c9d90bf6043bf
--- /dev/null
+++ b/examples/autonomy_engine_adapter/platform_status-from_usbl_example.json
@@ -0,0 +1,21 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "hermes",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-5",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "usbl",
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20
+    }
+}
diff --git a/examples/autonomy_engine_adapter/platform_status.json b/examples/autonomy_engine_adapter/platform_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..b82beba2ed793f2c39fee7dd789ed142e6ce5b57
--- /dev/null
+++ b/examples/autonomy_engine_adapter/platform_status.json
@@ -0,0 +1,44 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "ecosub_c2",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-2",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "onboard_platform",
+        "autonomy_engine_plan_ID": 1,
+        "battery_remaining_capacity": 80.2,
+        "active": true,
+        "platform_state": "ABORT",
+        "mission_action_ID": 1,
+        "mission_track_ID": 4,
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20,
+        "heading": 90.0,
+        "health_status": "Warning",
+        "localisation_error": 0,
+        "usbl_fix_seconds_ago": 0,
+        "range_to_go": 124.3,
+        "sensor_config": {
+            "sensor_ID": 22,
+            "serial": "sidescan-2x",    
+            "sensor_on": true,
+            "additional_data": {
+                "whiskers_on": true
+            }      
+        },
+        "current_pitch": -4,
+        "speed_over_ground": 4.3,
+        "thrust_applied": 124.3,
+        "water_current_velocity": 124.3
+    }
+}
diff --git a/examples/ecosub_adapter/mission_plan.json b/examples/ecosub_adapter/mission_plan.json
new file mode 100644
index 0000000000000000000000000000000000000000..83e836a27b1e3fe5f4d8b366cf53fc9e5daafa72
--- /dev/null
+++ b/examples/ecosub_adapter/mission_plan.json
@@ -0,0 +1,54 @@
+{
+  "header": {  
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "ecosub_c2",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "ecosub-2",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "action": "move",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "dive",
+        "flight_style": "dive to depth",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "altitude": 10,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "scanline",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 60.00000000000000,
+        "altitude": 10,
+        "activate_payload": true,
+        "send_environmental_data": false
+      },
+      {
+        "action": "climb",
+        "flight_style": "go to surface",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/ecosub_adapter/observation.json b/examples/ecosub_adapter/observation.json
new file mode 100644
index 0000000000000000000000000000000000000000..8eb0571baaefb70ee0813d8f5054ca1bdf6a724e
--- /dev/null
+++ b/examples/ecosub_adapter/observation.json
@@ -0,0 +1,28 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "ecosub_c2",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "observation",
+        "platform_ID": "ecosub-2",
+        "points_of_interest": [
+            {
+                "latitude": 178.2,
+                "longitude": -10.122,
+                "quality_of_point": 0.98
+            },
+            {
+                "latitude": 50.1382,
+                "longitude": -11.122,
+                "quality_of_point": 0.50
+            }
+        ],
+        "region_surveyed": ""
+    }
+}
\ No newline at end of file
diff --git a/examples/ecosub_adapter/platform_status-from_usbl_example.json b/examples/ecosub_adapter/platform_status-from_usbl_example.json
new file mode 100644
index 0000000000000000000000000000000000000000..6721a35ffe5177d21fa0594dbf5c9d90bf6043bf
--- /dev/null
+++ b/examples/ecosub_adapter/platform_status-from_usbl_example.json
@@ -0,0 +1,21 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "hermes",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-5",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "usbl",
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20
+    }
+}
diff --git a/examples/ecosub_adapter/platform_status.json b/examples/ecosub_adapter/platform_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..b82beba2ed793f2c39fee7dd789ed142e6ce5b57
--- /dev/null
+++ b/examples/ecosub_adapter/platform_status.json
@@ -0,0 +1,44 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "ecosub_c2",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-2",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "onboard_platform",
+        "autonomy_engine_plan_ID": 1,
+        "battery_remaining_capacity": 80.2,
+        "active": true,
+        "platform_state": "ABORT",
+        "mission_action_ID": 1,
+        "mission_track_ID": 4,
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20,
+        "heading": 90.0,
+        "health_status": "Warning",
+        "localisation_error": 0,
+        "usbl_fix_seconds_ago": 0,
+        "range_to_go": 124.3,
+        "sensor_config": {
+            "sensor_ID": 22,
+            "serial": "sidescan-2x",    
+            "sensor_on": true,
+            "additional_data": {
+                "whiskers_on": true
+            }      
+        },
+        "current_pitch": -4,
+        "speed_over_ground": 4.3,
+        "thrust_applied": 124.3,
+        "water_current_velocity": 124.3
+    }
+}
diff --git a/examples/ecosub_adapter/sample_decoded_ecosub_status.txt b/examples/ecosub_adapter/sample_decoded_ecosub_status.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bacf8886dc4225ed6676b7759f9d095b3c3f3797
--- /dev/null
+++ b/examples/ecosub_adapter/sample_decoded_ecosub_status.txt
@@ -0,0 +1,23 @@
+#C2#
+4338
+(4338,)
+11111111111111111000000000000000
+Health : 722
+Content_Mask : 4
+Battery Voltage : 82045
+Battery Amps : 0
+Battery Acc charge : 767
+Battery Max Amps : 548
+Battery Max Voltage : 18
+Inner pressure : 43
+Inner Temp : 4
+Inner Humidity : 0
+Max depth : 0
+Current Pitch : -80
+Max pitch : 0
+Current RPM : 0
+Surface Time : 1636015764
+last GPS Time : 0
+(b'A', 0, 60, 1636016049, 57.33663558959961, -4.444321632385254, 0, 4294934528, 722, 4, 82045, 0, 767, 548, 18, 43, 4, 0, 0, -80, 0, 0, 1636015764, 0)
+['Type', 'Version', 'Sub_Num', 'Time', 'Latitude', 'Longitude', 'Health', 'Content_Mask', 'Battery Voltage', 'Battery Amps', 'Battery Acc charge', 'Battery Max Amps', 'Battery Max Voltage', 'Inner pressure', 'Inner Temp', 'Inner Humidity', 'Max depth', 'Current Pitch', 'Max pitch', 'Current RPM', 'Surface Time', 'last GPS Time']
+(b'A', 0, 60, 1636016049, 57.33663558959961, -4.444321632385254, 0, 4294934528, 722, 4, 82045, 0, 767, 548, 18, 43, 4, 0, 0, -80, 0, 0, 1636015764, 0)
\ No newline at end of file
diff --git a/examples/gui_adapter/planning_configuration.json b/examples/gui_adapter/planning_configuration.json
new file mode 100644
index 0000000000000000000000000000000000000000..0f72c8aac86ca9204dad558fcec2471c88771031
--- /dev/null
+++ b/examples/gui_adapter/planning_configuration.json
@@ -0,0 +1,161 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "ecosub_c2",
+    "destination": "autonomy_engine",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "platform_status",
+    "planning_config_ID": 3,
+    "exclusion_zones": [
+      {
+        "geometry_coordinates": [
+          [
+            [
+              -4.187143188645706,
+              50.37072283932642
+            ],
+            [
+              -4.202697005964865,
+              50.368816892405874
+            ],
+            [
+              -4.203156724702808,
+              50.365640144076906
+            ],
+            [
+              -4.19449868846155,
+              50.362267670845654
+            ]
+          ]
+        ]
+      }
+    ],
+    "squads": [
+      {
+        "squad_ID": 1,
+        "no_of_platforms": 1,
+        "squad_mission_type": "tracking",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "model": "reav",
+            "platform_ID": "reav-60-1",
+            "serial": "reav-60",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {}
+          }
+        ],
+        "region_of_interest": {
+          "geometry_coordinates": [
+            [
+              [
+                -4.187143188645706,
+                50.37072283932642
+              ],
+              [
+                -4.202697005964865,
+                50.368816892405874
+              ],
+              [
+                -4.203156724702808,
+                50.365640144076906
+              ],
+              [
+                -4.19449868846155,
+                50.362267670845654
+              ]
+            ]
+          ]
+        }
+      },
+      {
+        "squad_ID": 2,
+        "no_of_platforms": 3,
+        "squad_mission_type": "survey",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "ecosub-2",
+            "serial": "ecosub-2",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          },
+          {
+            "platform_ID": "ecosub-5",
+            "serial": "ecosub-5",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -0.432,
+              "longitude_waypoint": 20.365,
+              "safe_command": "go_home",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          }
+        ],
+        "region_of_interest": {}
+      },
+      {
+        "squad_ID": 3,
+        "no_of_platforms": 1,
+        "squad_mission_type": "inspection",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "139-ah-1",
+            "serial": "ah-1",
+            "model": "autosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": 20.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "abort_now",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "MBES"
+            }
+          }
+        ],
+        "region_of_interest": {}
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/hydrosurv_adapter/acknowledgement.json b/examples/hydrosurv_adapter/acknowledgement.json
new file mode 100644
index 0000000000000000000000000000000000000000..c5290f54e90ddbad8eadb13c4c4e4d5f6abe6843
--- /dev/null
+++ b/examples/hydrosurv_adapter/acknowledgement.json
@@ -0,0 +1,16 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 1,
+        "source": "hydrosurv_adapter",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "acknowledgement",
+        "acknowledged_message_ID": "11111111-7bc8-11ed-a1eb-0242ac999999",
+        "status": "c2_received"
+    }
+}
\ No newline at end of file
diff --git a/examples/hydrosurv_adapter/mission_plan.json b/examples/hydrosurv_adapter/mission_plan.json
new file mode 100644
index 0000000000000000000000000000000000000000..f5c1c0d92f1577d30320abb4d1e7c6cd8b4de3dc
--- /dev/null
+++ b/examples/hydrosurv_adapter/mission_plan.json
@@ -0,0 +1,30 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "hydrosurv_adapter",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "reav-60-1",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "latitude_waypoint": -4.187143188645706,
+        "longitude_waypoint": 50.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.187143188645706,
+        "longitude_waypoint": 51.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/examples/hydrosurv_adapter/platform_status.json b/examples/hydrosurv_adapter/platform_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..43bac1f1630354a39abc2d5b1adc764d09ca8a5a
--- /dev/null
+++ b/examples/hydrosurv_adapter/platform_status.json
@@ -0,0 +1,30 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "hydrosurv_adapter",
+    "destination": "autonomy_engine",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "platform_status",
+    "autonomy_engine_plan_ID": 1,
+    "active": true,
+    "status_source": "onboard_platform",
+    "battery_remaining_capacity": 80.2,
+    "heading": 310.0,
+    "health_status": "Lost Connection",
+    "latitude": 178.2,
+    "longitude": -10.122,
+    "mission_action_ID": 1,
+    "mission_track_ID": 4,
+    "platform_ID": "reav-60-1",
+    "platform_state": "ABORT",
+    "platform_timestamp": "2022-12-21T00:00:00Z",
+    "speed_over_ground": 4.5,
+    "range_to_go": 0.0,
+    "thrust_applied": 2.3
+  }
+}
\ No newline at end of file
diff --git a/formats/__init__.py b/formats/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7e9b0006c0178a09b011dff9ec343b9b1e6a637
--- /dev/null
+++ b/formats/__init__.py
@@ -0,0 +1,58 @@
+import os
+
+
+__all__ = [
+    os.path.splitext(os.path.basename(x))[0]
+    for x in os.listdir(os.path.dirname(__file__))
+    if x.endswith(".py") and x != "__init__.py"
+]
+
+message_header = {
+    "type": "object",
+    "discriminator": {
+        "propertyName": "message_type",
+    },
+    "properties": {
+        "message_ID": {
+            "type": "string",
+            "description": "An identifier for the type of message received.",
+            "example": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        },
+        "timestamp": {
+            "type": "string",
+            "format": "date-time",
+            "description": "Timestamp of message",
+            "example": "2022-11-16T00:00:00Z",
+        },
+        "version": {
+            "type": "number",
+            "format": "float",
+            "description": "Version of comms backbone message format protocol",
+            "example": 2.0,
+        },
+        "source": {
+            "type": "string",
+            "description": "The sender; Where is this message from",
+            "example": "autonomy_engine",
+        },
+        "destination": {
+            "type": "string",
+            "description": "Publisher topic; What is the destination"
+            + " of this message",
+            "example": "ah1",
+        },
+        "encoded": {
+            "type": "boolean",
+            "description": "Indicate that message raw (encoded) or decoded. "
+            + "Options: encoded=True, decoded=False",
+            "example": False,
+        },
+        "delivery_type": {
+            "type": "string",
+            "description": "To publish or broadcast this message.",
+            "enum": ["broadcast", "publish"],
+            "example": "publish",
+            "default": "publish",
+        },
+    },
+}
diff --git a/formats/acknowledgement.py b/formats/acknowledgement.py
new file mode 100644
index 0000000000000000000000000000000000000000..cd2ce6e2dd11d83a94d8a4ef5d14e59ba04e8ae4
--- /dev/null
+++ b/formats/acknowledgement.py
@@ -0,0 +1,30 @@
+"""
+    schemas: Acknowledgement status sent by the surface platform to report
+    receipt of message.
+"""
+acknowledgement_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "acknowledgement",
+        },
+        "acknowledged_message_ID": {
+            "type": "string",
+            "description": "Identifier of message received and executed with "
+            + "success for mission plans sent by the Autonomy Engine.",
+            "example": "02125022255-7bc8-11ed-a1eb-0242ac999999",
+        },
+        "status": {
+            "type": "string",
+            "enum": ["c2_received", "operator_approved_and_sent", "executed"],
+            "description": "Highest level of acknowledgement. I.e."
+            + " `c2_received`: Received by C2, `operator_approved_and_sent`"
+            + " : Approved by operator and sent from C2->Platform,"
+            + " `executed`: Executed by platform",
+            "example": "executed by platform",
+        },
+    },
+    "required": ["message_type", "acknowledged_message_ID", "status"],
+}
diff --git a/formats/mission_plan.py b/formats/mission_plan.py
new file mode 100644
index 0000000000000000000000000000000000000000..b1c41160ea0d688af67ab54af939ea91c77beb45
--- /dev/null
+++ b/formats/mission_plan.py
@@ -0,0 +1,95 @@
+"""
+    schemas: Mission plan (un-compiled) generated by the Autonomy Engine
+    sent to the respective platform's C2 to compile into a platform-specific
+    mission plan.
+"""
+
+action_schema = {
+    "type": "object",
+    "properties": {
+        "action": {
+            "type": "string",
+            "description": "Autonomy Engine's action from `move`, `payload`,"
+            + " `dive`, `send_hits`, `scanline`, `scanpoint`.",
+            "example": "move",
+        },
+        "flight_style": {
+            "type": "string",
+            "description": "Platform-specific modes/flight styles to perform"
+            + " next action",
+            "example": "orbit",
+        },
+        "latitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "Next waypoint, x-coordinate",
+            "example": -4.187143188645706,
+        },
+        "longitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "Next waypoint, y-coordinate",
+            "example": 50.37072283932642,
+        },
+        "altitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Altitude of next action",
+            "example": 15.0,
+        },
+        "depth": {
+            "type": "number",
+            "format": "float",
+            "description": "Depth of next action",
+            "example": 15.0,
+        },
+        "activate_payload": {
+            "type": "boolean",
+            "description": "To activate/deactivate sensor for Autosub "
+            + "Hover-1 --> `MBES` sensor and for EcoSUB --> `Sidescan`",
+            "example": True,
+        },
+        "send_environmental_data": {
+            "type": "boolean",
+            "description": "To trigger the platform to send list of"
+            + "  observations if any found",
+            "example": False,
+        },
+    },
+    "required": [
+        "latitude_waypoint",
+        "longitude_waypoint",
+    ],
+}
+
+mission_plan_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "mission_plan",
+        },
+        "autonomy_engine_plan_ID": {
+            "type": "integer",
+            "description": "Unique identifier for this plan"
+            + "generated by the Autonomy Engine",
+            "example": 3,
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "plan": {
+            "type": "array",
+            "items": action_schema,
+        },
+    },
+    "required": [
+        "message_type",
+        "autonomy_engine_plan_ID",
+        "platform_ID",
+        "plan",
+    ],
+}
diff --git a/formats/observation.py b/formats/observation.py
new file mode 100644
index 0000000000000000000000000000000000000000..fdf3bb76e2c42c00747cb2ad0c07740990c47396
--- /dev/null
+++ b/formats/observation.py
@@ -0,0 +1,63 @@
+"""
+    schema: Observation Message sent by platforms when points of
+    interest are found.
+"""
+
+hits_schema = {
+    "type": "object",
+    "properties": {
+        "latitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Identified x-coordinate of point of interest",
+            "example": 178.2,
+        },
+        "longitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Identified y-coordinate of point of interest",
+            "example": -10.122,
+        },
+        "quality_of_point": {
+            "type": "number",
+            "format": "float",
+            "description": "Quality/strength of points from features of"
+            + " interest identified by platform.",  # TODO: DEFINE FORMAT.
+            "example": 0.98,
+        },
+    },
+    "required": ["latitude", "longitude"],
+}
+
+observation_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "observation",
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "points_of_interest": {
+            "type": "array",
+            "items": hits_schema,
+            "description": "Points from features of interest identified by"
+            + " platform if any found.",  # TODO: DEFINE FORMAT.
+        },
+        "region_surveyed": {
+            "nullable": True,
+            "description": "Region surveyed by given platform."
+            + " GEOJSON",  # TODO: DEFINE FORMAT.
+            "example": "",
+        },
+        "additional_data": {
+            "description": "Placeholder field for any additional data",
+            "example": {"sensor_payload": False},
+        },
+    },
+    "required": ["message_type", "platform_ID"],
+}
diff --git a/formats/planning_configuration.py b/formats/planning_configuration.py
new file mode 100644
index 0000000000000000000000000000000000000000..11387153486d456f9175a488c8794122a214c21d
--- /dev/null
+++ b/formats/planning_configuration.py
@@ -0,0 +1,185 @@
+"""
+    schemas: configuration sent to Autonomy Engine (i.e. during an emergency,
+    if a platform needs to be removed from the mission planning)
+"""
+
+emergency_schema = {
+    "type": "object",
+    "properties": {
+        "safe_command": {
+            "type": "string",
+            "enum": ["go_home", "abort_now", "stop_mission"],
+            "description": "Command/Action that is native to respective"
+            + " partner's platform/C2",
+            "example": "go_home",
+        },
+        "latitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "X-coordinate safe place for respective platform",
+            "example": -7.432,
+        },
+        "longitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "Y-coordinate safe place for respective platform",
+            "example": 50.365,
+        },
+        "target_depth": {
+            "type": "number",
+            "format": "float",
+            "description": "Z-coordinate safe place for respective platform"
+            + " . If platform to NOT stay at depth, key in `0.0`",
+            "example": 10,
+        },
+        "additional_data": {
+            "description": "Any addition fields/data to be added here",
+            "example": {},
+        },
+    },
+    "required": ["latitude_waypoint", "longitude_waypoint", "target_depth"],
+}
+
+
+platform_schema = {
+    "type": "object",
+    "properties": {
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "serial": {
+            "type": "string",
+            "description": "platform serial number",
+            "example": "reav-60",
+        },
+        "model": {
+            "type": "string",
+            "example": "reav",
+        },
+        "emergency": emergency_schema,
+        "min_altitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Minimum altitude set for squad.",
+            "example": 15.2,
+        },
+        "min_velocity": {
+            "type": "number",
+            "format": "float",
+            "description": "Minimum velocity set for squad.",
+            "example": 0.1,
+        },
+        "max_velocity": {
+            "type": "number",
+            "format": "float",
+            "description": "Maximum altitude set for squad.",
+            "example": 0.9,
+        },
+        "additional_specs": {
+            "description": "Any addition fields/data to be added here",
+            "example": {"swath_width": 10.0, "scan_type": "DVL"},
+        },
+    },
+    "required": [
+        "platform_ID",
+        "serial",
+        "model",
+        "emergency",
+        "min_altitude",
+        "min_velocity",
+        "max_velocity",
+    ],
+}
+
+region_schema = {
+    "type": "object",
+    "properties": {
+        "geometry_coordinates": {
+            "type": "array",  # TODO: Check if config defn is right.
+            "example": [
+                [
+                    [-4.187143188645706, 50.37072283932642],
+                    [-4.202697005964865, 50.368816892405874],
+                    [-4.203156724702808, 50.365640144076906],
+                    [-4.19449868846155, 50.362267670845654],
+                ]
+            ],
+        },
+    },
+    "description": "Using GEOJSON, exact 4-point region (rectangle shaped)",
+}
+
+squad_metadata_schema = {
+    "type": "object",
+    "properties": {
+        "squad_ID": {
+            "type": "integer",
+            "description": "Identifier of given squad",
+            "example": 23,
+        },
+        "no_of_platforms": {
+            "type": "integer",
+            "description": "Number of platforms",
+            "example": 3,
+        },
+        "platforms": {
+            "type": "array",
+            "items": platform_schema,
+            "description": "Squad consists of these platforms",
+        },
+        "squad_mission_type": {
+            "type": "string",
+            "enum": ["tracking", "survey", "inspection"],
+            "description": "Mission of given squad: `tracking`, `survey`"
+            + ", `inspection`",
+            "example": "survey",
+        },
+        "squad_state": {
+            "type": "string",
+            "description": "In execution, Waiting.. <define further>",
+            "example": False,
+        },
+        "region_of_interest": region_schema,
+    },
+    "required": [
+        "squad_ID",
+        "no_of_platforms",
+        "platforms",
+        "squad_mission_type",
+        "squad_state",
+    ],
+}
+
+planning_configuration_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "planning_configuration",
+        },
+        "planning_config_ID": {
+            "type": "integer",
+            "description": "Unique identifier tagged to version of this"
+            + " configuration plan",
+            "example": 3,
+        },
+        "exclusion_zones": {
+            "type": "array",
+            "items": region_schema,
+            "description": "Exclusion zones for all platforms",
+        },
+        "squads": {
+            "type": "array",
+            "items": squad_metadata_schema,
+        },
+    },
+    "required": [
+        "message_type",
+        "planning_config_ID",
+        "squads",
+        "exclusion_zones",
+    ],
+}
diff --git a/formats/platform_status.py b/formats/platform_status.py
new file mode 100644
index 0000000000000000000000000000000000000000..2ef5560ceb8763e5fcd0638d2a7a545a7b3778ad
--- /dev/null
+++ b/formats/platform_status.py
@@ -0,0 +1,180 @@
+"""
+    schema: platform-specific decoded status message
+"""
+
+sensor_schema = {
+    "type": "object",
+    "description": "Scanning sensor on platform available"
+    + " to be controlled by  the Autonomy Engine",
+    "properties": {
+        "sensor_serial": {
+            "type": "string",
+            "description": "serial number of sensor",
+            "example": "mbes-002a",
+        },
+        "sensor_on": {
+            "type": "boolean",
+            "description": "Sensor switched on (True) or off (False)",
+            "example": True,
+        },
+        "additional_data": {
+            "description": "Any addition fields/data to be added here",
+            "example": {"payload": [1.2, 434]},
+        },
+    },
+}
+
+platform_status_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "platform_status",
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "status_source": {
+            "type": "string",
+            "enum": ["usbl", "onboard_platform"],
+            "description": "Indicate if this status message is from the"
+            + " platform or USBL",
+            "example": "usbl",
+        },
+        "transmission_mode": {
+            "type": "string",
+            "enum": ["acoustics", "iridium", "wifi", "starlink"],
+            "description": "Mode in which status message was transmitted"
+            + " when on the surface (e.g. iridium/wifi) or underwater"
+            + " (e.g. acoustics)",
+            "example": "wifi",
+        },
+        "platform_timestamp": {
+            "type": "string",
+            "format": "date-time",
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+        },
+        "platform_state": {
+            "type": "string",
+            "description": "Current state executed by platform. E.g. "
+            + "STOP, IDLE, ABORT.",
+            "example": "ABORT",
+        },  # TODO: Define enum with potential STATES of each platform
+        "autonomy_engine_plan_ID": {
+            "type": "integer",
+            "description": "Last mission plan ID (according to Autonomy"
+            + " Engine's mission plan number sent) executed by platform",
+            "example": 1,
+        },
+        "latitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Latitude in decimal degrees.",
+            "example": 178.2,
+        },
+        "longitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Longitude in decimal degrees.",
+            "example": -10.122,
+        },
+        "depth": {
+            "type": "number",
+            "format": "float",
+            "description": "Target depth in metres",
+            "example": 50,
+            "default": 0,
+        },
+        "altitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Target altitude in metres",
+            "example": 20,
+        },
+        "mission_track_ID": {
+            "type": "integer",
+            "description": "Track number - stage in mission (e.g. "
+            + "4 --> Waypoint 3 to Waypoint 4)",
+            "example": 4,
+        },
+        "mission_action_ID": {
+            "type": "integer",
+            "description": "",  # TODO: Add description
+            "example": 1,
+        },
+        "range_to_go": {
+            "type": "number",
+            "format": "float",
+            "description": "Estimated distance to reach next waypoint",
+            "example": 124.3,
+        },
+        "speed_over_ground": {
+            "type": "number",
+            "format": "float",
+            "description": "",  # TODO: Add description
+            "example": 124.3,
+        },
+        "water_current_velocity": {
+            "type": "number",
+            "format": "float",
+            "description": "",  # TODO: Add description
+            "example": 124.3,
+        },
+        "thrust_applied": {
+            "type": "number",
+            "format": "float",
+            "description": "",  # TODO: Add description
+            "example": 124.3,
+        },
+        "heading": {
+            "type": "number",
+            "format": "float",
+            "description": "Angular distance relative to north, usually 000°"
+            + " at north, clockwise through 359°, in degrees",
+            "example": 124.3,
+        },
+        "health_status": {
+            "type": "string",
+            "description": "Health status extracted by respective platform "
+            + "if any diagnosis is available to check sensors",
+            "example": "Warning",
+        },
+        "localisation_error": {
+            "type": "number",
+            "format": "float",
+            "description": "Localisation error at last USBL update.",
+            "example": 0.000129,
+        },
+        "usbl_fix_seconds_ago": {
+            "type": "number",
+            "format": "float",
+            "description": "USBL Fix received x second ago.",
+            "example": 10.0,
+        },
+        "battery_remaining_capacity": {
+            "type": "number",
+            "format": "float",
+            "description": "Battery remaining % provided by respective C2",
+            "example": 80.2,
+        },
+        "current_pitch": {
+            "type": "number",
+            "format": "float",
+            "description": "Current pitch of platform",
+            "example": -4.0,
+        },
+        "sensor_config": sensor_schema,
+    },
+    "required": [
+        "message_type",
+        "platform_ID",
+        "status_source",
+        "platform_timestamp",
+        "latitude",
+        "longitude",
+    ],
+}
diff --git a/generate_schema_config.py b/generate_schema_config.py
new file mode 100644
index 0000000000000000000000000000000000000000..2c1c8389073f2364f0ce62ecdf7e195a52e4702a
--- /dev/null
+++ b/generate_schema_config.py
@@ -0,0 +1,79 @@
+from formats import message_header
+from formats.mission_plan import mission_plan_schema
+from formats.observation import observation_schema
+from formats.planning_configuration import planning_configuration_schema
+from formats.platform_status import platform_status_schema
+from formats.acknowledgement import acknowledgement_schema
+
+from flasgger import Swagger
+from flask import Flask
+
+app = Flask(__name__)
+
+
+swagger_config = {
+    "openapi": "3.0.2",
+    "swagger_ui": True,
+    "specs_route": "/",
+    "info": {
+        "title": "SoAR Backbone Message Formats",
+        "version": "1.0",
+        "description": "SoAR message protocol in schemas",
+    },
+    "specs": [
+        {
+            "endpoint": "swagger",
+            "route": "/soar_protocol.json",
+        }
+    ],
+    "paths": {},
+    "components": {
+        "schemas": {
+            "MESSAGE": {
+                "type": "object",
+                "description": "Full message definition with"
+                + " message-metadata in `header` and different"
+                + " message type schemas under `payload`",
+                "properties": {
+                    "header": {
+                        "$ref": "#/components/schemas/header",
+                    },
+                    "payload": {"$ref": "#/components/schemas/payload"},
+                },
+                "required": ["header", "payload"],
+            },
+            "payload": {
+                "discriminator": {
+                    "propertyName": "message_type",
+                    "mapping": {
+                        "mission_plan": "#/components/schemas/mission_plan",
+                        "observation": "#/components/schemas/observation",
+                        "planning_configuration": "#/components/schemas/"
+                        + "planning_configuration",
+                        "platform_status": "#/components/schemas/platform_status",
+                        "acknowledgement": "#/components/schemas/acknowledgement",
+                    },
+                },
+                "oneOf": [
+                    {"$ref": "#/components/schemas/acknowledgement"},
+                    {"$ref": "#/components/schemas/mission_plan"},
+                    {"$ref": "#/components/schemas/observation"},
+                    {"$ref": "#/components/schemas/planning_configuration"},
+                    {"$ref": "#/components/schemas/platform_status"},
+                ],
+            },
+            "header": message_header,
+            "mission_plan": mission_plan_schema,
+            "observation": observation_schema,
+            "planning_configuration": planning_configuration_schema,
+            "platform_status": platform_status_schema,
+            "acknowledgement": acknowledgement_schema,
+        }
+    },
+}
+
+swag = Swagger(app, config=swagger_config, merge=True)
+
+
+if __name__ == "__main__":
+    app.run(debug=True)
diff --git a/project/soar/SOAR_README.md b/project/soar/SOAR_README.md
new file mode 100644
index 0000000000000000000000000000000000000000..74338d879e3b23103aa7bf6cf77612d328b540e4
--- /dev/null
+++ b/project/soar/SOAR_README.md
@@ -0,0 +1,51 @@
+# SoAR Project
+Squad of Adaptive Robots Project
+
+-----------------------------------
+## Message Data Flow Summary
+| Partner               | Message Type             | Source                | Destination                                | Via Comms Backbone? | Contains Serialized Vehicle-Specific File? | Comment                                                                                  |
+| --------------------- | ------------------------ | --------------------- | ------------------------------------------ | ------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------- |
+| Hydrosurv (reav)      | platform status-compiled | Reav-60               | Hydrosurv Adapter                          | No                  | Yes                                        | N/A                                                                                      |
+| Hydrosurv (reav)      | platform status          | Hydrosurv Adapter     | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| Hydrosurv (reav)      | mission plan             | Autonomy Engine       | Hydrosurv Adapter                          | Yes                 | No                                         | N/A                                                                                      |
+| Hydrosurv (reav)      | mission plan-compiled    | Hydrosurv Adapter     | Reav-60                                    | No                  | Yes                                        | N/A                                                                                      |
+| Hydrosurv (reav)      | acknowledgement          | Hydrosurv Adapter     | Comms Backbone (Audit)                     | Yes                 | No                                         | When hydrosurv adapter has (a) Received, (b) Sent Plan to Reav, and (c) Executed by Reav |
+| RHU (autonomy engine) | platform status          | C2’s Hydrosurv/Ecosub | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| RHU (autonomy engine) | mission plan             | Autonomy Engine       | C2’s Hydrosurv/Ecosub                      | Yes                 | No                                         | N/A                                                                                      |
+| RHU (autonomy engine) | planning configuration   | GUI                   | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| RHU (autonomy engine) | observation              | Ecosub C2             | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| RHU (autonomy engine) | survey progress          | Ecosub/AH1 C2         | Autonomy Engine                            | TBD                 | TBD                                        | N/A                                                                                      |
+| RHU (autonomy engine) | scanline                 | TBD                   | TBD                                        | TBD                 | TBD                                        | N/A                                                                                      |
+| RHU (autonomy engine) | emergency                | GUI                   | TBD – all                                  | TBD                 | TBD                                        | TBD – all platforms pre-compiled ABORT via Black box                                     |
+| Planet Ocean (ecosub) | platform status-compiled | Ecosub                | Black Box TBC                              | No                  | Yes                                        | Via Hermes + Router                                                                      |
+| Planet Ocean (ecosub) | platform status-compiled | Black Box TBC         | Ecosub C2                                  | Yes                 | Yes                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | platform status          | Ecosub C2             | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| Planet Ocean (ecosub) | mission plan             | Autonomy Engine       | Ecosub C2                                  | Yes                 | No                                         | N/A                                                                                      |
+| Planet Ocean (ecosub) | mission plan             | Ecosub C2             | Black Box TBC                              | Yes                 | Yes                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | mission plan-compiled    | Black Box TBC         | Ecosub                                     | No                  | Yes                                        | Via Hermes + Router                                                                      |
+| Planet Ocean (ecosub) | observation-compiled     | Ecosub                | Black Box TBC                              | No                  | Yes                                        | Via Hermes + Router                                                                      |
+| Planet Ocean (ecosub) | observation-compiled     | Black Box TBC         | Ecosub C2                                  | Yes                 | Yes                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | observation              | Ecosub C2             | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| Planet Ocean (ecosub) | survey progress          | TBD                   | TBD                                        | TBD                 | TBD                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | survey progress          | TBD                   | TBD                                        | TBD                 | TBD                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | scanline                 | TBD                   | TBD                                        | TBD                 | TBD                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | scanline                 | TBD                   | TBD                                        | TBD                 | TBD                                        | N/A                                                                                      |
+| Planet Ocean (ecosub) | emergency                | GUI                   | TBD – Ecosub (ABORT command via Black Box) | TBD                 | TBD                                        | TBD – all platforms pre-compiled ABORT via Black box                                     |
+| NOC (AH1)             | platform status-compiled | AH1                   | Black Box TBC                              | No                  | Yes                                        | Via Hermes + Router                                                                      |
+| NOC (AH1)             | platform status-compiled | Black Box TBC         | NOC C2                                     | Yes                 | Yes                                        | N/A                                                                                      |
+| NOC (AH1)             | platform status          | NOC C2                | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| NOC (AH1)             | scan point               | Autonomy Engine       | NOC C2                                     | Yes                 | No                                         | N/A                                                                                      |
+| NOC (AH1)             | scan point-compiled      | NOC C2                | Black Box TBC                              | Yes                 | Yes                                        | Would this technically be a mission plan-compiled?                                       |
+| NOC (AH1)             | scan point               | Black Box TBC         | Ecosub                                     | No                  | Yes                                        | Via Hermes + Router                                                                      |
+| NOC (AH1)             | survey progress          | TBD                   | TBD                                        | TBD                 | TBD                                        | TBD                                                                                      |
+| NOC (AH1)             | survey progress          | TBD                   | TBD                                        | TBD                 | TBD                                        | TBD                                                                                      |
+| NOC (AH1)             | emergency                | GUI                   | TBD – AH1 (ABORT command via Black Box)    | TBD                 | TBD                                        | TBD – all platforms pre-compiled ABORT via Black box                                     |
+| NOC (GUI)             | planning configuration   | GUI                   | Autonomy Engine                            | Yes                 | No                                         | N/A                                                                                      |
+| NOC (GUI)             | emergency                | GUI                   | TBD                                        | TBD                 | TBD                                        | TBD                                                                                      |
+
+## Run Docs
+1. Run the command below
+```
+python3 generate_swagger.py
+```
+2. Go to `http://127.0.0.1:5000/soardocs/`
diff --git a/project/soar/swagger.json b/project/soar/swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..b60d60b6a76ccf30579f1e989496755f1ed500de
--- /dev/null
+++ b/project/soar/swagger.json
@@ -0,0 +1,681 @@
+{
+  "components": {
+    "schemas": {
+      "MESSAGE": {
+        "description": "Full message definition with message-metadata in `header` and different message type schemas under `payload`",
+        "properties": {
+          "header": {
+            "$ref": "#/components/schemas/header"
+          },
+          "payload": {
+            "$ref": "#/components/schemas/payload"
+          }
+        },
+        "required": [
+          "header",
+          "payload"
+        ],
+        "type": "object"
+      },
+      "acknowledgement": {
+        "properties": {
+          "acknowledged_message_ID": {
+            "description": "Identifier of message received and executed with success for mission plans sent by the Autonomy Engine.",
+            "example": "02125022255-7bc8-11ed-a1eb-0242ac999999",
+            "type": "string"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "acknowledgement",
+            "type": "string"
+          },
+          "status": {
+            "description": "Highest level of acknowledgement. I.e. `c2_received`: Received by C2, `operator_approved_and_sent` : Approved by operator and sent from C2->Platform, `executed`: Executed by platform",
+            "enum": [
+              "c2_received",
+              "operator_approved_and_sent",
+              "executed"
+            ],
+            "example": "executed by platform",
+            "type": "string"
+          }
+        },
+        "required": [
+          "message_type",
+          "acknowledged_message_ID",
+          "status"
+        ],
+        "type": "object"
+      },
+      "header": {
+        "discriminator": {
+          "propertyName": "message_type"
+        },
+        "properties": {
+          "delivery_type": {
+            "default": "publish",
+            "description": "To publish or broadcast this message.",
+            "enum": [
+              "broadcast",
+              "publish"
+            ],
+            "example": "publish",
+            "type": "string"
+          },
+          "destination": {
+            "description": "Publisher topic; What is the destination of this message",
+            "example": "ah1",
+            "type": "string"
+          },
+          "encoded": {
+            "description": "Indicate that message raw (encoded) or decoded. Options: encoded=True, decoded=False",
+            "example": false,
+            "type": "boolean"
+          },
+          "message_ID": {
+            "description": "An identifier for the type of message received.",
+            "example": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+            "type": "string"
+          },
+          "source": {
+            "description": "The sender; Where is this message from",
+            "example": "autonomy_engine",
+            "type": "string"
+          },
+          "timestamp": {
+            "description": "Timestamp of message",
+            "example": "2022-11-16T00:00:00Z",
+            "format": "date-time",
+            "type": "string"
+          },
+          "version": {
+            "description": "Version of comms backbone message format protocol",
+            "example": 2.0,
+            "format": "float",
+            "type": "number"
+          }
+        },
+        "type": "object"
+      },
+      "mission_plan": {
+        "properties": {
+          "autonomy_engine_plan_ID": {
+            "description": "Unique identifier for this plangenerated by the Autonomy Engine",
+            "example": 3,
+            "type": "integer"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "mission_plan",
+            "type": "string"
+          },
+          "plan": {
+            "items": {
+              "properties": {
+                "action": {
+                  "description": "Autonomy Engine's action from `move`, `payload`, `dive`, `send_hits`, `scanline`, `scanpoint`.",
+                  "example": "move",
+                  "type": "string"
+                },
+                "activate_payload": {
+                  "description": "To activate/deactivate sensor for Autosub Hover-1 --> `MBES` sensor and for EcoSUB --> `Sidescan`",
+                  "example": true,
+                  "type": "boolean"
+                },
+                "altitude": {
+                  "description": "Altitude of next action",
+                  "example": 15.0,
+                  "format": "float",
+                  "type": "number"
+                },
+                "depth": {
+                  "description": "Depth of next action",
+                  "example": 15.0,
+                  "format": "float",
+                  "type": "number"
+                },
+                "flight_style": {
+                  "description": "Platform-specific modes/flight styles to perform next action",
+                  "example": "orbit",
+                  "type": "string"
+                },
+                "latitude_waypoint": {
+                  "description": "Next waypoint, x-coordinate",
+                  "example": -4.187143188645706,
+                  "format": "float",
+                  "type": "number"
+                },
+                "longitude_waypoint": {
+                  "description": "Next waypoint, y-coordinate",
+                  "example": 50.37072283932642,
+                  "format": "float",
+                  "type": "number"
+                },
+                "send_environmental_data": {
+                  "description": "To trigger the platform to send list of  observations if any found",
+                  "example": false,
+                  "type": "boolean"
+                }
+              },
+              "required": [
+                "latitude_waypoint",
+                "longitude_waypoint"
+              ],
+              "type": "object"
+            },
+            "type": "array"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          }
+        },
+        "required": [
+          "message_type",
+          "autonomy_engine_plan_ID",
+          "platform_ID",
+          "plan"
+        ],
+        "type": "object"
+      },
+      "observation": {
+        "properties": {
+          "additional_data": {
+            "description": "Placeholder field for any additional data",
+            "example": {
+              "sensor_payload": false
+            }
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "observation",
+            "type": "string"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          },
+          "points_of_interest": {
+            "description": "Points from features of interest identified by platform if any found.",
+            "items": {
+              "properties": {
+                "latitude": {
+                  "description": "Identified x-coordinate of point of interest",
+                  "example": 178.2,
+                  "format": "float",
+                  "type": "number"
+                },
+                "longitude": {
+                  "description": "Identified y-coordinate of point of interest",
+                  "example": -10.122,
+                  "format": "float",
+                  "type": "number"
+                },
+                "quality_of_point": {
+                  "description": "Quality/strength of points from features of interest identified by platform.",
+                  "example": 0.98,
+                  "format": "float",
+                  "type": "number"
+                }
+              },
+              "required": [
+                "latitude",
+                "longitude"
+              ],
+              "type": "object"
+            },
+            "type": "array"
+          },
+          "region_surveyed": {
+            "description": "Region surveyed by given platform. GEOJSON",
+            "example": "",
+            "nullable": true
+          }
+        },
+        "required": [
+          "message_type",
+          "platform_ID"
+        ],
+        "type": "object"
+      },
+      "payload": {
+        "discriminator": {
+          "mapping": {
+            "acknowledgement": "#/components/schemas/acknowledgement",
+            "mission_plan": "#/components/schemas/mission_plan",
+            "observation": "#/components/schemas/observation",
+            "planning_configuration": "#/components/schemas/planning_configuration",
+            "platform_status": "#/components/schemas/platform_status"
+          },
+          "propertyName": "message_type"
+        },
+        "oneOf": [
+          {
+            "$ref": "#/components/schemas/acknowledgement"
+          },
+          {
+            "$ref": "#/components/schemas/mission_plan"
+          },
+          {
+            "$ref": "#/components/schemas/observation"
+          },
+          {
+            "$ref": "#/components/schemas/planning_configuration"
+          },
+          {
+            "$ref": "#/components/schemas/platform_status"
+          }
+        ]
+      },
+      "planning_configuration": {
+        "properties": {
+          "exclusion_zones": {
+            "description": "Exclusion zones for all platforms",
+            "items": {
+              "description": "Using GEOJSON, exact 4-point region (rectangle shaped)",
+              "properties": {
+                "geometry_coordinates": {
+                  "example": [
+                    [
+                      [
+                        -4.187143188645706,
+                        50.37072283932642
+                      ],
+                      [
+                        -4.202697005964865,
+                        50.368816892405874
+                      ],
+                      [
+                        -4.203156724702808,
+                        50.365640144076906
+                      ],
+                      [
+                        -4.19449868846155,
+                        50.362267670845654
+                      ]
+                    ]
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "array"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "planning_configuration",
+            "type": "string"
+          },
+          "planning_config_ID": {
+            "description": "Unique identifier tagged to version of this configuration plan",
+            "example": 3,
+            "type": "integer"
+          },
+          "squads": {
+            "items": {
+              "properties": {
+                "no_of_platforms": {
+                  "description": "Number of platforms",
+                  "example": 3,
+                  "type": "integer"
+                },
+                "platforms": {
+                  "description": "Squad consists of these platforms",
+                  "items": {
+                    "properties": {
+                      "additional_specs": {
+                        "description": "Any addition fields/data to be added here",
+                        "example": {
+                          "scan_type": "DVL",
+                          "swath_width": 10.0
+                        }
+                      },
+                      "emergency": {
+                        "properties": {
+                          "additional_data": {
+                            "description": "Any addition fields/data to be added here",
+                            "example": {}
+                          },
+                          "latitude_waypoint": {
+                            "description": "X-coordinate safe place for respective platform",
+                            "example": -7.432,
+                            "format": "float",
+                            "type": "number"
+                          },
+                          "longitude_waypoint": {
+                            "description": "Y-coordinate safe place for respective platform",
+                            "example": 50.365,
+                            "format": "float",
+                            "type": "number"
+                          },
+                          "safe_command": {
+                            "description": "Command/Action that is native to respective partner's platform/C2",
+                            "enum": [
+                              "go_home",
+                              "abort_now",
+                              "stop_mission"
+                            ],
+                            "example": "go_home",
+                            "type": "string"
+                          },
+                          "target_depth": {
+                            "description": "Z-coordinate safe place for respective platform . If platform to NOT stay at depth, key in `0.0`",
+                            "example": 10,
+                            "format": "float",
+                            "type": "number"
+                          }
+                        },
+                        "required": [
+                          "latitude_waypoint",
+                          "longitude_waypoint",
+                          "target_depth"
+                        ],
+                        "type": "object"
+                      },
+                      "max_velocity": {
+                        "description": "Maximum altitude set for squad.",
+                        "example": 0.9,
+                        "format": "float",
+                        "type": "number"
+                      },
+                      "min_altitude": {
+                        "description": "Minimum altitude set for squad.",
+                        "example": 15.2,
+                        "format": "float",
+                        "type": "number"
+                      },
+                      "min_velocity": {
+                        "description": "Minimum velocity set for squad.",
+                        "example": 0.1,
+                        "format": "float",
+                        "type": "number"
+                      },
+                      "model": {
+                        "example": "reav",
+                        "type": "string"
+                      },
+                      "platform_ID": {
+                        "description": "Unique identifier for this platform",
+                        "example": "reav-x-1",
+                        "type": "string"
+                      },
+                      "serial": {
+                        "description": "platform serial number",
+                        "example": "reav-60",
+                        "type": "string"
+                      }
+                    },
+                    "required": [
+                      "platform_ID",
+                      "serial",
+                      "model",
+                      "emergency",
+                      "min_altitude",
+                      "min_velocity",
+                      "max_velocity"
+                    ],
+                    "type": "object"
+                  },
+                  "type": "array"
+                },
+                "region_of_interest": {
+                  "description": "Using GEOJSON, exact 4-point region (rectangle shaped)",
+                  "properties": {
+                    "geometry_coordinates": {
+                      "example": [
+                        [
+                          [
+                            -4.187143188645706,
+                            50.37072283932642
+                          ],
+                          [
+                            -4.202697005964865,
+                            50.368816892405874
+                          ],
+                          [
+                            -4.203156724702808,
+                            50.365640144076906
+                          ],
+                          [
+                            -4.19449868846155,
+                            50.362267670845654
+                          ]
+                        ]
+                      ],
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "squad_ID": {
+                  "description": "Identifier of given squad",
+                  "example": 23,
+                  "type": "integer"
+                },
+                "squad_mission_type": {
+                  "description": "Mission of given squad: `tracking`, `survey`, `inspection`",
+                  "enum": [
+                    "tracking",
+                    "survey",
+                    "inspection"
+                  ],
+                  "example": "survey",
+                  "type": "string"
+                },
+                "squad_state": {
+                  "description": "In execution, Waiting.. <define further>",
+                  "example": false,
+                  "type": "string"
+                }
+              },
+              "required": [
+                "squad_ID",
+                "no_of_platforms",
+                "platforms",
+                "squad_mission_type",
+                "squad_state"
+              ],
+              "type": "object"
+            },
+            "type": "array"
+          }
+        },
+        "required": [
+          "message_type",
+          "planning_config_ID",
+          "squads",
+          "exclusion_zones"
+        ],
+        "type": "object"
+      },
+      "platform_status": {
+        "properties": {
+          "altitude": {
+            "description": "Target altitude in metres",
+            "example": 20,
+            "format": "float",
+            "type": "number"
+          },
+          "autonomy_engine_plan_ID": {
+            "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform",
+            "example": 1,
+            "type": "integer"
+          },
+          "battery_remaining_capacity": {
+            "description": "Battery remaining % provided by respective C2",
+            "example": 80.2,
+            "format": "float",
+            "type": "number"
+          },
+          "current_pitch": {
+            "description": "Current pitch of platform",
+            "example": -4.0,
+            "format": "float",
+            "type": "number"
+          },
+          "depth": {
+            "default": 0,
+            "description": "Target depth in metres",
+            "example": 50,
+            "format": "float",
+            "type": "number"
+          },
+          "heading": {
+            "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "health_status": {
+            "description": "Health status extracted by respective platform if any diagnosis is available to check sensors",
+            "example": "Warning",
+            "type": "string"
+          },
+          "latitude": {
+            "description": "Latitude in decimal degrees.",
+            "example": 178.2,
+            "format": "float",
+            "type": "number"
+          },
+          "localisation_error": {
+            "description": "Localisation error at last USBL update.",
+            "example": 0.000129,
+            "format": "float",
+            "type": "number"
+          },
+          "longitude": {
+            "description": "Longitude in decimal degrees.",
+            "example": -10.122,
+            "format": "float",
+            "type": "number"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "platform_status",
+            "type": "string"
+          },
+          "mission_action_ID": {
+            "description": "",
+            "example": 1,
+            "type": "integer"
+          },
+          "mission_track_ID": {
+            "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)",
+            "example": 4,
+            "type": "integer"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          },
+          "platform_state": {
+            "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.",
+            "example": "ABORT",
+            "type": "string"
+          },
+          "platform_timestamp": {
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+            "format": "date-time",
+            "type": "string"
+          },
+          "range_to_go": {
+            "description": "Estimated distance to reach next waypoint",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "sensor_config": {
+            "description": "Scanning sensor on platform available to be controlled by  the Autonomy Engine",
+            "properties": {
+              "additional_data": {
+                "description": "Any addition fields/data to be added here",
+                "example": {
+                  "payload": [
+                    1.2,
+                    434
+                  ]
+                }
+              },
+              "sensor_on": {
+                "description": "Sensor switched on (True) or off (False)",
+                "example": true,
+                "type": "boolean"
+              },
+              "sensor_serial": {
+                "description": "serial number of sensor",
+                "example": "mbes-002a",
+                "type": "string"
+              }
+            },
+            "type": "object"
+          },
+          "speed_over_ground": {
+            "description": "",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "status_source": {
+            "description": "Indicate if this status message is from the platform or USBL",
+            "enum": [
+              "usbl",
+              "onboard_platform"
+            ],
+            "example": "usbl",
+            "type": "string"
+          },
+          "thrust_applied": {
+            "description": "",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "transmission_mode": {
+            "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)",
+            "enum": [
+              "acoustics",
+              "iridium",
+              "wifi",
+              "starlink"
+            ],
+            "example": "wifi",
+            "type": "string"
+          },
+          "usbl_fix_seconds_ago": {
+            "description": "USBL Fix received x second ago.",
+            "example": 10.0,
+            "format": "float",
+            "type": "number"
+          },
+          "water_current_velocity": {
+            "description": "",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          }
+        },
+        "required": [
+          "message_type",
+          "platform_ID",
+          "status_source",
+          "platform_timestamp",
+          "latitude",
+          "longitude"
+        ],
+        "type": "object"
+      }
+    }
+  },
+  "info": {
+    "description": "SoAR message protocol in schemas",
+    "title": "SoAR Backbone Message Formats",
+    "version": "1.0"
+  },
+  "openapi": "3.0.2",
+  "paths": {}
+}
\ No newline at end of file
diff --git a/requirements-dev.txt b/requirements-dev.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8ce1c9a8131fd3c84a5a51874d66933b0d85975e
--- /dev/null
+++ b/requirements-dev.txt
@@ -0,0 +1,6 @@
+Flask
+flask-restx
+flasgger
+flask-marshmallow
+openapi-schema-validator==0.4.1
+openapi-spec-validator==0.5.2
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..738135a2f8572fd172cd497f8207ad391d309b78
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+Flask
+flask-restx
+flasgger
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..2253a07952dc605ffa662b625265c4b68b841e53
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,8 @@
+import os
+
+
+__all__ = [
+    os.path.splitext(os.path.basename(x))[0]
+    for x in os.listdir(os.path.dirname(__file__))
+    if x.endswith(".py") and x != "__init__.py"
+]
diff --git a/tests/fixtures/__init__.py b/tests/fixtures/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..2253a07952dc605ffa662b625265c4b68b841e53
--- /dev/null
+++ b/tests/fixtures/__init__.py
@@ -0,0 +1,8 @@
+import os
+
+
+__all__ = [
+    os.path.splitext(os.path.basename(x))[0]
+    for x in os.listdir(os.path.dirname(__file__))
+    if x.endswith(".py") and x != "__init__.py"
+]
diff --git a/tests/fixtures/schemas.py b/tests/fixtures/schemas.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9633d1dc6b845fb322b6ad5ba1363d80f98ba8f
--- /dev/null
+++ b/tests/fixtures/schemas.py
@@ -0,0 +1,586 @@
+message_header = {
+    "type": "object",
+    "discriminator": {
+        "propertyName": "message_type",
+    },
+    "properties": {
+        "message_ID": {
+            "type": "string",
+            "description": "An identifier for the type of message received.",
+            "example": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        },
+        "timestamp": {
+            "type": "string",
+            "format": "date-time",
+            "description": "Timestamp of message",
+            "example": "2022-11-16T00:00:00Z",
+        },
+        "version": {
+            "type": "number",
+            "format": "float",
+            "description": "Version of comms backbone message format protocol",
+            "example": 2.0,
+        },
+        "source": {
+            "type": "string",
+            "description": "The sender; Where is this message from",
+            "example": "autonomy_engine",
+        },
+        "destination": {
+            "type": "string",
+            "description": "Publisher topic; What is the destination"
+            + " of this message",
+            "example": "ah1",
+        },
+        "encoded": {
+            "type": "boolean",
+            "description": "Indicate that message raw (encoded) or decoded. "
+            + "Options: encoded=True, decoded=False",
+            "example": False,
+        },
+        "delivery_type": {
+            "type": "string",
+            "description": "To publish or broadcast this message.",
+            "enum": ["broadcast", "publish"],
+            "example": "publish",
+            "default": "publish",
+        },
+    },
+}
+
+acknowledgement_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "acknowledgement",
+        },
+        "acknowledged_message_ID": {
+            "type": "string",
+            "description": "Identifier of message received and executed with "
+            + "success for mission plans sent by the Autonomy Engine.",
+            "example": "02125022255-7bc8-11ed-a1eb-0242ac999999",
+        },
+        "status": {
+            "type": "string",
+            "enum": ["c2_received", "operator_approved_and_sent", "executed"],
+            "description": "Highest level of acknowledgement. I.e."
+            + " `c2_received`: Received by C2, `operator_approved_and_sent`"
+            + " : Approved by operator and sent from C2->Platform,"
+            + " `executed`: Executed by platform",
+            "example": "executed by platform",
+        },
+    },
+    "required": ["message_type", "acknowledged_message_ID", "status"],
+}
+
+
+action_schema = {
+    "type": "object",
+    "properties": {
+        "action": {
+            "type": "string",
+            "description": "Autonomy Engine's action from `move`, `payload`,"
+            + " `dive`, `send_hits`, `scanline`, `scanpoint`.",
+            "example": "move",
+        },
+        "flight_style": {
+            "type": "string",
+            "description": "Platform-specific modes/flight styles to perform"
+            + " next action",
+            "example": "orbit",
+        },
+        "latitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "Next waypoint, x-coordinate",
+            "example": -4.187143188645706,
+        },
+        "longitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "Next waypoint, y-coordinate",
+            "example": 50.37072283932642,
+        },
+        "altitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Altitude of next action",
+            "example": 15.0,
+        },
+        "depth": {
+            "type": "number",
+            "format": "float",
+            "description": "Depth of next action",
+            "example": 15.0,
+        },
+        "activate_payload": {
+            "type": "boolean",
+            "description": "To activate/deactivate sensor for Autosub "
+            + "Hover-1 --> `MBES` sensor and for EcoSUB --> `Sidescan`",
+            "example": True,
+        },
+        "send_environmental_data": {
+            "type": "boolean",
+            "description": "To trigger the platform to send list of"
+            + "  observations if any found",
+            "example": False,
+        },
+    },
+    "required": [
+        "latitude_waypoint",
+        "longitude_waypoint",
+    ],
+}
+
+mission_plan_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "mission_plan",
+        },
+        "autonomy_engine_plan_ID": {
+            "type": "integer",
+            "description": "Unique identifier for this plan"
+            + "generated by the Autonomy Engine",
+            "example": 3,
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "plan": {
+            "type": "array",
+            "items": action_schema,
+        },
+    },
+    "required": [
+        "message_type",
+        "autonomy_engine_plan_ID",
+        "platform_ID",
+        "plan",
+    ],
+}
+
+
+hits_schema = {
+    "type": "object",
+    "properties": {
+        "latitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Identified x-coordinate of point of interest",
+            "example": 178.2,
+        },
+        "longitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Identified y-coordinate of point of interest",
+            "example": -10.122,
+        },
+        "quality_of_point": {
+            "type": "number",
+            "format": "float",
+            "description": "Quality/strength of points from features of"
+            + " interest identified by platform.",  # TODO: DEFINE FORMAT.
+            "example": 0.98,
+        },
+    },
+    "required": ["latitude", "longitude"],
+}
+
+observation_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "observation",
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "points_of_interest": {
+            "type": "array",
+            "items": hits_schema,
+            "description": "Points from features of interest identified by"
+            + " platform if any found.",  # TODO: DEFINE FORMAT.
+        },
+        "region_surveyed": {
+            "nullable": True,
+            "description": "Region surveyed by given platform."
+            + " GEOJSON",  # TODO: DEFINE FORMAT.
+            "example": "",
+        },
+        "additional_data": {
+            "description": "Placeholder field for any additional data",
+            "example": {"sensor_payload": False},
+        },
+    },
+    "required": ["message_type", "platform_ID"],
+}
+
+emergency_schema = {
+    "type": "object",
+    "properties": {
+        "safe_command": {
+            "type": "string",
+            "enum": ["go_home", "abort_now", "stop_mission"],
+            "description": "Command/Action that is native to respective"
+            + " partner's platform/C2",
+            "example": "go_home",
+        },
+        "latitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "X-coordinate safe place for respective platform",
+            "example": -7.432,
+        },
+        "longitude_waypoint": {
+            "type": "number",
+            "format": "float",
+            "description": "Y-coordinate safe place for respective platform",
+            "example": 50.365,
+        },
+        "target_depth": {
+            "type": "number",
+            "format": "float",
+            "description": "Z-coordinate safe place for respective platform"
+            + " . If platform to NOT stay at depth, key in `0.0`",
+            "example": 10,
+        },
+        "additional_data": {
+            "description": "Any addition fields/data to be added here",
+            "example": {},
+        },
+    },
+    "required": ["latitude_waypoint", "longitude_waypoint", "target_depth"],
+}
+
+
+platform_schema = {
+    "type": "object",
+    "properties": {
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "serial": {
+            "type": "string",
+            "description": "platform serial number",
+            "example": "reav-60",
+        },
+        "model": {
+            "type": "string",
+            "example": "reav",
+        },
+        "emergency": emergency_schema,
+        "min_altitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Minimum altitude set for squad.",
+            "example": 15.2,
+        },
+        "min_velocity": {
+            "type": "number",
+            "format": "float",
+            "description": "Minimum velocity set for squad.",
+            "example": 0.1,
+        },
+        "max_velocity": {
+            "type": "number",
+            "format": "float",
+            "description": "Maximum altitude set for squad.",
+            "example": 0.9,
+        },
+        "additional_specs": {
+            "description": "Any addition fields/data to be added here",
+            "example": {"swath_width": 10.0, "scan_type": "DVL"},
+        },
+    },
+    "required": [
+        "platform_ID",
+        "serial",
+        "model",
+        "emergency",
+        "min_altitude",
+        "min_velocity",
+        "max_velocity",
+    ],
+}
+
+region_schema = {
+    "type": "object",
+    "properties": {
+        "geometry_coordinates": {
+            "type": "array",  # TODO: Check if config defn is right.
+            "example": [
+                [
+                    [-4.187143188645706, 50.37072283932642],
+                    [-4.202697005964865, 50.368816892405874],
+                    [-4.203156724702808, 50.365640144076906],
+                    [-4.19449868846155, 50.362267670845654],
+                ]
+            ],
+        },
+    },
+    "description": "Using GEOJSON, exact 4-point region (rectangle shaped)",
+}
+
+squad_metadata_schema = {
+    "type": "object",
+    "properties": {
+        "squad_ID": {
+            "type": "integer",
+            "description": "Identifier of given squad",
+            "example": 23,
+        },
+        "no_of_platforms": {
+            "type": "integer",
+            "description": "Number of platforms",
+            "example": 3,
+        },
+        "platforms": {
+            "type": "array",
+            "items": platform_schema,
+            "description": "Squad consists of these platforms",
+        },
+        "squad_mission_type": {
+            "type": "string",
+            "enum": ["tracking", "survey", "inspection"],
+            "description": "Mission of given squad: `tracking`, `survey`"
+            + ", `inspection`",
+            "example": "survey",
+        },
+        "squad_state": {
+            "type": "string",
+            "description": "In execution, Waiting.. <define further>",
+            "example": False,
+        },
+        "region_of_interest": region_schema,
+    },
+    "required": [
+        "squad_ID",
+        "no_of_platforms",
+        "platforms",
+        "squad_mission_type",
+        "squad_state",
+    ],
+}
+
+planning_configuration_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "planning_configuration",
+        },
+        "planning_config_ID": {
+            "type": "integer",
+            "description": "Unique identifier tagged to version of this"
+            + " configuration plan",
+            "example": 3,
+        },
+        "exclusion_zones": {
+            "type": "array",
+            "items": region_schema,
+            "description": "Exclusion zones for all platforms",
+        },
+        "squads": {
+            "type": "array",
+            "items": squad_metadata_schema,
+        },
+    },
+    "required": [
+        "message_type",
+        "planning_config_ID",
+        "squads",
+        "exclusion_zones",
+    ],
+}
+
+
+sensor_schema = {
+    "type": "object",
+    "description": "Scanning sensor on platform available"
+    + " to be controlled by  the Autonomy Engine",
+    "properties": {
+        "sensor_serial": {
+            "type": "string",
+            "description": "serial number of sensor",
+            "example": "mbes-002a",
+        },
+        "sensor_on": {
+            "type": "boolean",
+            "description": "Sensor switched on (True) or off (False)",
+            "example": True,
+        },
+        "additional_data": {
+            "description": "Any addition fields/data to be added here",
+            "example": {"payload": [1.2, 434]},
+        },
+    },
+}
+
+platform_status_schema = {
+    "type": "object",
+    "properties": {
+        "message_type": {
+            "type": "string",
+            "description": "Type of message",
+            "example": "platform_status",
+        },
+        "platform_ID": {
+            "type": "string",
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+        },
+        "status_source": {
+            "type": "string",
+            "enum": ["usbl", "onboard_platform"],
+            "description": "Indicate if this status message is from the"
+            + " platform or USBL",
+            "example": "usbl",
+        },
+        "transmission_mode": {
+            "type": "string",
+            "enum": ["acoustics", "iridium", "wifi", "starlink"],
+            "description": "Mode in which status message was transmitted"
+            + " when on the surface (e.g. iridium/wifi) or underwater"
+            + " (e.g. acoustics)",
+            "example": "wifi",
+        },
+        "platform_timestamp": {
+            "type": "string",
+            "format": "date-time",
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+        },
+        "platform_state": {
+            "type": "string",
+            "description": "Current state executed by platform. E.g. "
+            + "STOP, IDLE, ABORT.",
+            "example": "ABORT",
+        },
+        "autonomy_engine_plan_ID": {
+            "type": "integer",
+            "description": "Last mission plan ID (according to Autonomy"
+            + " Engine's mission plan number sent) executed by platform",
+            "example": 1,
+        },
+        "latitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Latitude in decimal degrees.",
+            "example": 178.2,
+        },
+        "longitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Longitude in decimal degrees.",
+            "example": -10.122,
+        },
+        "depth": {
+            "type": "number",
+            "format": "float",
+            "description": "Target depth in metres",
+            "example": 50,
+            "default": 0,
+        },
+        "altitude": {
+            "type": "number",
+            "format": "float",
+            "description": "Target altitude in metres",
+            "example": 20,
+        },
+        "mission_track_ID": {
+            "type": "integer",
+            "description": "Track number - stage in mission (e.g. "
+            + "4 --> Waypoint 3 to Waypoint 4)",
+            "example": 4,
+        },
+        "mission_action_ID": {
+            "type": "integer",
+            "description": "",  # TODO: Add description
+            "example": 1,
+        },
+        "range_to_go": {
+            "type": "number",
+            "format": "float",
+            "description": "Estimated distance to reach next waypoint",
+            "example": 124.3,
+        },
+        "speed_over_ground": {
+            "type": "number",
+            "format": "float",
+            "description": "",  # TODO: Add description
+            "example": 124.3,
+        },
+        "water_current_velocity": {
+            "type": "number",
+            "format": "float",
+            "description": "",  # TODO: Add description
+            "example": 124.3,
+        },
+        "thrust_applied": {
+            "type": "number",
+            "format": "float",
+            "description": "",  # TODO: Add description
+            "example": 124.3,
+        },
+        "heading": {
+            "type": "number",
+            "format": "float",
+            "description": "Angular distance relative to north, usually 000°"
+            + " at north, clockwise through 359°, in degrees",
+            "example": 124.3,
+        },
+        "health_status": {
+            "type": "string",
+            "description": "Health status extracted by respective platform "
+            + "if any diagnosis is available to check sensors",
+            "example": "Warning",
+        },
+        "localisation_error": {
+            "type": "number",
+            "format": "float",
+            "description": "Localisation error at last USBL update.",
+            "example": 0.000129,
+        },
+        "usbl_fix_seconds_ago": {
+            "type": "number",
+            "format": "float",
+            "description": "USBL Fix received x second ago.",
+            "example": 10.0,
+        },
+        "battery_remaining_capacity": {
+            "type": "number",
+            "format": "float",
+            "description": "Battery remaining % provided by respective C2",
+            "example": 80.2,
+        },
+        "current_pitch": {
+            "type": "number",
+            "format": "float",
+            "description": "Current pitch of platform",
+            "example": -4.0,
+        },
+        "sensor_config": sensor_schema,
+    },
+    "required": [
+        "message_type",
+        "platform_ID",
+        "status_source",
+        "platform_timestamp",
+        "latitude",
+        "longitude",
+    ],
+}
diff --git a/tests/fixtures/swagger.json b/tests/fixtures/swagger.json
new file mode 100644
index 0000000000000000000000000000000000000000..31d4c95d9eed95ae9ce8036a37862c7ac0c9caae
--- /dev/null
+++ b/tests/fixtures/swagger.json
@@ -0,0 +1,680 @@
+{
+  "components": {
+    "schemas": {
+      "MESSAGE": {
+        "description": "Full message definition with message-metadata in `header` and different message type schemas under `payload`",
+        "properties": {
+          "header": {
+            "$ref": "#/components/schemas/header"
+          },
+          "payload": {
+            "$ref": "#/components/schemas/payload"
+          }
+        },
+        "required": [
+          "header",
+          "payload"
+        ],
+        "type": "object"
+      },
+      "acknowledgement": {
+        "properties": {
+          "acknowledged_message_ID": {
+            "description": "Identifier of message received and executed with success for mission plans sent by the Autonomy Engine.",
+            "example": "02125022255-7bc8-11ed-a1eb-0242ac999999",
+            "type": "string"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "acknowledgement",
+            "type": "string"
+          },
+          "status": {
+            "description": "Highest level of acknowledgement. I.e. `c2_received`: Received by C2, `operator_approved_and_sent` : Approved by operator and sent from C2->Platform, `executed`: Executed by platform",
+            "enum": [
+              "c2_received",
+              "operator_approved_and_sent",
+              "executed"
+            ],
+            "example": "executed by platform",
+            "type": "string"
+          }
+        },
+        "required": [
+          "message_type",
+          "acknowledged_message_ID",
+          "status"
+        ],
+        "type": "object"
+      },
+      "header": {
+        "discriminator": {
+          "propertyName": "message_type"
+        },
+        "properties": {
+          "delivery_type": {
+            "default": "publish",
+            "description": "To publish or broadcast this message.",
+            "enum": [
+              "broadcast",
+              "publish"
+            ],
+            "example": "publish",
+            "type": "string"
+          },
+          "destination": {
+            "description": "Publisher topic; What is the destination of this message",
+            "example": "ah1",
+            "type": "string"
+          },
+          "encoded": {
+            "description": "Indicate that message raw (encoded) or decoded. Options: encoded=True, decoded=False",
+            "example": false,
+            "type": "boolean"
+          },
+          "message_ID": {
+            "description": "An identifier for the type of message received.",
+            "example": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+            "type": "string"
+          },
+          "source": {
+            "description": "The sender; Where is this message from",
+            "example": "autonomy_engine",
+            "type": "string"
+          },
+          "timestamp": {
+            "description": "Timestamp of message",
+            "example": "2022-11-16T00:00:00Z",
+            "format": "date-time",
+            "type": "string"
+          },
+          "version": {
+            "description": "Version of comms backbone message format protocol",
+            "example": 2.0,
+            "format": "float",
+            "type": "number"
+          }
+        },
+        "type": "object"
+      },
+      "mission_plan": {
+        "properties": {
+          "autonomy_engine_plan_ID": {
+            "description": "Unique identifier for this plangenerated by the Autonomy Engine",
+            "example": 3,
+            "type": "integer"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "mission_plan",
+            "type": "string"
+          },
+          "plan": {
+            "items": {
+              "properties": {
+                "action": {
+                  "description": "Autonomy Engine's action from `move`, `payload`, `dive`, `send_hits`, `scanline`, `scanpoint`.",
+                  "example": "move",
+                  "type": "string"
+                },
+                "activate_payload": {
+                  "description": "To activate/deactivate sensor for Autosub Hover-1 --> `MBES` sensor and for EcoSUB --> `Sidescan`",
+                  "example": true,
+                  "type": "boolean"
+                },
+                "altitude": {
+                  "description": "Altitude of next action",
+                  "example": 15.0,
+                  "format": "float",
+                  "type": "number"
+                },
+                "depth": {
+                  "description": "Depth of next action",
+                  "example": 15.0,
+                  "format": "float",
+                  "type": "number"
+                },
+                "flight_style": {
+                  "description": "Platform-specific modes/flight styles to perform next action",
+                  "example": "orbit",
+                  "type": "string"
+                },
+                "latitude_waypoint": {
+                  "description": "Next waypoint, x-coordinate",
+                  "example": -4.187143188645706,
+                  "format": "float",
+                  "type": "number"
+                },
+                "longitude_waypoint": {
+                  "description": "Next waypoint, y-coordinate",
+                  "example": 50.37072283932642,
+                  "format": "float",
+                  "type": "number"
+                },
+                "send_environmental_data": {
+                  "description": "To trigger the platform to send list of  observations if any found",
+                  "example": false,
+                  "type": "boolean"
+                }
+              },
+              "required": [
+                "latitude_waypoint",
+                "longitude_waypoint"
+              ],
+              "type": "object"
+            },
+            "type": "array"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          }
+        },
+        "required": [
+          "message_type",
+          "autonomy_engine_plan_ID",
+          "platform_ID",
+          "plan"
+        ],
+        "type": "object"
+      },
+      "observation": {
+        "properties": {
+          "additional_data": {
+            "description": "Placeholder field for any additional data",
+            "example": {
+              "sensor_payload": false
+            }
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "observation",
+            "type": "string"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          },
+          "points_of_interest": {
+            "description": "Points from features of interest identified by platform if any found.",
+            "items": {
+              "properties": {
+                "latitude": {
+                  "description": "Identified x-coordinate of point of interest",
+                  "example": 178.2,
+                  "format": "float",
+                  "type": "number"
+                },
+                "longitude": {
+                  "description": "Identified y-coordinate of point of interest",
+                  "example": -10.122,
+                  "format": "float",
+                  "type": "number"
+                },
+                "quality_of_point": {
+                  "description": "Quality/strength of points from features of interest identified by platform.",
+                  "example": 0.98,
+                  "format": "float",
+                  "type": "number"
+                }
+              },
+              "required": [
+                "latitude",
+                "longitude"
+              ],
+              "type": "object"
+            },
+            "type": "array"
+          },
+          "region_surveyed": {
+            "description": "Region surveyed by given platform. GEOJSON",
+            "example": ""
+          }
+        },
+        "required": [
+          "message_type",
+          "platform_ID"
+        ],
+        "type": "object"
+      },
+      "payload": {
+        "discriminator": {
+          "mapping": {
+            "acknowledgement": "#/components/schemas/acknowledgement",
+            "mission_plan": "#/components/schemas/mission_plan",
+            "observation": "#/components/schemas/observation",
+            "planning_configuration": "#/components/schemas/planning_configuration",
+            "platform_status": "#/components/schemas/platform_status"
+          },
+          "propertyName": "message_type"
+        },
+        "oneOf": [
+          {
+            "$ref": "#/components/schemas/acknowledgement"
+          },
+          {
+            "$ref": "#/components/schemas/mission_plan"
+          },
+          {
+            "$ref": "#/components/schemas/observation"
+          },
+          {
+            "$ref": "#/components/schemas/planning_configuration"
+          },
+          {
+            "$ref": "#/components/schemas/platform_status"
+          }
+        ]
+      },
+      "planning_configuration": {
+        "properties": {
+          "exclusion_zones": {
+            "description": "Exclusion zones for all platforms",
+            "items": {
+              "description": "Using GEOJSON, exact 4-point region (rectangle shaped)",
+              "properties": {
+                "geometry_coordinates": {
+                  "example": [
+                    [
+                      [
+                        -4.187143188645706,
+                        50.37072283932642
+                      ],
+                      [
+                        -4.202697005964865,
+                        50.368816892405874
+                      ],
+                      [
+                        -4.203156724702808,
+                        50.365640144076906
+                      ],
+                      [
+                        -4.19449868846155,
+                        50.362267670845654
+                      ]
+                    ]
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "array"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "planning_configuration",
+            "type": "string"
+          },
+          "planning_config_ID": {
+            "description": "Unique identifier tagged to version of this configuration plan",
+            "example": 3,
+            "type": "integer"
+          },
+          "squads": {
+            "items": {
+              "properties": {
+                "no_of_platforms": {
+                  "description": "Number of platforms",
+                  "example": 3,
+                  "type": "integer"
+                },
+                "platforms": {
+                  "description": "Squad consists of these platforms",
+                  "items": {
+                    "properties": {
+                      "additional_specs": {
+                        "description": "Any addition fields/data to be added here",
+                        "example": {
+                          "scan_type": "DVL",
+                          "swath_width": 10.0
+                        }
+                      },
+                      "emergency": {
+                        "properties": {
+                          "additional_data": {
+                            "description": "Any addition fields/data to be added here",
+                            "example": {}
+                          },
+                          "latitude_waypoint": {
+                            "description": "X-coordinate safe place for respective platform",
+                            "example": -7.432,
+                            "format": "float",
+                            "type": "number"
+                          },
+                          "longitude_waypoint": {
+                            "description": "Y-coordinate safe place for respective platform",
+                            "example": 50.365,
+                            "format": "float",
+                            "type": "number"
+                          },
+                          "safe_command": {
+                            "description": "Command/Action that is native to respective partner's platform/C2",
+                            "enum": [
+                              "go_home",
+                              "abort_now",
+                              "stop_mission"
+                            ],
+                            "example": "go_home",
+                            "type": "string"
+                          },
+                          "target_depth": {
+                            "description": "Z-coordinate safe place for respective platform . If platform to NOT stay at depth, key in `0.0`",
+                            "example": 10,
+                            "format": "float",
+                            "type": "number"
+                          }
+                        },
+                        "required": [
+                          "latitude_waypoint",
+                          "longitude_waypoint",
+                          "target_depth"
+                        ],
+                        "type": "object"
+                      },
+                      "max_velocity": {
+                        "description": "Maximum altitude set for squad.",
+                        "example": 0.9,
+                        "format": "float",
+                        "type": "number"
+                      },
+                      "min_altitude": {
+                        "description": "Minimum altitude set for squad.",
+                        "example": 15.2,
+                        "format": "float",
+                        "type": "number"
+                      },
+                      "min_velocity": {
+                        "description": "Minimum velocity set for squad.",
+                        "example": 0.1,
+                        "format": "float",
+                        "type": "number"
+                      },
+                      "model": {
+                        "example": "reav",
+                        "type": "string"
+                      },
+                      "platform_ID": {
+                        "description": "Unique identifier for this platform",
+                        "example": "reav-x-1",
+                        "type": "string"
+                      },
+                      "serial": {
+                        "description": "platform serial number",
+                        "example": "reav-60",
+                        "type": "string"
+                      }
+                    },
+                    "required": [
+                      "platform_ID",
+                      "serial",
+                      "model",
+                      "emergency",
+                      "min_altitude",
+                      "min_velocity",
+                      "max_velocity"
+                    ],
+                    "type": "object"
+                  },
+                  "type": "array"
+                },
+                "region_of_interest": {
+                  "description": "Using GEOJSON, exact 4-point region (rectangle shaped)",
+                  "properties": {
+                    "geometry_coordinates": {
+                      "example": [
+                        [
+                          [
+                            -4.187143188645706,
+                            50.37072283932642
+                          ],
+                          [
+                            -4.202697005964865,
+                            50.368816892405874
+                          ],
+                          [
+                            -4.203156724702808,
+                            50.365640144076906
+                          ],
+                          [
+                            -4.19449868846155,
+                            50.362267670845654
+                          ]
+                        ]
+                      ],
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "squad_ID": {
+                  "description": "Identifier of given squad",
+                  "example": 23,
+                  "type": "integer"
+                },
+                "squad_mission_type": {
+                  "description": "Mission of given squad: `tracking`, `survey`, `inspection`",
+                  "enum": [
+                    "tracking",
+                    "survey",
+                    "inspection"
+                  ],
+                  "example": "survey",
+                  "type": "string"
+                },
+                "squad_state": {
+                  "description": "In execution, Waiting.. <define further>",
+                  "example": false,
+                  "type": "string"
+                }
+              },
+              "required": [
+                "squad_ID",
+                "no_of_platforms",
+                "platforms",
+                "squad_mission_type",
+                "squad_state"
+              ],
+              "type": "object"
+            },
+            "type": "array"
+          }
+        },
+        "required": [
+          "message_type",
+          "planning_config_ID",
+          "squads",
+          "exclusion_zones"
+        ],
+        "type": "object"
+      },
+      "platform_status": {
+        "properties": {
+          "altitude": {
+            "description": "Target altitude in metres",
+            "example": 20,
+            "format": "float",
+            "type": "number"
+          },
+          "autonomy_engine_plan_ID": {
+            "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform",
+            "example": 1,
+            "type": "integer"
+          },
+          "battery_remaining_capacity": {
+            "description": "Battery remaining % provided by respective C2",
+            "example": 80.2,
+            "format": "float",
+            "type": "number"
+          },
+          "current_pitch": {
+            "description": "Current pitch of platform",
+            "example": -4.0,
+            "format": "float",
+            "type": "number"
+          },
+          "depth": {
+            "default": 0,
+            "description": "Target depth in metres",
+            "example": 50,
+            "format": "float",
+            "type": "number"
+          },
+          "heading": {
+            "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "health_status": {
+            "description": "Health status extracted by respective platform if any diagnosis is available to check sensors",
+            "example": "Warning",
+            "type": "string"
+          },
+          "latitude": {
+            "description": "Latitude in decimal degrees.",
+            "example": 178.2,
+            "format": "float",
+            "type": "number"
+          },
+          "localisation_error": {
+            "description": "Localisation error at last USBL update.",
+            "example": 0.000129,
+            "format": "float",
+            "type": "number"
+          },
+          "longitude": {
+            "description": "Longitude in decimal degrees.",
+            "example": -10.122,
+            "format": "float",
+            "type": "number"
+          },
+          "message_type": {
+            "description": "Type of message",
+            "example": "platform_status",
+            "type": "string"
+          },
+          "mission_action_ID": {
+            "description": "",
+            "example": 1,
+            "type": "integer"
+          },
+          "mission_track_ID": {
+            "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)",
+            "example": 4,
+            "type": "integer"
+          },
+          "platform_ID": {
+            "description": "Unique identifier for this platform",
+            "example": "reav-x-1",
+            "type": "string"
+          },
+          "platform_state": {
+            "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.",
+            "example": "ABORT",
+            "type": "string"
+          },
+          "platform_timestamp": {
+            "description": "Timestamp for onboard platform status message",
+            "example": "2022-12-21T00:00:00Z",
+            "format": "date-time",
+            "type": "string"
+          },
+          "range_to_go": {
+            "description": "Estimated distance to reach next waypoint",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "sensor_config": {
+            "description": "Scanning sensor on platform available to be controlled by  the Autonomy Engine",
+            "properties": {
+              "additional_data": {
+                "description": "Any addition fields/data to be added here",
+                "example": {
+                  "payload": [
+                    1.2,
+                    434
+                  ]
+                }
+              },
+              "sensor_on": {
+                "description": "Sensor switched on (True) or off (False)",
+                "example": true,
+                "type": "boolean"
+              },
+              "sensor_serial": {
+                "description": "serial number of sensor",
+                "example": "mbes-002a",
+                "type": "string"
+              }
+            },
+            "type": "object"
+          },
+          "speed_over_ground": {
+            "description": "",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "status_source": {
+            "description": "Indicate if this status message is from the platform or USBL",
+            "enum": [
+              "usbl",
+              "onboard_platform"
+            ],
+            "example": "usbl",
+            "type": "string"
+          },
+          "thrust_applied": {
+            "description": "",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          },
+          "transmission_mode": {
+            "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)",
+            "enum": [
+              "acoustics",
+              "iridium",
+              "wifi",
+              "starlink"
+            ],
+            "example": "wifi",
+            "type": "string"
+          },
+          "usbl_fix_seconds_ago": {
+            "description": "USBL Fix received x second ago.",
+            "example": 10.0,
+            "format": "float",
+            "type": "number"
+          },
+          "water_current_velocity": {
+            "description": "",
+            "example": 124.3,
+            "format": "float",
+            "type": "number"
+          }
+        },
+        "required": [
+          "message_type",
+          "platform_ID",
+          "status_source",
+          "platform_timestamp",
+          "latitude",
+          "longitude"
+        ],
+        "type": "object"
+      }
+    }
+  },
+  "info": {
+    "description": "SoAR message protocol in schemas",
+    "title": "SoAR Backbone Message Formats",
+    "version": "1.0"
+  },
+  "openapi": "3.0.2",
+  "paths": {}
+}
\ No newline at end of file
diff --git a/tests/mock_data/autonomy_engine_adapter/acknowledgement.json b/tests/mock_data/autonomy_engine_adapter/acknowledgement.json
new file mode 100644
index 0000000000000000000000000000000000000000..c5290f54e90ddbad8eadb13c4c4e4d5f6abe6843
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/acknowledgement.json
@@ -0,0 +1,16 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 1,
+        "source": "hydrosurv_adapter",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "acknowledgement",
+        "acknowledged_message_ID": "11111111-7bc8-11ed-a1eb-0242ac999999",
+        "status": "c2_received"
+    }
+}
\ No newline at end of file
diff --git a/tests/mock_data/autonomy_engine_adapter/mission_plan_AH1.json b/tests/mock_data/autonomy_engine_adapter/mission_plan_AH1.json
new file mode 100644
index 0000000000000000000000000000000000000000..6dfe1a1a1d0bd895e6e0a23e3e2bb357b4e2b73d
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/mission_plan_AH1.json
@@ -0,0 +1,54 @@
+{
+  "header": {  
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "noc_c2",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "5-ah1",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "action": "move",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "dive",
+        "flight_style": "dive to depth",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "altitude": 10,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "scanline",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 60.00000000000000,
+        "altitude": 10,
+        "activate_payload": true,
+        "send_environmental_data": false
+      },
+      {
+        "action": "climb",
+        "flight_style": "go to surface",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/autonomy_engine_adapter/mission_plan_ECOSUB.json b/tests/mock_data/autonomy_engine_adapter/mission_plan_ECOSUB.json
new file mode 100644
index 0000000000000000000000000000000000000000..d7fd238976ca6d4c93dbf00e808aa29891317076
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/mission_plan_ECOSUB.json
@@ -0,0 +1,54 @@
+{
+  "header": {  
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "ecosub_c2",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "ecosub-5",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "action": "move",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "dive",
+        "flight_style": "dive to depth",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "altitude": 10,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "scanline",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 60.00000000000000,
+        "altitude": 10,
+        "activate_payload": true,
+        "send_environmental_data": false
+      },
+      {
+        "action": "climb",
+        "flight_style": "go to surface",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0,
+        "activate_payload": false,
+        "send_environmental_data": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/autonomy_engine_adapter/mission_plan_HYDROSURV.json b/tests/mock_data/autonomy_engine_adapter/mission_plan_HYDROSURV.json
new file mode 100644
index 0000000000000000000000000000000000000000..f5c1c0d92f1577d30320abb4d1e7c6cd8b4de3dc
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/mission_plan_HYDROSURV.json
@@ -0,0 +1,30 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "hydrosurv_adapter",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "reav-60-1",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "latitude_waypoint": -4.187143188645706,
+        "longitude_waypoint": 50.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.187143188645706,
+        "longitude_waypoint": 51.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/autonomy_engine_adapter/planning_configuration.json b/tests/mock_data/autonomy_engine_adapter/planning_configuration.json
new file mode 100644
index 0000000000000000000000000000000000000000..f1191837bb12e4493bb9a534097e49500c39b014
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/planning_configuration.json
@@ -0,0 +1,161 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "ecosub_c2",
+    "destination": "autonomy_engine",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "platform_status",
+    "planning_config_ID": 3,
+    "exclusion_zones": [
+      {
+        "geometry_coordinates": [
+          [
+            [
+              -4.187143188645706,
+              50.37072283932642
+            ],
+            [
+              -4.202697005964865,
+              50.368816892405874
+            ],
+            [
+              -4.203156724702808,
+              50.365640144076906
+            ],
+            [
+              -4.19449868846155,
+              50.362267670845654
+            ]
+          ]
+        ]
+      }
+    ],
+    "squads": [
+      {
+        "squad_ID": 1,
+        "no_of_platforms": 1,
+        "squad_mission_type": "tracking",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "model": "reav",
+            "platform_ID": "reav-60-1",
+            "serial": "reav-60",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {}
+          }
+        ],
+        "region_of_interest": {
+          "geometry_coordinates": [
+            [
+              [
+                -4.187143188645706,
+                50.37072283932642
+              ],
+              [
+                -4.202697005964865,
+                50.368816892405874
+              ],
+              [
+                -4.203156724702808,
+                50.365640144076906
+              ],
+              [
+                -4.19449868846155,
+                50.362267670845654
+              ]
+            ]
+          ]
+        }
+      },
+      {
+        "squad_ID": 2,
+        "no_of_platforms": 3,
+        "squad_mission_type": "survey",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "ecosub-1",
+            "serial": "ecosub-2",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          },
+          {
+            "platform_ID": "ecosub-2",
+            "serial": "ecosubxyz-5",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -0.432,
+              "longitude_waypoint": 20.365,
+              "safe_command": "go_home",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          }
+        ],
+        "region_of_interest": {}
+      },
+      {
+        "squad_ID": 3,
+        "no_of_platforms": 1,
+        "squad_mission_type": "inspection",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "ah-1",
+            "serial": "autosubhover-1",
+            "model": "autosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": 20.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "abort_now",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "MBES"
+            }
+          }
+        ],
+        "region_of_interest": {}
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/autonomy_engine_adapter/platform_status-from_usbl_example.json b/tests/mock_data/autonomy_engine_adapter/platform_status-from_usbl_example.json
new file mode 100644
index 0000000000000000000000000000000000000000..6721a35ffe5177d21fa0594dbf5c9d90bf6043bf
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/platform_status-from_usbl_example.json
@@ -0,0 +1,21 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "hermes",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-5",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "usbl",
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20
+    }
+}
diff --git a/tests/mock_data/autonomy_engine_adapter/platform_status.json b/tests/mock_data/autonomy_engine_adapter/platform_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..b82beba2ed793f2c39fee7dd789ed142e6ce5b57
--- /dev/null
+++ b/tests/mock_data/autonomy_engine_adapter/platform_status.json
@@ -0,0 +1,44 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "ecosub_c2",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-2",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "onboard_platform",
+        "autonomy_engine_plan_ID": 1,
+        "battery_remaining_capacity": 80.2,
+        "active": true,
+        "platform_state": "ABORT",
+        "mission_action_ID": 1,
+        "mission_track_ID": 4,
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20,
+        "heading": 90.0,
+        "health_status": "Warning",
+        "localisation_error": 0,
+        "usbl_fix_seconds_ago": 0,
+        "range_to_go": 124.3,
+        "sensor_config": {
+            "sensor_ID": 22,
+            "serial": "sidescan-2x",    
+            "sensor_on": true,
+            "additional_data": {
+                "whiskers_on": true
+            }      
+        },
+        "current_pitch": -4,
+        "speed_over_ground": 4.3,
+        "thrust_applied": 124.3,
+        "water_current_velocity": 124.3
+    }
+}
diff --git a/tests/mock_data/ecosub_adapter/mission_plan.json b/tests/mock_data/ecosub_adapter/mission_plan.json
new file mode 100644
index 0000000000000000000000000000000000000000..1b49981bf409fb509466ab301e259e7174aa4bd3
--- /dev/null
+++ b/tests/mock_data/ecosub_adapter/mission_plan.json
@@ -0,0 +1,54 @@
+{
+  "header": {  
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "ecosub_c2",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "ecosub-2",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "action": "move",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0.0,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "dive",
+        "flight_style": "dive to depth",
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "altitude": 10,
+        "activate_payload": false,
+        "send_environmental_data": false
+      },
+      {
+        "action": "scanline",
+        "flight_style": "go to waypoint",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 60.00000000000000,
+        "altitude": 10,
+        "activate_payload": true,
+        "send_environmental_data": false
+      },
+      {
+        "action": "climb",
+        "flight_style": "go to surface",
+        "latitude_waypoint": -0.237143188645706,
+        "longitude_waypoint": 52.37072283932642,
+        "depth": 0,
+        "activate_payload": false,
+        "send_environmental_data": true
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/ecosub_adapter/observation.json b/tests/mock_data/ecosub_adapter/observation.json
new file mode 100644
index 0000000000000000000000000000000000000000..8eb0571baaefb70ee0813d8f5054ca1bdf6a724e
--- /dev/null
+++ b/tests/mock_data/ecosub_adapter/observation.json
@@ -0,0 +1,28 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "ecosub_c2",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "observation",
+        "platform_ID": "ecosub-2",
+        "points_of_interest": [
+            {
+                "latitude": 178.2,
+                "longitude": -10.122,
+                "quality_of_point": 0.98
+            },
+            {
+                "latitude": 50.1382,
+                "longitude": -11.122,
+                "quality_of_point": 0.50
+            }
+        ],
+        "region_surveyed": ""
+    }
+}
\ No newline at end of file
diff --git a/tests/mock_data/ecosub_adapter/platform_status-from_usbl_example.json b/tests/mock_data/ecosub_adapter/platform_status-from_usbl_example.json
new file mode 100644
index 0000000000000000000000000000000000000000..6721a35ffe5177d21fa0594dbf5c9d90bf6043bf
--- /dev/null
+++ b/tests/mock_data/ecosub_adapter/platform_status-from_usbl_example.json
@@ -0,0 +1,21 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "hermes",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-5",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "usbl",
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20
+    }
+}
diff --git a/tests/mock_data/ecosub_adapter/platform_status.json b/tests/mock_data/ecosub_adapter/platform_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..b82beba2ed793f2c39fee7dd789ed142e6ce5b57
--- /dev/null
+++ b/tests/mock_data/ecosub_adapter/platform_status.json
@@ -0,0 +1,44 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 2,
+        "source": "ecosub_c2",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "platform_status",
+        "platform_ID": "ecosub-2",
+        "platform_timestamp": "2022-12-21T00:00:00Z",
+        "status_source": "onboard_platform",
+        "autonomy_engine_plan_ID": 1,
+        "battery_remaining_capacity": 80.2,
+        "active": true,
+        "platform_state": "ABORT",
+        "mission_action_ID": 1,
+        "mission_track_ID": 4,
+        "latitude": 178.2,
+        "longitude": -10.122,
+        "depth": 50,
+        "altitude": 20,
+        "heading": 90.0,
+        "health_status": "Warning",
+        "localisation_error": 0,
+        "usbl_fix_seconds_ago": 0,
+        "range_to_go": 124.3,
+        "sensor_config": {
+            "sensor_ID": 22,
+            "serial": "sidescan-2x",    
+            "sensor_on": true,
+            "additional_data": {
+                "whiskers_on": true
+            }      
+        },
+        "current_pitch": -4,
+        "speed_over_ground": 4.3,
+        "thrust_applied": 124.3,
+        "water_current_velocity": 124.3
+    }
+}
diff --git a/tests/mock_data/ecosub_adapter/sample_decoded_ecosub_status.txt b/tests/mock_data/ecosub_adapter/sample_decoded_ecosub_status.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bacf8886dc4225ed6676b7759f9d095b3c3f3797
--- /dev/null
+++ b/tests/mock_data/ecosub_adapter/sample_decoded_ecosub_status.txt
@@ -0,0 +1,23 @@
+#C2#
+4338
+(4338,)
+11111111111111111000000000000000
+Health : 722
+Content_Mask : 4
+Battery Voltage : 82045
+Battery Amps : 0
+Battery Acc charge : 767
+Battery Max Amps : 548
+Battery Max Voltage : 18
+Inner pressure : 43
+Inner Temp : 4
+Inner Humidity : 0
+Max depth : 0
+Current Pitch : -80
+Max pitch : 0
+Current RPM : 0
+Surface Time : 1636015764
+last GPS Time : 0
+(b'A', 0, 60, 1636016049, 57.33663558959961, -4.444321632385254, 0, 4294934528, 722, 4, 82045, 0, 767, 548, 18, 43, 4, 0, 0, -80, 0, 0, 1636015764, 0)
+['Type', 'Version', 'Sub_Num', 'Time', 'Latitude', 'Longitude', 'Health', 'Content_Mask', 'Battery Voltage', 'Battery Amps', 'Battery Acc charge', 'Battery Max Amps', 'Battery Max Voltage', 'Inner pressure', 'Inner Temp', 'Inner Humidity', 'Max depth', 'Current Pitch', 'Max pitch', 'Current RPM', 'Surface Time', 'last GPS Time']
+(b'A', 0, 60, 1636016049, 57.33663558959961, -4.444321632385254, 0, 4294934528, 722, 4, 82045, 0, 767, 548, 18, 43, 4, 0, 0, -80, 0, 0, 1636015764, 0)
\ No newline at end of file
diff --git a/tests/mock_data/gui_adapter/planning_configuration.json b/tests/mock_data/gui_adapter/planning_configuration.json
new file mode 100644
index 0000000000000000000000000000000000000000..7ce3766d249ca20393e825609211ddbddee9abb2
--- /dev/null
+++ b/tests/mock_data/gui_adapter/planning_configuration.json
@@ -0,0 +1,160 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "ecosub_c2",
+    "destination": "autonomy_engine",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "platform_status",
+    "planning_config_ID": 3,
+    "exclusion_zones": [
+      {
+        "geometry_coordinates": [
+          [
+            [
+              -4.187143188645706,
+              50.37072283932642
+            ],
+            [
+              -4.202697005964865,
+              50.368816892405874
+            ],
+            [
+              -4.203156724702808,
+              50.365640144076906
+            ],
+            [
+              -4.19449868846155,
+              50.362267670845654
+            ]
+          ]
+        ]
+      }
+    ],
+    "squads": [
+      {
+        "squad_ID": 1,
+        "no_of_platforms": 1,
+        "squad_mission_type": "tracking",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "model": "reav",
+            "platform_ID": "reav-60-1",
+            "serial": "reav-60",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {}
+          }
+        ],
+        "region_of_interest": {
+          "geometry_coordinates": [
+            [
+              [
+                -4.187143188645706,
+                50.37072283932642
+              ],
+              [
+                -4.202697005964865,
+                50.368816892405874
+              ],
+              [
+                -4.203156724702808,
+                50.365640144076906
+              ],
+              [
+                -4.19449868846155,
+                50.362267670845654
+              ]
+            ]
+          ]
+        }
+      },
+      {
+        "squad_ID": 2,
+        "no_of_platforms": 3,
+        "squad_mission_type": "survey",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "ecosub-2",
+            "serial": "ecosub-2",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -7.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "go_home",
+              "target_depth": 10.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          },
+          {
+            "platform_ID": "ecosub-5",
+            "serial": "ecosub-5",
+            "model": "ecosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": -0.432,
+              "longitude_waypoint": 20.365,
+              "safe_command": "go_home",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "DVL",
+                "swath_width": 10
+            }
+          }
+        ]
+      },
+      {
+        "squad_ID": 3,
+        "no_of_platforms": 1,
+        "squad_mission_type": "inspection",
+        "squad_state": "active",
+        "platforms": [
+          {
+            "platform_ID": "139-ah-1",
+            "serial": "ah-1",
+            "model": "autosub",
+            "emergency": {
+              "additional_data": {},
+              "latitude_waypoint": 20.432,
+              "longitude_waypoint": 50.365,
+              "safe_command": "abort_now",
+              "target_depth": 0.0
+            },
+            "max_velocity": 0.9,
+            "min_altitude": 15.2,
+            "min_velocity": 0.1,
+            "additional_data": {
+                "scan_type": "MBES"
+            }
+          }
+        ],
+        "region_of_interest": {}
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/hydrosurv_adapter/acknowledgement.json b/tests/mock_data/hydrosurv_adapter/acknowledgement.json
new file mode 100644
index 0000000000000000000000000000000000000000..c5290f54e90ddbad8eadb13c4c4e4d5f6abe6843
--- /dev/null
+++ b/tests/mock_data/hydrosurv_adapter/acknowledgement.json
@@ -0,0 +1,16 @@
+{
+    "header":{
+        "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+        "timestamp": "2022-11-16T00:00:00Z",
+        "version": 1,
+        "source": "hydrosurv_adapter",
+        "destination": "autonomy_engine",
+        "delivery_type": "publish",
+        "encoded": false
+    },
+    "payload":{
+        "message_type": "acknowledgement",
+        "acknowledged_message_ID": "11111111-7bc8-11ed-a1eb-0242ac999999",
+        "status": "c2_received"
+    }
+}
\ No newline at end of file
diff --git a/tests/mock_data/hydrosurv_adapter/mission_plan.json b/tests/mock_data/hydrosurv_adapter/mission_plan.json
new file mode 100644
index 0000000000000000000000000000000000000000..f5c1c0d92f1577d30320abb4d1e7c6cd8b4de3dc
--- /dev/null
+++ b/tests/mock_data/hydrosurv_adapter/mission_plan.json
@@ -0,0 +1,30 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "autonomy_engine",
+    "destination": "hydrosurv_adapter",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "mission_plan",
+    "platform_ID": "reav-60-1",
+    "autonomy_engine_plan_ID": 1,
+    "plan": [
+      {
+        "latitude_waypoint": -4.187143188645706,
+        "longitude_waypoint": 50.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.187143188645706,
+        "longitude_waypoint": 51.37072283932642
+      },
+      {
+        "latitude_waypoint": -3.237143188645706,
+        "longitude_waypoint": 52.37072283932642
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/tests/mock_data/hydrosurv_adapter/platform_status.json b/tests/mock_data/hydrosurv_adapter/platform_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..43bac1f1630354a39abc2d5b1adc764d09ca8a5a
--- /dev/null
+++ b/tests/mock_data/hydrosurv_adapter/platform_status.json
@@ -0,0 +1,30 @@
+{
+  "header":{
+    "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
+    "timestamp": "2022-11-16T00:00:00Z",
+    "version": 2,
+    "source": "hydrosurv_adapter",
+    "destination": "autonomy_engine",
+    "delivery_type": "publish",
+    "encoded": false
+  },
+  "payload":{
+    "message_type": "platform_status",
+    "autonomy_engine_plan_ID": 1,
+    "active": true,
+    "status_source": "onboard_platform",
+    "battery_remaining_capacity": 80.2,
+    "heading": 310.0,
+    "health_status": "Lost Connection",
+    "latitude": 178.2,
+    "longitude": -10.122,
+    "mission_action_ID": 1,
+    "mission_track_ID": 4,
+    "platform_ID": "reav-60-1",
+    "platform_state": "ABORT",
+    "platform_timestamp": "2022-12-21T00:00:00Z",
+    "speed_over_ground": 4.5,
+    "range_to_go": 0.0,
+    "thrust_applied": 2.3
+  }
+}
\ No newline at end of file
diff --git a/tests/test_schemas.py b/tests/test_schemas.py
new file mode 100644
index 0000000000000000000000000000000000000000..bf8478d87d7c804f6a719a021f3d0908f874853b
--- /dev/null
+++ b/tests/test_schemas.py
@@ -0,0 +1,242 @@
+from openapi_spec_validator import openapi_v30_spec_validator
+from openapi_spec_validator.readers import read_from_filename
+from openapi_schema_validator import validate
+from jsonschema import FormatChecker
+from tests.fixtures.schemas import (
+    acknowledgement_schema,
+    message_header,
+    observation_schema,
+    planning_configuration_schema,
+    platform_status_schema,
+    mission_plan_schema,
+)
+import unittest
+import json
+
+
+class TestSpecs(unittest.TestCase):
+    def test_swagger_specs(self):
+        """
+        Test specs (swagger.json generated from generate_schema_config.py)
+        """
+        schema, spec_url = read_from_filename("tests/fixtures/swagger.json")
+        self.assertIsNone(openapi_v30_spec_validator.validate(schema))
+
+
+class TestSchema(unittest.TestCase):
+    def test_sample_hydrosurv_messages(self):
+        """
+        Test schema - Hydrosurv Messages
+        """
+        message_types = ["acknowledgement", "mission_plan", "platform_status"]
+        for item in message_types:
+            f = open("examples/hydrosurv_adapter/%s.json" % item)
+            mock_data = json.load(f)
+            header_data = mock_data["header"]
+            payload_data = mock_data["payload"]
+            self.assertIsNone(
+                validate(
+                    header_data,
+                    message_header,
+                    format_checker=FormatChecker(),
+                )
+            )
+            if item == "acknowledgement":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        acknowledgement_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "mission_plan":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        mission_plan_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "platform_status":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        platform_status_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+
+    def test_sample_gui_messages(self):
+        """
+        Test schema - GUI Messages
+        """
+        message_types = ["planning_configuration"]
+        for item in message_types:
+            f = open("examples/gui_adapter/%s.json" % item)
+            mock_data = json.load(f)
+            header_data = mock_data["header"]
+            payload_data = mock_data["payload"]
+            self.assertIsNone(
+                validate(
+                    header_data,
+                    message_header,
+                    format_checker=FormatChecker(),
+                )
+            )
+            if item == "planning_configuration":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        planning_configuration_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+
+    def test_sample_ecosub_messages(self):
+        """
+        Test schema - Ecosub Messages
+        """
+        message_types = [
+            "observation",
+            "mission_plan",
+            "platform_status",
+            "platform_status-from_usbl_example",
+        ]
+        for item in message_types:
+            f = open("examples/ecosub_adapter/%s.json" % item)
+            mock_data = json.load(f)
+            header_data = mock_data["header"]
+            payload_data = mock_data["payload"]
+            self.assertIsNone(
+                validate(
+                    header_data,
+                    message_header,
+                    format_checker=FormatChecker(),
+                )
+            )
+            if item == "platform_status-from_usbl_example.json":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        platform_status_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "mission_plan":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        mission_plan_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "platform_status":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        platform_status_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "observation":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        observation_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+
+    def test_sample_autonomy_engine_messages(self):
+        """
+        Test schema - Autonomy Engine Messages
+        """
+        message_types = [
+            "planning_configuration",
+            "mission_plan_AH1",
+            "mission_plan_ECOSUB",
+            "mission_plan_HYDROSURV",
+            "platform_status",
+            "platform_status-from_usbl_example",
+            "acknowledgement",
+        ]
+        for item in message_types:
+            f = open("examples/autonomy_engine_adapter/%s.json" % item)
+            mock_data = json.load(f)
+            header_data = mock_data["header"]
+            payload_data = mock_data["payload"]
+            self.assertIsNone(
+                validate(
+                    header_data,
+                    message_header,
+                    format_checker=FormatChecker(),
+                )
+            )
+            if item == "platform_status-from_usbl_example.json":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        platform_status_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "mission_plan_AH1":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        mission_plan_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "mission_plan_ECOSUB":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        mission_plan_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "mission_plan_HYDROSURV":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        mission_plan_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "platform_status":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        platform_status_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "observation":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        observation_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "planning_configuration":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        planning_configuration_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+            elif item == "acknowledgement":
+                self.assertIsNone(
+                    validate(
+                        payload_data,
+                        acknowledgement_schema,
+                        format_checker=FormatChecker(),
+                    )
+                )
+
+
+if __name__ == "__main__":
+    unittest.main()