diff --git a/debugger.py b/debugger.py
new file mode 100644
index 0000000000000000000000000000000000000000..f8e711b4b24e9a87c5c9938c09be3c2af86545ce
--- /dev/null
+++ b/debugger.py
@@ -0,0 +1,3 @@
+from geomagio.apiclient.metadata import create
+
+create(station="BOU", category="reading")
\ No newline at end of file
diff --git a/geomagio/apiclient/MetadataFactory.py b/geomagio/apiclient/MetadataFactory.py
index 8ffaead94408a88c6b3aeb7591f1a66e38aa9675..1d8ded01879bd82921395f0343655b74d0bdbbe5 100644
--- a/geomagio/apiclient/MetadataFactory.py
+++ b/geomagio/apiclient/MetadataFactory.py
@@ -1,7 +1,6 @@
 import os
 import requests
-from typing import Dict, List, Union
-import urllib
+from typing import List, Union
 
 from obspy import UTCDateTime
 from pydantic import parse_obj_as
@@ -22,35 +21,37 @@ class MetadataFactory(object):
         self.token = token
         self.header = {"Authorization": self.token} if token else None
 
-    def delete_metadata(self, metadata: Metadata) -> Dict:
+    def delete_metadata(self, metadata: Metadata) -> bool:
         response = requests.delete(url=f"{self.url}/{metadata.id}", headers=self.header)
-        return response
+        if response.status_code == 200:
+            return True
+        return False
 
-    def get_metadata(self, query: MetadataQuery) -> Union[List[Metadata], Metadata]:
+    def get_metadata(self, query: MetadataQuery) -> List[Metadata]:
         args = parse_params(query=query)
         if "id" in args:
             self.url = f"{self.url}/{args['id']}"
             args = {}
-        responses = requests.get(url=self.url, params=args, headers=self.header)
+        response = requests.get(url=self.url, params=args, headers=self.header)
         try:
-            metadata = parse_obj_as(Union[List[Metadata], Metadata], responses.json())
+            metadata = parse_obj_as(Union[List[Metadata], Metadata], response.json())
         except:
-            raise ValueError("Data not found")
+            return []
         if isinstance(metadata, Metadata):
             metadata = [metadata]
         return metadata
 
-    def create_metadata(self, metadata: Metadata) -> requests.Response:
+    def create_metadata(self, metadata: Metadata) -> Metadata:
         response = requests.post(
             url=self.url, data=metadata.json(), headers=self.header
         )
-        return response
+        return Metadata(**response.json())
 
-    def update_metadata(self, metadata: Metadata) -> requests.Response:
+    def update_metadata(self, metadata: Metadata) -> Metadata:
         response = requests.put(
             url=f"{self.url}/{metadata.id}", data=metadata.json(), headers=self.header
         )
-        return response
+        return Metadata(**response.json())
 
 
 def parse_params(query: MetadataQuery) -> str:
diff --git a/geomagio/apiclient/metadata.py b/geomagio/apiclient/metadata.py
index 42551ad4562b5fb1f901dccc5d81026229f5547c..272e2cd87a72811d0bc39746916861fc916558ec 100644
--- a/geomagio/apiclient/metadata.py
+++ b/geomagio/apiclient/metadata.py
@@ -11,18 +11,15 @@ from ..metadata import Metadata, MetadataCategory
 from .MetadataFactory import MetadataFactory
 
 
-def load_metadata(input_file) -> Optional[Dict]:
+def load_metadata(input_file: str) -> Optional[Dict]:
     if input_file is None:
         return None
     if input_file == "-":
         data = json.loads(sys.stdin.read())
         return data
-    try:
-        with open(input_file, "r") as file:
-            data = json.load(file)
-        return data
-    except (FileNotFoundError, TypeError):
-        return None
+    with open(input_file, "r") as file:
+        data = json.load(file)
+    return data
 
 
 app = typer.Typer()
@@ -40,10 +37,7 @@ def create(
     data_valid: bool = True,
     endtime: str = None,
     id: int = None,
-    input_file: str = typer.Option(
-        None,
-        help="JSON formatted file containing non-shared metadata information",
-    ),
+    input_file: str = None,
     location: str = None,
     metadata_valid: bool = True,
     network: str = None,
@@ -51,72 +45,40 @@ def create(
     station: str = None,
     wrap: bool = True,
 ):
-
-    if wrap == True:
+    input_metadata = load_metadata(input_file=input_file)
+    if not wrap:
+        metadata = Metadata(**input_metadata)
+    else:
         metadata = Metadata(
-            id=id,
             category=category,
-            starttime=UTCDateTime(starttime) if starttime else None,
-            endtime=UTCDateTime(endtime) if endtime else None,
+            channel=channel,
             created_after=UTCDateTime(created_after) if created_after else None,
             created_before=UTCDateTime(created_before) if created_before else None,
-            network=network,
-            station=station,
-            channel=channel,
-            location=location,
             data_valid=data_valid,
+            endtime=UTCDateTime(endtime) if endtime else None,
+            id=id,
+            location=location,
+            metadata = input_metadata["metadata"],
             metadata_valid=metadata_valid,
+            network=network,
+            starttime=UTCDateTime(starttime) if starttime else None,
+            station=station,
         )
-        metadata.metadata = load_metadata(input_file=input_file)
-    elif wrap == False:
-        metadata_dict = load_metadata(input_file=input_file)
-        metadata = Metadata(**metadata_dict)
-    response = MetadataFactory(url=url).create_metadata(metadata=metadata)
-    print(response.json())
+    metadata = MetadataFactory(url=url).create_metadata(metadata=metadata)
+    print(metadata.json())
 
 
 @app.command()
 def delete(
+    input_file: str,
     url: str = "http://{}/ws/secure/metadata".format(
         os.getenv("GEOMAG_API_HOST", "127.0.0.1:8000")
     ),
-    category: MetadataCategory = None,
-    channel: str = None,
-    created_after: str = None,
-    created_before: str = None,
-    data_valid: bool = True,
-    endtime: str = None,
-    id: int = None,
-    input_file: str = typer.Option(
-        None,
-        help="JSON formatted file containing non-shared metadata information",
-    ),
-    location: str = None,
-    metadata_valid: bool = True,
-    network: str = None,
-    starttime: str = None,
-    station: str = None,
 ):
-    if input_file is not None:
-        metadata_dict = load_metadata(input_file=input_file)
-        metadata = Metadata(**metadata_dict)
-    else:
-        metadata = Metadata(
-            id=id,
-            category=category,
-            starttime=starttime,
-            endtime=endtime,
-            created_after=created_after,
-            created_before=created_before,
-            network=network,
-            station=station,
-            channel=channel,
-            location=location,
-            data_valid=data_valid,
-            metadata_valid=metadata_valid,
-        )
-    response = MetadataFactory(url=url).delete_metadata(metadata=metadata)
-    print(response.json())
+    metadata_dict = load_metadata(input_file=input_file)
+    metadata = Metadata(**metadata_dict)
+    deleted = MetadataFactory(url=url).delete_metadata(metadata=metadata)
+    print(deleted)
 
 
 @app.command()
@@ -136,75 +98,45 @@ def get(
     network: Optional[str] = None,
     starttime: Optional[str] = None,
     station: Optional[str] = None,
-    unwrap: bool = False,
+    getone: bool = False,
 ):
     query = MetadataQuery(
-        id=id,
         category=category,
-        starttime=UTCDateTime(starttime) if starttime else None,
-        endtime=UTCDateTime(endtime) if endtime else None,
+        channel=channel,
         created_after=UTCDateTime(created_after) if created_after else None,
         created_before=UTCDateTime(created_before) if created_before else None,
-        network=network,
-        station=station,
-        channel=channel,
-        location=location,
         data_valid=data_valid,
+        endtime=UTCDateTime(endtime) if endtime else None,
+        id=id,
+        location=location,
         metadata_valid=metadata_valid,
+        network=network,
+        starttime=UTCDateTime(starttime) if starttime else None,
+        station=station,
     )
     metadata = MetadataFactory(url=url).get_metadata(query=query)
-    if unwrap:
-        metadata = [json.dumps(m.metadata) for m in metadata]
-    else:
-        metadata = [m.json() for m in metadata]
-    if len(metadata) == 1:
-        print(metadata[0])
+    if not metadata:
+        print([])
+        return
+
+    if getone:
+        if len(metadata) > 1:
+            raise ValueError("More than one matching record")
+        print(metadata[0].json())
         return
-    print(metadata)
+    print([m.json() for m in metadata])
+    
 
 
 @app.command()
 def update(
+    input_file: str,
     url: str = "http://{}/ws/secure/metadata".format(
         os.getenv("GEOMAG_API_HOST", "127.0.0.1:8000")
     ),
-    category: MetadataCategory = None,
-    channel: str = None,
-    created_after: str = None,
-    created_before: str = None,
-    data_valid: bool = True,
-    endtime: str = None,
-    id: int = None,
-    input_file: str = typer.Option(
-        None,
-        help="JSON formatted file containing non-shared metadata information",
-    ),
-    location: str = None,
-    metadata_valid: bool = True,
-    network: str = None,
-    starttime: str = None,
-    station: str = None,
 ):
-    if input_file is not None:
-        metadata_dict = load_metadata(input_file=input_file)
-        metadata = Metadata(**metadata_dict)
-
-    else:
-        metadata = Metadata(
-            id=id,
-            category=category,
-            starttime=UTCDateTime(starttime) if starttime else None,
-            endtime=UTCDateTime(endtime) if endtime else None,
-            created_after=UTCDateTime(created_after) if created_after else None,
-            created_before=UTCDateTime(created_before) if created_before else None,
-            network=network,
-            station=station,
-            channel=channel,
-            location=location,
-            data_valid=data_valid,
-            metadata_valid=metadata_valid,
-        )
-    metadata.metadata = load_metadata(input_file=input_file)
+    metadata_dict = load_metadata(input_file=input_file)
+    metadata = Metadata(**metadata_dict)
     response = MetadataFactory(url=url).update_metadata(metadata=metadata)
     print(response.json())