diff --git a/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py b/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
new file mode 100644
index 0000000..e6107eb
--- /dev/null
+++ b/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
@@ -0,0 +1,40 @@
+"""add report timestamp
+
+Revision ID: 5b2e78435231
+Revises: 2b2b9df199bd
+Create Date: 2023-03-20 12:24:58.084135
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '5b2e78435231'
+down_revision = '2b2b9df199bd'
+
+from alembic import op
+import sqlalchemy as sa
+
+from oslo_log import log
+
+
+LOG = log.getLogger(__name__)
+
+
+def upgrade():
+    op.create_table(
+        'report_timestamp',
+        sa.Column('id', sa.String(36), primary_key=True, nullable=False),
+        sa.Column('created_at', sa.DateTime),
+        sa.Column('updated_at', sa.DateTime),
+        sa.Column('sender', sa.String(length=255), nullable=True),
+
+        mysql_engine='InnoDB',
+        mysql_charset='utf8')
+
+
+
+def downgrade():
+    try:
+        op.drop_table('report_timestamp')
+    except Exception:
+        LOG.exception("Error Dropping 'report_timestamp' table.")
+
diff --git a/staffeln/db/sqlalchemy/api.py b/staffeln/db/sqlalchemy/api.py
index 3526b93..50615bc 100644
--- a/staffeln/db/sqlalchemy/api.py
+++ b/staffeln/db/sqlalchemy/api.py
@@ -100,6 +100,23 @@
     def _get_relationships(model):
         return inspect(model).relationships
 
+    def _add_report_filters(self, query, filters):
+        """Add filters while listing report_timestamp table"""
+        if filters is None:
+            filters = {}
+
+        plain_fields = [
+            "sender",
+            "created_at",
+        ]
+
+        return self._add_filters(
+            query=query,
+            model=models.Backup_data,
+            filters=filters,
+            plain_fields=plain_fields,
+        )
+
     def _add_backup_filters(self, query, filters):
         """Add filters while listing the columns from the backup_data table"""
         if filters is None:
@@ -336,3 +353,28 @@
             return self._soft_delete(models.Backup_data, id)
         except:  # noqa: E722
             LOG.error("Backup Not found.")
+
+    def get_report_timestamp_list(self, *args, **kwargs):
+        return self._get_model_list(
+            models.Report_timestamp, self._add_report_filters, *args, **kwargs
+        )
+
+    def create_report_timestamp(self, values):
+        try:
+            report_timestamp_data = self._create(models.Report_timestamp, values)
+        except db_exc.DBDuplicateEntry:
+            LOG.error("Report Timestamp ID already exists.")
+        return report_timestamp_data
+
+    def update_report_timestamp(self, id, values):
+
+        try:
+            return self._update(models.Report_timestamp, id, values)
+        except:  # noqa: E722
+            LOG.error("Report Timestamp resource not found.")
+
+    def soft_delete_report_timestamp(self, id):
+        try:
+            return self._soft_delete(models.Report_timestamp, id)
+        except:  # noqa: E722
+            LOG.error("Report Timestamp Not found.")
diff --git a/staffeln/db/sqlalchemy/models.py b/staffeln/db/sqlalchemy/models.py
index 99b7ea3..c186ddc 100644
--- a/staffeln/db/sqlalchemy/models.py
+++ b/staffeln/db/sqlalchemy/models.py
@@ -71,3 +71,12 @@
     instance_name = Column(String(100))
     incremental = Column(Boolean, default=False)
     reason = Column(String(255), nullable=True)
+
+
+class Report_timestamp(Base):
+    """Represent the report_timestamp"""
+
+    __tablename__ = "report_timestamp"
+    __table_args__ = table_args()
+    id = Column(Integer, primary_key=True, autoincrement=True)
+    sender = Column(String(255), nullable=True)
diff --git a/staffeln/objects/__init__.py b/staffeln/objects/__init__.py
index b79e47b..8e097a4 100755
--- a/staffeln/objects/__init__.py
+++ b/staffeln/objects/__init__.py
@@ -1,8 +1,9 @@
 from .queue import Queue  # noqa: F401
 from .volume import Volume  # noqa: F401
+from .report import ReportTimestamp  # noqa: F401
 
 
-# from volume import Volume
 def register_all():
     __import__("staffeln.objects.volume")
     __import__("staffeln.objects.queue")
+    __import__("staffeln.objects.report")
diff --git a/staffeln/objects/report.py b/staffeln/objects/report.py
new file mode 100644
index 0000000..954ca66
--- /dev/null
+++ b/staffeln/objects/report.py
@@ -0,0 +1,46 @@
+from oslo_versionedobjects import fields as ovoo_fields
+
+from staffeln.db import api as db_api
+from staffeln.objects import base
+from staffeln.objects import fields as sfeild
+
+
+@base.StaffelnObjectRegistry.register
+class ReportTimestamp(
+    base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat
+):
+    VERSION = "1.0"
+    # Version 1.0: Initial version
+
+    dbapi = db_api.get_instance()
+
+    fields = {
+        "id": sfeild.IntegerField(),
+        "sender": sfeild.StringField(nullable=True),
+        "created_at": ovoo_fields.DateTimeField(),
+    }
+
+    @base.remotable_classmethod
+    def list(cls, context, filters=None):  # pylint: disable=E0213
+        db_report = cls.dbapi.get_report_timestamp_list(context, filters=filters)
+        return [cls._from_db_object(cls(context), obj) for obj in db_report]
+
+    @base.remotable
+    def create(self):
+        """Create a :class:`report_timestamp` record in the DB"""
+        values = self.obj_get_changes()
+        db_report_timestamp = self.dbapi.create_report_timestamp(values)
+        return self._from_db_object(self, db_report_timestamp)
+
+    @base.remotable
+    def save(self):
+        updates = self.obj_get_changes()
+        db_obj = self.dbapi.update_report_timestamp(self.id, updates)
+        obj = self._from_db_object(self, db_obj, eager=False)
+        self.obj_refresh(obj)
+        self.obj_reset_changes()
+
+    @base.remotable
+    def delete(self):
+        """Soft Delete the :class:`report_timestamp` from the DB"""
+        self.dbapi.soft_delete_report_timestamp(self.id)
