diff --git a/proto/collections/collections.proto b/proto/collections/collections.proto
index a90256e801893d743017e9b3f374321db436265b..5d404f181bace93554844d63159b2130d992c9b2 100644
--- a/proto/collections/collections.proto
+++ b/proto/collections/collections.proto
@@ -19,6 +19,9 @@ message Access {
 
   repeated string deny_read_fields = 8;
   repeated string deny_write_fields = 9;
+
+  // Скрыть коллекцию в интерфейсе от пользователя
+  bool hidden = 10;
 }
 
 message Collection {
@@ -38,9 +41,6 @@ message Collection {
   string schema = 7;
   bool hidden = 13;
 
-  // Коллекция без архива. Включение опции приведет к удалению всех записей в архиве, а функция архивирования станет недоступна 
-  bool no_archive = 35; 
-
   message View {
     string space_id = 1;
     string env_id = 2;
@@ -66,9 +66,22 @@ message Collection {
   repeated string tags = 16;
   Access access = 20; // Возможные действия с коллекцией на основе контекста запроса
 
-  bool no_revisions = 30; // без истории изменений (ревизии). История изменений записей в коллекции не будет сохраняться и вернуться к предыдущим версиям будет нельзя
+  // Коллекция без истории изменений (ревизии)
+  // История изменений записей в коллекции не будет сохраняться и вернуться к предыдущим версиям будет нельзя
+  bool no_revisions = 30;
+
   uint32 max_revisions = 31; // старые ревизии сверх указанного количества будут автоматически удаляться. 0, пусто - без ограничений
   google.protobuf.Duration revision_ttl = 32; // ревизии старше указанного времени хранения будут автоматически удалятся. 0, пусто - без ограничений
+
+  // Коллекция без архива
+  // Включение опции приведет к удалению всех записей в архиве, а функция архивирования станет недоступна
+  bool no_archive = 35;
+
+  // Коллекция без публикации
+  // Все записи коллекции считаются опубликованными, функции публикации и снятия с публикации недоступны.
+  // При включении параметра коллекции "без публикации" все записи, независимо от статуса, будут считаться опубликованными.
+  // При отключении параметра "без публикации" статусы публикации будут восстановлены.
+  bool no_publish = 40;
 }
 
 message CreateRequest {
diff --git a/proto/common/common.proto b/proto/common/common.proto
index 96c102f3f7598c8f3c6bd77ed94fe8a988b65892..5d969b4103cd8e4f760243d39c195a535a0f8f2b 100644
--- a/proto/common/common.proto
+++ b/proto/common/common.proto
@@ -55,6 +55,9 @@ message Rule {
   string write_filter = 9;
   repeated string deny_read_fields = 10;
   repeated string deny_write_fields = 11;
+
+  // скрыть коллекцию в интерфейсе от пользователя
+  bool hidden = 12;
 }
 
 message Collaborator {
diff --git a/proto/extensions/extension.proto b/proto/extensions/extension.proto
index c55171a48f23316f26650a000fa5db6f7ced89ed..e1db1ee67bce29f42140f1bdbfd9f616b683bfbd 100644
--- a/proto/extensions/extension.proto
+++ b/proto/extensions/extension.proto
@@ -155,6 +155,9 @@ message ActionRequest {
   string item_id = 10530;
   repeated string item_ids = 10540;
 
+  // Идентификатор локали в пространстве: поле может использоваться расширением, если действие возможно выполнить на разных локалях 
+  string locale_id = 11050;
+
   // Поля к которым применимо действие. В случае если действие выполняется из списка записей, содержит перечень
   // полей которые пользователь выбрал для отображения в интерфейсе.
   repeated string fields = 10550;
diff --git a/proto/files/files.proto b/proto/files/files.proto
index 45eacf2975f5c8bbc6e9a32268f1b965a51b131c..a09422ce6d0a436c177cdc0e01ed7c04f901fdda 100644
--- a/proto/files/files.proto
+++ b/proto/files/files.proto
@@ -14,6 +14,7 @@ message File {
   uint64 size = 3;      // Размер файла
   string mime_type = 4; // Mime-type файла
   string url = 5;       // Адрес для загрузки файла
+  bool temporary = 6;   // Находится ли файл во временном хранилище
 }
 
 message MultipartUpload {
diff --git a/proto/mailbox/mailbox.proto b/proto/mailbox/mailbox.proto
new file mode 100644
index 0000000000000000000000000000000000000000..1c506760ab45ee39042f7e1097b74d9966cc8673
--- /dev/null
+++ b/proto/mailbox/mailbox.proto
@@ -0,0 +1,68 @@
+syntax = "proto3";
+
+import "google/protobuf/empty.proto";
+import "common/common.proto";
+import "google/protobuf/timestamp.proto";
+
+option go_package = "git.perx.ru/perxis/perxis-go/api/mailbox;mailbox";
+
+package perxis.mailbox;
+
+// Сообщение для уведомления
+message Message {
+  string id = 1; // Уникальный идентификатор уведомления
+  string object_id = 2; // Идентификатор объекта события
+  string from =  3; // Идентификатор отправителя пользователя/сервиса/подсистемы
+  string to = 4; // Идентификатор получателя пользователя/сервиса/подсистемы
+
+  string title = 5; // Заголовок уведомления
+  string message = 6; // Текст уведомления
+  google.protobuf.Timestamp created_at = 7; // Время создания
+  bool is_read = 8; // Статус прочтения
+}
+
+// Отправить уведомление
+message SendMessageRequest {
+  repeated string to = 1; // список получателей пользователей/сервисов/подсистем
+  Message message = 2;
+}
+
+// Запрос на получение уведомлений
+message ListMessageRequest {
+  FindOptions options = 10;
+}
+
+// Ответ на получение уведомлений
+message ListMessageResponse {
+  repeated Message message = 1;
+}
+
+// Пометка уведомлений как прочитанных
+message MarkMessagesRequest {
+  bool unread = 1; // Установить статус сообщения не/прочитано
+  FindOptions options = 10;
+}
+
+
+message FindOptions {
+  string recipient = 1;
+  repeated string message_ids = 3;
+  google.protobuf.Timestamp after = 4;
+  google.protobuf.Timestamp before = 5;
+  optional bool unread = 6;
+  common.FindOptions options = 10;
+}
+
+
+// Сервис уведомлений
+service Mailbox {
+
+  // Отправка уведомления
+  rpc Send(SendMessageRequest) returns(google.protobuf.Empty) {};
+
+  // Получение уведомлений, поле to в Message всегда содержит только получателя из запроса
+  rpc List(ListMessageRequest) returns(ListMessageResponse);
+
+  // Пометка уведомлений как прочитанных
+  rpc MarkAsRead(MarkMessagesRequest) returns(google.protobuf.Empty) {};
+}