diff --git a/frontend_svc/gRPC/FrontendGRpcSvc.cpp b/frontend_svc/gRPC/FrontendGRpcSvc.cpp
index 5009598de034ab680abe721bad5315077bbc7e6b..2129adeb68b75c01a04c3c411f80b11e24264bf1 100644
--- a/frontend_svc/gRPC/FrontendGRpcSvc.cpp
+++ b/frontend_svc/gRPC/FrontendGRpcSvc.cpp
@@ -109,6 +109,36 @@ Status CtaRpcImpl::GetTapes(::grpc::ServerContext *context, const ::google::prot
     return Status::OK;
 }
 
+
+Status CtaRpcImpl::Archive(::grpc::ServerContext* context, const ::cta::eos::Notification* request, ::cta::xrd::Response* response) {
+
+    m_log->log(cta::log::INFO, "Archive request");
+
+    auto storageClassItor = request->file().xattr().find("sys.archive.storage_class");
+    if(request->file().xattr().end() == storageClassItor) {
+        return ::grpc::Status(::grpc::StatusCode::INVALID_ARGUMENT, "storage class is not provided");
+    }
+    const std::string storageClass = storageClassItor->second;
+    m_log->log(cta::log::INFO, "Archive request for " + storageClass);
+
+
+    cta::common::dataStructures::RequesterIdentity requester;
+    requester.name = request->cli().user().username();
+    requester.group = request->cli().user().groupname();
+
+    auto instance = request->wf().instance().name();
+
+    try {
+        uint64_t archiveFileId = m_scheduler->checkAndGetNextArchiveFileId(instance, storageClass, requester, *m_log);
+        std::cout << "New Fileid: " << archiveFileId << std::endl;
+    } catch (cta::exception::Exception &ex) {
+        m_log->log(cta::log::CRIT, ex.getMessageValue());
+        return ::grpc::Status(::grpc::StatusCode::INTERNAL, ex.getMessageValue());
+    }
+
+    return Status::OK;
+}
+
 void CtaRpcImpl::run(const std::string server_address) {
 
     ServerBuilder builder;
diff --git a/frontend_svc/gRPC/FrontendGRpcSvc.h b/frontend_svc/gRPC/FrontendGRpcSvc.h
index b4048d689987d76e11f1eec5d63f01ec0e07dace..7d10e04d5b009823933a3f6fa44c574cac4cb9f8 100644
--- a/frontend_svc/gRPC/FrontendGRpcSvc.h
+++ b/frontend_svc/gRPC/FrontendGRpcSvc.h
@@ -45,6 +45,8 @@ public:
     Status Version(::grpc::ServerContext *context, const ::google::protobuf::Empty *request, ::cta::admin::Version *response);
     Status GetTapes(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter<::cta::admin::TapeLsItem>* writer);
     Status GetStorageClasses(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter<::cta::admin::StorageClassLsItem>* writer);
+
+    Status Archive(::grpc::ServerContext* context, const ::cta::eos::Notification* request, ::cta::xrd::Response* response);
 };
 
 #endif //CTA_FRONTENDGRPCSVC_H
diff --git a/frontend_svc/grpc-proto/protobuf/cta_rpc.proto b/frontend_svc/grpc-proto/protobuf/cta_rpc.proto
index b8091387423353973d858fae8837f4e8fcecaa3e..e6299a67255cebd25a267612ea7be292fdff1068 100644
--- a/frontend_svc/grpc-proto/protobuf/cta_rpc.proto
+++ b/frontend_svc/grpc-proto/protobuf/cta_rpc.proto
@@ -9,6 +9,7 @@ package cta.rpc;
 import "google/protobuf/empty.proto";
 
 import "cta_admin.proto";
+import "cta_eos.proto";
 
 //
 // gRPC interface to CTA frontend
@@ -17,4 +18,5 @@ service CtaRpc {
   rpc Version (google.protobuf.Empty) returns (cta.admin.Version) {}
   rpc GetTapes (google.protobuf.Empty) returns (stream cta.admin.TapeLsItem) {}
   rpc GetStorageClasses (google.protobuf.Empty) returns (stream cta.admin.StorageClassLsItem) {}
+  rpc Archive (cta.eos.Notification) returns (cta.xrd.Response) {}
 }
\ No newline at end of file