diff --git a/proto/references/references.proto b/proto/references/references.proto
index e8ef011f881d9f77f13da7f29ee63a07c3d26a87..a6e7070cb5e5f0bccee6e6933443dd8a83b546bb 100644
--- a/proto/references/references.proto
+++ b/proto/references/references.proto
@@ -24,8 +24,37 @@ message GetResponse {
   repeated Reference notfound = 2;
 }
 
-// References принимает список ссылок на записи и возвращает два списка:
-// список найденных записей и не найденных ссылок
+// PublishRequest запрос на публикацию записей по ссылкам
+message PublishRequest {
+  string space_id = 1; // Пространство публикации
+  string env_id = 2; // Окружение публикации
+  repeated Reference references = 3; // Список ссылок на записи для публикации
+  bool recursive = 4; // Рекурсивно публиковать все ссылки на найденные записи
+  bool force = 5; // Принудительно публиковать записи, даже если они содержат не опубликованные ссылки
+}
+
+// PublishResponse ответ на запрос публикации записей
+message PublishResponse {
+  repeated Reference published = 2; // Список опубликованных записей
+  repeated Reference notfound = 3; // Список не найденных записей
+  repeated Reference unpublished = 4; // Список не опубликованных записей, требующих публикации
+}
+
+// References сервис предназначен для работы со ссылками на записи
 service References  {
+
+  // Get возвращает список записей по ссылкам
   rpc Get(GetRequest) returns(GetResponse) {}
+
+  // Publish принимает список ссылок на записи и публикует их с учетом вложенных ссылок.
+  //
+  // - В случае если флаг `recursive` установлен в true, то будут рекурсивно опубликованы
+  //   все записи на которые ссылаются найденные записи.
+  // - Если флаг `recursive` установлен в false, то будут опубликованы записи
+  //   только из списка `references` в случае если они не содержат не опубликованных
+  //   ссылок. В противном случае возвращается список не опубликованных записей `unpublished`
+  //   которые требуют публикации. Список `published` при этом будет пустым. В случае если флаг
+  //   `force` установлен в true, то записи будут опубликованы даже если они содержат
+  //   не опубликованные ссылки.
+  rpc Publish(PublishRequest) returns(PublishResponse) {}
 }