diff --git a/geomagio/api/ws/app.py b/geomagio/api/ws/app.py
index 6f2c49e555bd6913befc73169dd22539089d56cb..e599c664275a494624ce913d01298d0da85cc0af 100644
--- a/geomagio/api/ws/app.py
+++ b/geomagio/api/ws/app.py
@@ -7,7 +7,7 @@ from fastapi.middleware.cors import CORSMiddleware
 from fastapi.responses import JSONResponse, PlainTextResponse, RedirectResponse
 from obspy import UTCDateTime
 
-from . import algorithms, data, elements, observatories
+from . import algorithms, data, elements, metadata, observatories
 
 
 ERROR_CODE_MESSAGES = {
@@ -20,6 +20,7 @@ ERROR_CODE_MESSAGES = {
     503: "Service Unavailable",
 }
 
+METADATA_ENDPOINT = bool(os.getenv("METADATA_ENDPOINT", False))
 VERSION = os.getenv("GEOMAG_VERSION", "version")
 
 
@@ -30,6 +31,9 @@ app.include_router(data.router)
 app.include_router(elements.router)
 app.include_router(observatories.router)
 
+if METADATA_ENDPOINT:
+    app.include_router(metadata.router)
+
 
 @app.middleware("http")
 async def add_headers(request: Request, call_next):
diff --git a/geomagio/api/ws/metadata.py b/geomagio/api/ws/metadata.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c95aaa3669afcfe27b9e984b945f7c0dc067243
--- /dev/null
+++ b/geomagio/api/ws/metadata.py
@@ -0,0 +1,37 @@
+from typing import List
+
+from fastapi import APIRouter, Body, Response
+from obspy import UTCDateTime
+
+from ...metadata import Metadata, MetadataCategory
+from ..secure.MetadataQuery import MetadataQuery
+from ..db import metadata_table
+
+router = APIRouter()
+
+
+@router.get("/metadata", response_model=List[Metadata])
+async def get_metadata(
+    category: MetadataCategory = None,
+    starttime: UTCDateTime = None,
+    endtime: UTCDateTime = None,
+    network: str = None,
+    station: str = None,
+    channel: str = None,
+    location: str = None,
+    data_valid: bool = None,
+    metadata_valid: bool = True,
+):
+    query = MetadataQuery(
+        category=category,
+        starttime=starttime,
+        endtime=endtime,
+        network=network,
+        station=station,
+        channel=channel,
+        location=location,
+        data_valid=data_valid,
+        metadata_valid=metadata_valid,
+    )
+    metas = await metadata_table.get_metadata(**query.datetime_dict(exclude={"id"}))
+    return metas