diff --git a/staffeln/api/app.py b/staffeln/api/app.py
index 90f35df..e75a5c7 100755
--- a/staffeln/api/app.py
+++ b/staffeln/api/app.py
@@ -1,21 +1,60 @@
 from flask import Flask
+from flask import Response
 from flask import jsonify
 from flask import request
+from staffeln import objects
+from staffeln.common import context
+from staffeln.common import auth
+from oslo_log import log
+from openstack import exceptions as exc
 
 
+ctx = context.make_context()
 app = Flask(__name__)
 
+LOG = log.getLogger(__name__)
 
-@app.route('/')
-def hello_world():
-    return 'This is my first API call!'
+conn = auth.create_connection()
 
 
-@app.route('/post', methods=["POST"])
-def testpost():
-    input_json = request.get_json(force=True)
-    dictToReturn = {'text': input_json['text']}
-    return jsonify(dictToReturn)
+@app.route("/v1/backup", methods=["GET"])
+def backup_id():
+    if "backup_id" not in request.args:
+        # Return error if the backup_id argument is not provided.
+        return "Error: No backup_id field provided. Please specify backup_id."
+
+    backup_id = request.args["backup_id"]
+    # Retrive the backup object from backup_data table with matching backup_id.
+    backup_info = objects.Volume.get_backup_by_backup_id(ctx, backup_id)
+    # backup_info is None when there is no entry of the backup id in backup_table.
+    if backup_info is None:
+        LOG.info("No record of backup in storage. Checking cloud for backup")
+        try:
+            backup = conn.block_storage.get_backup(backup_id)
+        except exc.ResourceNotFound:
+            return Response(
+                "Backup Resource not found for the provided backup id.",
+                status=404,
+                mimetype="text/plain",
+            )
+        except:
+            return Response("Internal Server Error.", status=500, mimetype="text/plain")
+        metadata = backup.metadata
+        if metadata is not None:
+            if metadata["__automated_backup"] is True:
+                return Response("Deny", status=401, mimetype="text/plain")
+
+        return Response(
+            "True",
+            status=200,
+            mimetype="text/plain",
+        )
+    metadata = backup_info.backup_metadata
+    if metadata["__automated_backup"] is True:
+        return Response("Deny", status=401, mimetype="text/plain")
+    else:
+        return Response("True", status=200, mimetype="text/plain")
+
 
 def run(host, port, ssl_context):
     app.run(host=host, port=port, ssl_context=ssl_context)
diff --git a/staffeln/db/sqlalchemy/api.py b/staffeln/db/sqlalchemy/api.py
index 83bb484..d16766f 100644
--- a/staffeln/db/sqlalchemy/api.py
+++ b/staffeln/db/sqlalchemy/api.py
@@ -181,7 +181,7 @@
         query = query.filter(getattr(model, fieldname) == value)
 
         try:
-            obj = query.one()
+            obj = query.one_or_none()
         except exc.NoResultFound:
             LOG.error("ResourceNotFound")
 
@@ -280,7 +280,7 @@
         )
 
     def update_queue(self, id, values):
-        print(self._update(models.Queue_data, id, values))
+
         try:
             return self._update(models.Queue_data, id, values)
         except:
@@ -306,3 +306,21 @@
             return self._soft_delete(models.Queue_data, id)
         except:
             LOG.error("Queue Not found.")
+
+    def get_backup_by_backup_id(self, context, backup_id):
+        """Get the column from the backup_data with matching backup_id"""
+
+        try:
+            return self._get_backup(context, fieldname="backup_id", value=backup_id)
+        except:
+            LOG.error("Backup not found with backup_id %s." % backup_id)
+
+    def _get_backup(self, context, fieldname, value):
+        """Get the column from the volume_data table"""
+
+        try:
+            return self._get(
+                context, model=models.Backup_data, fieldname=fieldname, value=value
+            )
+        except:
+            LOG.error("Backup resource not found.")
diff --git a/staffeln/db/sqlalchemy/models.py b/staffeln/db/sqlalchemy/models.py
index 715d747..7ec8a4e 100644
--- a/staffeln/db/sqlalchemy/models.py
+++ b/staffeln/db/sqlalchemy/models.py
@@ -4,18 +4,12 @@
 
 from oslo_db.sqlalchemy import models
 from oslo_serialization import jsonutils
-from sqlalchemy import Boolean
 from sqlalchemy import Column
 from sqlalchemy import DateTime
 from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import Float
-from sqlalchemy import ForeignKey
 from sqlalchemy import Integer
-from sqlalchemy import LargeBinary
-from sqlalchemy import orm
-from sqlalchemy import Numeric
 from sqlalchemy import String
-from sqlalchemy import Text
+from sqlalchemy import JSON
 from sqlalchemy.types import TypeDecorator, TEXT
 from sqlalchemy import UniqueConstraint
 import urllib.parse as urlparse
@@ -65,6 +59,7 @@
     volume_id = Column(String(100))
     instance_id = Column(String(100))
     backup_completed = Column(Integer())
+    backup_metadata = Column(JSON(), nullable=True)
 
 
 class Queue_data(Base):
diff --git a/staffeln/objects/volume.py b/staffeln/objects/volume.py
index 3933bdf..62ed2b4 100644
--- a/staffeln/objects/volume.py
+++ b/staffeln/objects/volume.py
@@ -17,6 +17,7 @@
         "instance_id": sfeild.StringField(),
         "volume_id": sfeild.UUIDField(),
         "backup_completed": sfeild.IntegerField(),
+        "backup_metadata": sfeild.JsonField(),
     }
 
     @base.remotable_classmethod
@@ -33,7 +34,6 @@
     def create(self):
         """Create a :class:`Backup_data` record in the DB"""
         values = self.obj_get_changes()
-        print(values)
         db_backup = self.dbapi.create_backup(values)
         self._from_db_object(self, db_backup)
 
@@ -59,3 +59,22 @@
         """
         current = self.get_by_uuid(backup_id=self.backup_id)
         self.obj_refresh(current)
+
+    @base.remotable_classmethod
+    def get_backup_by_backup_id(cls, context, backup_id):
+        """Find a backup based on backup_id
+        :param context: Security context. NOTE: This should only
+                        be used internally by the indirection_api.
+                        Unfortunately, RPC requires context as the first
+                        argument, even though we don't use it.
+                        A context should be set when instantiating the
+                        object, e.g.: Queue(context)
+        :param backup_id: the backup id of volume in volume data.
+        :returns: a :class:`Backup` object.
+        """
+        db_backup = cls.dbapi.get_backup_by_backup_id(context, backup_id)
+        if db_backup is None:
+            return db_backup
+        else:
+            backup = cls._from_db_object(cls(context), db_backup)
+            return backup
