diff --git a/geomagio/api/ws/Observatory.py b/geomagio/api/ws/Observatory.py
index 2b1797e0012f07e93ede82d586551e2cd948b173..28f148650e7bd4e0db21680ed04013c5244a4cce 100644
--- a/geomagio/api/ws/Observatory.py
+++ b/geomagio/api/ws/Observatory.py
@@ -15,6 +15,7 @@ class Observatory(BaseModel):
     elevation: Optional[int] = None
     latitude: Optional[float] = None
     longitude: Optional[float] = None
+    sensor_sampling_rate: Optional[float] = None
 
     # Rather than use validator for populating the agency short name we resorted to using the __init__ function here because the validator mehtod would not overwrite the default None values assigned to agency above.
     # logic I followed is here https://stackoverflow.com/questions/76286148/how-do-custom-init-functions-work-in-pydantic-with-inheritance
@@ -73,7 +74,7 @@ class Observatory(BaseModel):
                 "agency": self.agency,
                 "agency_name": self.agency_name,
                 "sensor_orientation": self.sensor_orientation,
-                "sensor_sampling_rate": 0.01,
+                "sensor_sampling_rate": self.sensor_sampling_rate,
                 "declination_base": self.declination_base,
             },
             "geometry": (
@@ -103,6 +104,7 @@ for observatory_code, observatory_data in DEFAULT_METADATA.items():
         agency_name=metadata["agency_name"],
         sensor_orientation=metadata["sensor_orientation"],
         declination_base=metadata.get("declination_base"),
+        sensor_sampling_rate=metadata["sensor_sampling_rate"],
     )
 
     OBSERVATORIES.append(observatory)
diff --git a/test/api_test/ws_test/elements_test.py b/test/api_test/ws_test/elements_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..5549fb76f7c0db2155369e57d9c0581e1da9ae04
--- /dev/null
+++ b/test/api_test/ws_test/elements_test.py
@@ -0,0 +1,22 @@
+from fastapi.testclient import TestClient
+
+from geomagio.api.ws import app
+
+client = TestClient(app)
+
+
+def test_get_elements():
+    response = client.get("/elements/")
+
+    assert response.status_code == 200
+
+    body = response.json()
+    assert body["type"] == "FeatureCollection"
+
+    elements = body["features"]
+    for e in elements:
+        assert e["type"] == "Feature"
+        assert e["id"] != None
+        assert e["properties"]["name"] != None
+        assert e["properties"]["units"] != None
+        assert e["geometry"] == None
diff --git a/test/api_test/ws_test/observatories_test.py b/test/api_test/ws_test/observatories_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..807d7d0e346128b49cc3676a8329457afb6b253e
--- /dev/null
+++ b/test/api_test/ws_test/observatories_test.py
@@ -0,0 +1,41 @@
+from fastapi.testclient import TestClient
+
+from geomagio.api.ws import app
+
+client = TestClient(app)
+
+
+def test_get_all_observatories():
+    response = client.get("/observatories/")
+
+    assert response.status_code == 200
+    body = response.json()
+    assert body["type"] == "FeatureCollection"
+
+    observatories = body["features"]
+    for o in observatories:
+        assert o["type"] == "Feature"
+        assert o["id"] != None
+        assert o["properties"]["name"] != None
+        assert o["properties"]["agency"] != None
+        assert o["properties"]["agency_name"] != None
+        assert o["properties"]["sensor_orientation"] != None
+        assert o["properties"]["sensor_sampling_rate"] != None
+
+
+def test_get_observatory_by_id():
+    response = client.get("/observatories/SIT")
+
+    assert response.status_code == 200
+
+    body = response.json()
+    assert body["type"] == "Feature"
+    assert body["id"] == "SIT"
+    assert body["properties"]["name"] == "Sitka"
+    assert body["properties"]["agency"] == "USGS"
+    assert body["properties"]["agency_name"] == "United States Geological Survey (USGS)"
+    assert body["properties"]["sensor_orientation"] == "HDZF"
+    assert body["properties"]["sensor_sampling_rate"] == 100.0
+    assert body["properties"]["declination_base"] == 12349
+    assert body["geometry"]["type"] == "Point"
+    assert body["geometry"]["coordinates"] == [224.675, 57.058, 24]
diff --git a/test/api_test/ws_test/variometers_test.py b/test/api_test/ws_test/variometers_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..41b2544650732420d93e6608fae0e1686fcbdfb3
--- /dev/null
+++ b/test/api_test/ws_test/variometers_test.py
@@ -0,0 +1,44 @@
+from fastapi.testclient import TestClient
+
+from geomagio.api.ws import app
+
+client = TestClient(app)
+
+
+def test_get_all_variometers():
+    response = client.get("/variometers/")
+
+    assert response.status_code == 200
+    body = response.json()
+    assert body["type"] == "FeatureCollection"
+
+    variometers = body["features"]
+    for v in variometers:
+        assert v["type"] == "Feature"
+        assert v["id"] != None
+        assert v["properties"]["name"] != None
+        assert v["properties"]["agency"] != None
+        assert v["properties"]["agency_name"] != None
+        assert v["properties"]["sensor_orientation"] != None
+        assert v["properties"]["sensor_sampling_rate"] == None
+        assert v["properties"]["declination_base"] == None
+        assert v["geometry"]["type"] == "Point"
+        assert len(v["geometry"]["coordinates"]) > 0
+
+
+def test_get_variometer_by_id():
+    response = client.get("/variometers/DWPF")
+
+    assert response.status_code == 200
+
+    body = response.json()
+    assert body["type"] == "Feature"
+    assert body["id"] == "DWPF"
+    assert body["properties"]["name"] == "Disney Wilderness Preserve, Florida, USA"
+    assert body["properties"]["agency"] == "USGS"
+    assert body["properties"]["agency_name"] == "United States Geological Survey (USGS)"
+    assert body["properties"]["sensor_orientation"] == "HDZF"
+    assert body["properties"]["sensor_sampling_rate"] == None
+    assert body["properties"]["declination_base"] == None
+    assert body["geometry"]["type"] == "Point"
+    assert body["geometry"]["coordinates"] == [-81.4327, 28.1103, 30]