FastComments.com

FastComments JavaScript/TypeScript SDK


Это официальный SDK на JavaScript/TypeScript для FastComments.

Официальный SDK на JavaScript/TypeScript для API FastComments

Репозиторий

Просмотреть на GitHub


Установка Internal Link

npm install fastcomments-sdk

Документация API Internal Link


Полная справка по API: docs/api/README.md

Совместимость браузера и сервера Internal Link

Этот SDK использует двойные точки входа, чтобы обеспечить оптимальную совместимость и предотвратить ошибки выполнения:

  • fastcomments-sdk/browser - Безопасная для браузера версия с нативным fetch
  • fastcomments-sdk/server - Полная версия для Node.js с поддержкой SSO
  • fastcomments-sdk (по умолчанию) - Только типы, безопасно импортировать в любом месте

Публичные и защищённые API Internal Link

SDK предоставляет три основных класса API:

  • DefaultApi - Защищённые конечные точки, для которых требуется ваш API-ключ для аутентификации. Используйте их для операций на стороне сервера.
  • PublicApi - Публичные конечные точки, к которым можно получить доступ без API-ключа. Их можно вызывать напрямую из браузеров/мобильных устройств и т.д.
  • HiddenApi - Внутренние/административные конечные точки для продвинутых сценариев использования.

Пример: Использование Public API (безопасно для браузера)

import { PublicApi } from 'fastcomments-sdk/browser';

const publicApi = new PublicApi();

// Получить комментарии для страницы (API-ключ не требуется)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Пример: Использование Default API (только на стороне сервера)

import { DefaultApi, Configuration } from 'fastcomments-sdk/server';

const config = new Configuration({
  apiKey: 'your-api-key' // Держите это в секрете!
});
const defaultApi = new DefaultApi(config);

// Получить комментарии с полным доступом администратора
const response = await defaultApi.getComments({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Интеграция SSO (единый вход) Internal Link

FastComments поддерживает SSO для интеграции с вашей существующей системой аутентификации пользователей. Функциональность SSO доступна только в серверном экспорте, так как требует возможностей crypto в Node.js.

Simple SSO (Server-Side Only)

Простой SSO должен генерироваться на стороне сервера и отправляться клиенту:

// Серверный код (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Create simple SSO using the built-in helper  
const userData = {
  username: 'john_doe',
  email: 'john@example.com',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg'
};

const sso = FastCommentsSSO.createSimple(userData, {
  loginURL: '/login',
  logoutURL: '/logout'
});

const ssoToken = sso.createToken();

// Отправьте ssoToken на клиент
// Код на стороне клиента затем может использовать этот токен с браузерным SDK

Защищённый SSO должен реализовываться на стороне сервера и обеспечивает лучшую безопасность:

// Серверный код (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Create secure SSO using the built-in helper
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

const sso = FastCommentsSSO.createSecure('your-api-key', userData, {
  loginURL: '/login',
  logoutURL: '/logout'
});

const ssoConfig = sso.prepareToSend();

// Используйте при вызовах API на сервере
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// Или отправьте ssoConfig клиенту для использования в браузере

Using SSO from Browser (with Server-Generated Token)

// Клиентский код (браузер)
import { PublicApi } from 'fastcomments-sdk/browser';

// Получите SSO токен с вашего серверного эндпоинта
const ssoToken = await fetch('/api/sso-token').then(r => r.json());

const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: ssoToken // Use the server-generated SSO token
});

SSO with Comment Creation

// На стороне сервера: создать SSO и комментарий
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

const sso = FastCommentsSSO.createSecure('your-api-key', userData);
const ssoConfig = sso.prepareToSend();

const response = await publicApi.createCommentPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  broadcastId: 'unique-broadcast-id',
  commentData: {
    comment: 'This is my comment',
    date: Date.now(),
    commenterName: 'John Doe',
    url: 'https://example.com/page',
    urlId: 'page-url-id'
  },
  sso: JSON.stringify(ssoConfig)
});

Типичные сценарии использования Internal Link

Получение комментариев для страницы

const comments = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'article-123'
});

Создание комментария

const newComment = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'article-123',
    comment: 'Great article!',
    commenterName: 'John Doe',
    commenterEmail: 'john@example.com'
  }
});

Голосование за комментарий

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 для голосования «за», -1 для голосования «против»
  }
});

Управление пользователями (требуется API-ключ)

// Поиск пользователей (требуется DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

Живые события (обновления в реальном времени) Internal Link

Подпишитесь на live-события, чтобы получать обновления в реальном времени о комментариях, голосах и других действиях.

События на уровне страницы

Отслеживайте live-события на конкретной странице (комментарии, голоса и т.д.):

import { subscribeToChanges, LiveEvent, LiveEventType } from 'fastcomments-sdk/browser';

const config = {
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
};

// Подписаться на live-события для страницы
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (получить из ответа getComments)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Обновите интерфейс, добавив новый комментарий
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Обновите счетчики голосов в интерфейсе
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // Вернуть true, если событие обработано
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Close the subscription when done
subscription.close();

Подписка на пользовательские события

Отслеживайте события, связанные с пользователем (уведомления, упоминания и т.д.):

import { subscribeToUserFeed, LiveEvent, LiveEventType } from 'fastcomments-sdk/browser';

const userConfig = {
  userIdWS: 'user-session-id', // Получите это из ответа getComments
};

// Подписаться на личную ленту пользователя
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Показать уведомление в интерфейсе
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }

    return true;
  },
  (isConnected: boolean) => {
    console.log('User feed connection:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Закрыть по завершении
userSubscription.close();

Получение userIdWS

Параметр userIdWS требуется для live-событий и может быть получен из ответов API:

const response = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-id'
});

// Извлечь userIdWS из ответа
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Теперь можно подписаться на live-события
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

Идентификаторы трансляций Internal Link

Вы увидите, что в некоторых вызовах API требуется передавать broadcastId. Когда вы получаете события, вы получите этот ID обратно, так что сможете игнорировать событие, если планируете оптимистично применять изменения на клиенте (и, вероятно, вам захочется так сделать, поскольку это обеспечивает лучший опыт). Передайте здесь UUID. Этот ID должен быть достаточно уникальным, чтобы не повториться дважды в рамках одной сессии браузера.

import { v4 as uuidv4 } from 'uuid';

const response = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'page-id',
    comment: 'My comment',
    broadcastId: uuidv4() // Уникальный ID для этой операции
  }
});

Обработка ошибок Internal Link

try {
  const comments = await sdk.publicApi.getCommentsPublic({
    tenantId: 'your-tenant-id',
    urlId: 'page-id'
  });
} catch (error) {
  if (error.response?.status === 404) {
    console.log('Page not found');
  } else {
    console.error('API Error:', error.message);
  }
}

Агрегировать Internal Link

Агрегирует документы, группируя их (если указан groupBy) и применяя несколько операций. Поддерживаются различные операции (например, sum, countDistinct, avg и т.д.).

Параметры

Имя Тип Обязательно Описание
tenantId string Да
aggregationRequest AggregationRequest Да
parentTenantId string Нет
includeStats boolean Нет

Ответ

Возвращает: AggregationResponse


Получить журналы аудита Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
limit number Нет
skip number Нет
order SORTDIR Нет
after number Нет
before number Нет

Ответ

Возвращает: GetAuditLogs200Response


Блокировка из публичного комментария Internal Link


Параметры

Name Type Required Description
tenantId string Да
commentId string Да
publicBlockFromCommentParams PublicBlockFromCommentParams Да
sso string Нет

Ответ

Возвращает: BlockFromCommentPublic200Response


Разблокировать публичный комментарий Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
publicBlockFromCommentParams PublicBlockFromCommentParams Да
sso string Нет

Ответ

Возвращает: UnBlockCommentPublic200Response

Проверенные комментарии для блокировки Internal Link

Параметры

Name Type Required Description
tenantId string Да
commentIds string Да
sso string Нет

Ответ

Возвращает: CheckedCommentsForBlocked200Response

Заблокировать пользователя по комментарию Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да
blockFromCommentParams BlockFromCommentParams Да
userId string Нет
anonUserId string Нет

Ответ

Возвращает: BlockFromCommentPublic200Response


Создать публичный комментарий Internal Link


Параметры

Название Тип Обязательно Описание
tenantId string Да
urlId string Да
broadcastId string Да
commentData CommentData Да
sessionId string Нет
sso string Нет

Ответ

Возвращает: CreateCommentPublic200Response


Удалить комментарий Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
contextUserId string Нет
isLive boolean Нет

Ответ

Возвращает: DeleteComment200Response


Удалить публичный комментарий Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
broadcastId string Да
editKey string Нет
sso string Нет

Ответ

Возвращает: DeleteCommentPublic200Response


Удалить голос за комментарий Internal Link

Параметры

Name Type Required Description
tenantId string Да
commentId string Да
voteId string Да
urlId string Да
broadcastId string Да
editKey string Нет
sso string Нет

Ответ

Возвращает: DeleteCommentVote200Response


Пометить комментарий Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
userId string Нет
anonUserId string Нет

Ответ

Возвращает: FlagComment200Response


Получить комментарий Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetComment200Response


Получить комментарии Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
page number Нет
limit number Нет
skip number Нет
asTree boolean Нет
skipChildren number Нет
limitChildren number Нет
maxTreeDepth number Нет
urlId string Нет
userId string Нет
anonUserId string Нет
contextUserId string Нет
hashTag string Нет
parentId string Нет
direction SortDirections Нет

Ответ

Возвращает: GetComments200Response


Получить публичные комментарии Internal Link

req tenantId urlId

Параметры

Name Type Обязательно Описание
tenantId string Да
urlId string Да
page number Нет
direction SortDirections Нет
sso string Нет
skip number Нет
skipChildren number Нет
limit number Нет
limitChildren number Нет
countChildren boolean Нет
fetchPageForCommentId string Нет
includeConfig boolean Нет
countAll boolean Нет
includei10n boolean Нет
locale string Нет
modules string Нет
isCrawler boolean Нет
includeNotificationCount boolean Нет
asTree boolean Нет
maxTreeDepth number Нет
useFullTranslationIds boolean Нет
parentId string Нет
searchText string Нет
hashTags Array Нет
userId string Нет
customConfigStr string Нет
afterCommentId string Нет
beforeCommentId string Нет

Ответ

Возвращает: GetCommentsPublic200Response


Получить текст комментария Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
editKey string Нет
sso string Нет

Ответ

Возвращает: GetCommentText200Response


Получить имена пользователей, проголосовавших за комментарий Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
dir number Да
sso string Нет

Ответ

Возвращает: GetCommentVoteUserNames200Response


Заблокировать комментарий Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Нет

Ответ

Возвращает: LockComment200Response


Прикрепить комментарий Internal Link

Параметры

Name Type Required Description
tenantId string Да
commentId string Да
broadcastId string Да
sso string Нет

Ответ

Возвращает: PinComment200Response


Сохранить комментарий Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createCommentParams CreateCommentParams Да
isLive boolean Нет
doSpamCheck boolean Нет
sendEmails boolean Нет
populateNotifications boolean Нет

Ответ

Возвращает: SaveComment200Response


Массовое сохранение комментариев Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createCommentParams Array Да
isLive boolean Нет
doSpamCheck boolean Нет
sendEmails boolean Нет
populateNotifications boolean Нет

Ответ

Возвращает: Array<SaveComment200Response

Установить текст комментария Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
broadcastId string Да
commentTextUpdateRequest CommentTextUpdateRequest Да
editKey string Нет
sso string Нет

Ответ

Возвращает: SetCommentText200Response

Разблокировать пользователя по комментарию Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
unBlockFromCommentParams UnBlockFromCommentParams Да
userId string Нет
anonUserId string Нет

Ответ

Возвращает: UnBlockCommentPublic200Response


Снять флаг с комментария Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
userId string Нет
anonUserId string Нет

Ответ

Возвращает: FlagComment200Response


Разблокировать комментарий Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Нет

Ответ

Возвращает: LockComment200Response


Открепить комментарий Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Нет

Ответ

Возвращает: PinComment200Response


Обновить комментарий Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
body PickAPICommentUpdatableCommentFields Да
contextUserId string Нет
doSpamCheck boolean Нет
isLive boolean Нет

Ответ

Возвращает: FlagCommentPublic200Response


Проголосовать за комментарий Internal Link

Параметры

Name Type Required Description
tenantId string Да
commentId string Да
urlId string Да
broadcastId string Да
voteBodyParams VoteBodyParams Да
sessionId string Нет
sso string Нет

Ответ

Возвращает: VoteComment200Response


Добавить конфигурацию домена Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
addDomainConfigParams AddDomainConfigParams Да

Ответ

Возвращает: AddDomainConfig200Response


Удалить конфигурацию домена Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
domain string Да

Ответ

Возвращает: DeleteDomainConfig200Response


Получить конфигурацию домена Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
domain string Да

Ответ

Возвращает: GetDomainConfig200Response


Получить конфигурации доменов Internal Link

Параметры

Name Type Required Description
tenantId string Да

Ответ

Возвращает: GetDomainConfigs200Response


Применить патч к конфигурации домена Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
domainToUpdate string Да
patchDomainConfigParams PatchDomainConfigParams Да

Ответ

Возвращает: GetDomainConfig200Response


Заменить конфигурацию домена Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
domainToUpdate string Да
updateDomainConfigParams UpdateDomainConfigParams Да

Ответ

Возвращает: GetDomainConfig200Response


Создать шаблон письма Internal Link

Параметры

Name Type Required Description
tenantId string Да
createEmailTemplateBody CreateEmailTemplateBody Да

Ответ

Возвращает: CreateEmailTemplate200Response

Пример

Пример createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_7a9f2b3d";
3
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Comment Notification",
6 subject: "New comment on your article: ",
7 htmlBody: "<p> left a comment:</p><blockquote></blockquote>",
8 enabled: true,
9 defaultLocale: "en-US",
10 metadata: { createdBy: "admin@example.com", purpose: "notify_comment" } // необязательные дополнительные данные
11};
12
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

Удалить шаблон письма Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_4b2f6a-4b2f6a2d";
3const templateId: string = "email_template_9f8b7c3e";
4const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
5const status: APIStatus | undefined = result?.status
6

Удалить ошибку рендеринга шаблона письма Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да
errorId string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteEmailTemplateRenderError
Copy Copy
1
2const tenantId: string = "tenant_8f3b2a9c";
3const id: string = "template_4a1c9f7e";
4const errorId: string = "err_20260112_abc123";
5const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
6

Получить шаблон письма Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetEmailTemplate200Response

Пример

Пример getEmailTemplate
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-enterprises-123';
4 const id: string = 'welcome-email-template-v2';
5 const locale: string | undefined = 'en-US'; // пример необязательного параметра
6 const template: GetEmailTemplate200Response = await getEmailTemplate(tenantId, id);
7 console.log(template, locale);
8})();
9

Получить определения шаблонов писем Internal Link

Parameters

Name Type Required Description
tenantId string Да

Response

Возвращает: GetEmailTemplateDefinitions200Response

Example

Пример getEmailTemplateDefinitions
Copy Copy
1
2const tenantId: string = 'acme-enterprises-78f2';
3const emailTemplates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4

Получить ошибки рендеринга шаблонов писем Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
skip number Нет

Ответ

Возвращает: GetEmailTemplateRenderErrors200Response

Пример

Пример getEmailTemplateRenderErrors
Copy Copy
1
2const tenantId: string = "tenant_7b3f2a9c";
3const id: string = "tmpl_4f1b2c9e";
4const skip: number = 25;
5const result: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
6

Получить шаблоны писем Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
skip number Нет

Ответ

Возвращает: GetEmailTemplates200Response

Пример

Пример getEmailTemplates
Copy Copy
1
2const tenantId: string = 'tenant_8f4d2b7c';
3const responseWithoutSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
4const skip: number = 20;
5const responseWithSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
6

Сформировать шаблон письма Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
renderEmailTemplateBody RenderEmailTemplateBody Да
locale string Нет

Ответ

Возвращает: RenderEmailTemplate200Response

Пример

Пример renderEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-7f3';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'new-comment-notification',
5 recipientEmail: 'jane.doe@acme.com',
6 variables: {
7 commenterName: 'Samir Patel',
8 commentText: 'I found this article really helpful — thanks for sharing!',
9 threadUrl: 'https://acme.com/blog/123#comments'
10 },
11 includeUnsubscribeLink: true
12};
13const locale: string = 'en-US';
14const response: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
15

Обновить шаблон письма Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateEmailTemplateBody UpdateEmailTemplateBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const id: string = 'email_tpl_42b7a9';
4const updateEmailTemplateBody: UpdateEmailTemplateBody = {
5 name: 'Comment Flag Notification',
6 subject: 'A comment was flagged on acme.com',
7 html: '<p>A comment by was flagged. Review at </p>',
8 replyTo: 'noreply@acme.com', // необязательное поле (пример)
9 enabled: true,
10 customConfig: { priority: 'high' } // необязательные пользовательские параметры
11};
12const response: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
13

Получить журнал событий Internal Link

req tenantId urlId userIdWS

Параметры

Имя Тип Обязательно Описание
tenantId string Да
urlId string Да
userIdWS string Да
startTime number Да
endTime number Да

Ответ

Возвращает: GetEventLog200Response

Получить глобальный журнал событий Internal Link

req tenantId urlId userIdWS

Параметры

Имя Тип Обязательно Описание
tenantId string Да
urlId string Да
userIdWS string Да
startTime number Да
endTime number Да

Ответ

Возвращает: GetEventLog200Response

Создать пост в ленте Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Да
createFeedPostParams CreateFeedPostParams Да
broadcastId string Нет
isLive boolean Нет
doSpamCheck boolean Нет
skipDupCheck boolean Нет

Ответ

Возвращает: CreateFeedPost200Response


Создать публичный пост в ленте Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
createFeedPostParams CreateFeedPostParams Да
broadcastId string Нет
sso string Нет

Ответ

Возвращает: CreateFeedPostPublic200Response


Удалить публичный пост в ленте Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
postId string Да
broadcastId string Нет
sso string Нет

Ответ

Возвращает: DeleteFeedPostPublic200Response


Получить посты в ленте Internal Link

req tenantId afterId

Параметры

Имя Тип Обязательно Описание
tenantId string Да
afterId string Нет
limit number Нет
tags Array Нет

Ответ

Возвращает: GetFeedPosts200Response


Получить публичные посты в ленте Internal Link

req tenantId afterId

Параметры

Имя Тип Обязательно Описание
tenantId string Да
afterId string Нет
limit number Нет
tags Array Нет
sso string Нет
isCrawler boolean Нет
includeUserInfo boolean Нет

Ответ

Возвращает: GetFeedPostsPublic200Response


Получить статистику постов ленты Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
postIds Array Да
sso string Нет

Ответ

Возвращает: GetFeedPostsStats200Response


Получить публичные реакции пользователей Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
postIds Array Нет
sso string Нет

Ответ

Возвращает: GetUserReactsPublic200Response


Поставить реакцию на публичный пост Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Да
postId string Да
reactBodyParams ReactBodyParams Да
isUndo boolean Нет
broadcastId string Нет
sso string Нет

Ответ

Возвращает: ReactFeedPostPublic200Response


Обновить пост в ленте Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
feedPost FeedPost Да

Ответ

Возвращает: FlagCommentPublic200Response


Обновить публичный пост в ленте Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
postId string Да
updateFeedPostParams UpdateFeedPostParams Да
broadcastId string Нет
sso string Нет

Ответ

Возвращает: CreateFeedPostPublic200Response


Пометить публичный комментарий Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
commentId string Да
isFlagged boolean Да
sso string Нет

Ответ

Возвращает: FlagCommentPublic200Response


Добавить хэштег Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string No
createHashTagBody CreateHashTagBody No

Ответ

Возвращает: AddHashTag200Response

Пример

Пример addHashTag
Copy Copy
1
2const tenantId: string = 'tenant_7b2f6c2b';
3const createBody: CreateHashTagBody = {
4 tag: 'feature-request',
5 label: 'Feature Request',
6 description: 'Requests for new functionality in the web client',
7 isActive: true,
8 visibility: 'public',
9 allowedDomains: ['example.com', 'internal.example.com']
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createBody);
12const resultWithoutTenant: AddHashTag200Response = await addHashTag(undefined, {
13 tag: 'bug',
14 label: 'Bug',
15 description: 'Use for reproducible bugs reported by users',
16 isActive: true,
17 visibility: 'public'
18});
19

Массовое добавление хэштегов Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Нет
bulkCreateHashTagsBody BulkCreateHashTagsBody Нет

Ответ

Возвращает: AddHashTagsBulk200Response

Пример

Пример addHashTagsBulk
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_3f2b9a';
4 const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
5 tags: [
6 { name: 'performance', description: 'Comments about site performance', visibleToModeratorsOnly: false },
7 { name: 'feature-request', description: 'Requests for new features', visibleToModeratorsOnly: true }
8 ]
9 };
10 const result: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
11 const resultWithNoTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBody);
12 console.log(result, resultWithNoTenant);
13})();
14

Удалить хэштег Internal Link

Параметры

Name Type Обязательный Описание
tag string Да
tenantId string Нет
deleteHashTagRequest DeleteHashTagRequest Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteHashTag
Copy Copy
1
2const tag: string = 'breaking-news';
3const tenantId: string = 'tenant_42';
4const deleteReq: DeleteHashTagRequest = { removedBy: 'moderator_jane', reason: 'off-topic for this community', deleteAssociatedComments: true } as DeleteHashTagRequest;
5const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteReq);
6

Получить хэштеги Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
page number Нет

Ответ

Возвращает: GetHashTags200Response

Пример

Пример getHashTags
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-7a9f";
4 const tagsPage1: GetHashTags200Response = await getHashTags(tenantId);
5 const tagsPage2: GetHashTags200Response = await getHashTags(tenantId, 2);
6 console.log(tagsPage1, tagsPage2);
7})();
8

Применить патч к хэштегу Internal Link

Параметры

Имя Тип Обязательно Описание
tag string Да
tenantId string Нет
updateHashTagBody UpdateHashTagBody Нет

Ответ

Возвращает: PatchHashTag200Response

Пример

Пример patchHashTag
Copy Copy
1
2const tag: string = 'release-2026';
3const tenantId: string = 'tenant_42';
4const updateHashTagBody: UpdateHashTagBody = {
5 displayName: 'Release 2026',
6 description: 'Discussions and notes for the 2026 product release',
7 isActive: true
8};
9const result: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
10

Создать модератора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createModeratorBody CreateModeratorBody Да

Ответ

Возвращает: CreateModerator200Response

Пример

Пример createModerator
Copy Copy
1
2const tenantId: string = "tenant_prod_us-east_01";
3const createModeratorBody: CreateModeratorBody = {
4 email: "maria.lopez+mod@fastcompany.com",
5 username: "mlopez_mod",
6 displayName: "Maria Lopez",
7 roles: ["content_moderator"],
8 notifyOnReports: true,
9 metadata: { region: "us-east", team: "community" }
10};
11const result: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
12

Удалить модератора Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
sendEmail string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteModerator
Copy Copy
1
2const tenantId: string = 'acme-tenant-987';
3const moderatorId: string = 'mod-78b2c9a4-3f1e-4d6a';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, moderatorId, sendEmail);
6

Получить модератора Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да

Ответ

Возвращает: GetModerator200Response

Пример

Пример getModerator
Copy Copy
1
2const tenantId: string = "tenant_eu_4f8d2b9e";
3const maybeModeratorId: string | undefined = "mod_91c3b7a2"; // необязательный источник (может быть undefined)
4const moderator: GetModerator200Response = await getModerator(tenantId, maybeModeratorId!);
5

Получить модераторов Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
skip number Нет

Ответ

Возвращает: GetModerators200Response

Пример

Пример getModerators
Copy Copy
1
2const tenantId: string = "tenant_corp_7f9b2a";
3const moderatorsPage1: GetModerators200Response = await getModerators(tenantId);
4const skip: number = 50;
5const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, skip);
6

Отправить приглашение Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
fromName string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример sendInvite
Copy Copy
1
2const tenantId: string = 'acme-tenant-004';
3const id: string = 'comment_9b7f3a2c';
4const fromName: string = 'María Hernández';
5const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
6

Обновить модератора Internal Link


Параметры

Name Type Required Description
tenantId string Да
id string Да
updateModeratorBody UpdateModeratorBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateModerator
Copy Copy
1
2const tenantId: string = '4f8a9c2e-3b6d-4d9e-8c2f-1a2b3c4d5e6f';
3const id: string = 'mod_92a7c4';
4const updateModeratorBodyMinimal: UpdateModeratorBody = { displayName: 'Sophia Patel' };
5const updateModeratorBodyWithOptional: UpdateModeratorBody = {
6 displayName: 'Sophia Patel',
7 email: 'sophia.patel@newsroom.example',
8 permissions: ['remove_comments', 'ban_user'],
9 notifyOnFlag: true // показан необязательный параметр
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBodyWithOptional);
12

Удалить счётчик уведомлений Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_7f3a1b2c4d9e';
3const notificationId: string = 'notif_8c9d0a1b2f3e4b7';
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, notificationId);
5

Получить кешированный счётчик уведомлений Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да

Ответ

Возвращает: GetCachedNotificationCount200Response

Пример

Пример getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const baseNotificationId: string = 'notif-000123';
4const idSuffix: string | undefined = undefined; // пример необязательного параметра
5const notificationId: string = idSuffix ? `${baseNotificationId}-${idSuffix}` : baseNotificationId;
6const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, notificationId);
7console.log(result);
8

Получить количество уведомлений Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
userId string Нет
urlId string Нет
fromCommentId string Нет
viewed boolean Нет
type string Нет

Ответ

Возвращает: GetNotificationCount200Response

Пример

Пример getNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_8a9b7c';
3const userId: string = 'user_42b3c';
4const urlId: string = 'https://blog.example.com/posts/introducing-new-editor';
5const fromCommentId: string | undefined = undefined;
6const viewed: boolean = false;
7const type: string = 'mention';
8const result: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, fromCommentId, viewed, type);
9

Получить уведомления Internal Link

Параметры

Name Type Required Description
tenantId string Да
userId string Нет
urlId string Нет
fromCommentId string Нет
viewed boolean Нет
type string Нет
skip number Нет

Ответ

Возвращает: GetNotifications200Response

Пример

Пример getNotifications
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_8f3b1a2c';
4 const userId: string = 'user_42';
5 const urlId: string = 'https://news.example.com/articles/2026/01/11/comment-thread';
6 const fromCommentId: string = 'cmt_9a7b';
7 const viewed: boolean = false;
8 const type: string = 'mention';
9 const skip: number = 0;
10 const response: GetNotifications200Response = await getNotifications(tenantId, userId, urlId, fromCommentId, viewed, type, skip);
11 console.log(response);
12})();
13

Обновить уведомление Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateNotificationBody UpdateNotificationBody Да
userId string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateNotification
Copy Copy
1
2const tenantId: string = "tenant_86a7b3";
3const id: string = "notif_20260112_01";
4const userId: string = "moderator_42";
5const updateNotificationBody: UpdateNotificationBody = {
6 name: "Flagged comment alert",
7 enabled: true,
8 channels: ["email"],
9 recipients: ["mod-team@news-site.com"],
10 threshold: 1
11};
12
13(async () => {
14 const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
15 console.log(result);
16})();
17

Добавить страницу Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
createAPIPageData CreateAPIPageData Да

Ответ

Возвращает: AddPageAPIResponse


Удалить страницу Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: DeletePageAPIResponse

Получить страницу по URLId Internal Link


Параметры

Название Тип Обязательно Описание
tenantId string Да
urlId string Да

Ответ

Возвращает: GetPageByURLIdAPIResponse


Получить страницы Internal Link


Параметры

Name Type Required Description
tenantId string Да

Ответ

Возвращает: GetPagesAPIResponse


Частично обновить страницу Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateAPIPageData UpdateAPIPageData Да

Ответ

Возвращает: PatchPageAPIResponse


Удалить ожидающее событие вебхука Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deletePendingWebhookEvent
Copy Copy
1
2const tenantId: string = 'tenant_7f4e2b';
3const pendingEventId: string = '9f7b6a8c-3b2a-4c0d-a8e5-1234567890ab';
4const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, pendingEventId);
5console.log(result);
6

Получить количество ожидающих событий вебхука Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Нет
externalId string Нет
eventType string Нет
type string Нет
domain string Нет
attemptCountGT number Нет

Ответ

Возвращает: GetPendingWebhookEventCount200Response

Пример

Пример использования getPendingWebhookEventCount
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9c3b2b';
4 const commentId: string = 'cmt_f4a1b2';
5 const externalId: string = 'ext-789';
6 const eventType: string = 'comment.created';
7 const type: string = 'delivery';
8 const domain: string = 'app.example.com';
9 const attemptCountGT: number = 2;
10
11 const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
12 tenantId,
13 commentId,
14 externalId,
15 eventType,
16 type,
17 domain,
18 attemptCountGT
19 );
20
21 console.log(result);
22})();
23

Получить ожидающие события вебхука Internal Link

Параметры

Name Type Required Description
tenantId string Да
commentId string Нет
externalId string Нет
eventType string Нет
type string Нет
domain string Нет
attemptCountGT number Нет
skip number Нет

Ответ

Возвращает: GetPendingWebhookEvents200Response

Пример

Пример getPendingWebhookEvents
Copy Copy
1
2const tenantId: string = "tenant_78b2f1";
3const commentId: string = "cmt_0042";
4const eventType: string = "comment.created";
5const domain: string = "blog.example.com";
6const attemptCountGT: number = 1;
7const skip: number = 0;
8
9const pending: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
10 tenantId,
11 commentId,
12 undefined, // externalId (внешний идентификатор)
13 eventType,
14 undefined, // type (тип)
15 domain,
16 attemptCountGT,
17 skip
18);
19

Создать конфигурацию вопроса Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
createQuestionConfigBody CreateQuestionConfigBody Да

Ответ

Возвращает: CreateQuestionConfig200Response

Пример

Пример createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_live_7f8b3c2a";
3const customOptions: QuestionConfigCustomOptionsInner[] = [
4 { value: "under18", label: "Under 18" },
5 { value: "18-24", label: "18-24" },
6 { value: "25-34", label: "25-34", defaultSelected: true }
7];
8const createQuestionConfigBody: CreateQuestionConfigBody = {
9 key: "age_range",
10 label: "What is your age range?",
11 required: false, // необязательно: демонстрация пропуска по сравнению с включением необязательных полей
12 renderingType: QuestionRenderingType.Dropdown,
13 options: customOptions,
14 whenSave: QuestionWhenSave.Always
15};
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

Удалить конфигурацию вопроса Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteQuestionConfig
Copy Copy
1
2async function deleteIfPresent(tenantId: string, id?: string): Promise<FlagCommentPublic200Response | null> {
3 if (!id) return null;
4 const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5 return result;
6}
7const tenantId: string = 'tenant_acme_001';
8const optionalConfigId: string | undefined = 'qcfg_20260112_01';
9(async (): Promise<void> => {
10 const deleted: FlagCommentPublic200Response | null = await deleteIfPresent(tenantId, optionalConfigId);
11 void deleted;
12})();
13

Получить конфигурацию вопроса Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetQuestionConfig200Response

Пример

Пример getQuestionConfig
Copy Copy
1
2const tenantId: string = 'acme-corp-47';
3const questionId: string = 'q-2026-01-12-01';
4const result: GetQuestionConfig200Response = await getQuestionConfig(tenantId, questionId);
5function summarizeConfig(cfg: GetQuestionConfig200Response, includeMetadata?: boolean): QuestionConfig | undefined {
6 // includeMetadata необязателен; реализация опущена ради краткости
7 return undefined;
8}
9const summarizedWithMeta: QuestionConfig | undefined = summarizeConfig(result, true);
10const summarizedDefault: QuestionConfig | undefined = summarizeConfig(result);
11

Получить конфигурации вопросов Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
skip number Нет

Ответ

Возвращает: GetQuestionConfigs200Response

Пример

Пример getQuestionConfigs
Copy Copy
1
2const tenantId: string = 'tenant-42a7b9';
3const firstPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const secondPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 50);
5

Обновить конфигурацию вопроса Internal Link


Параметры

Name Type Required Description
tenantId string Да
id string Да
updateQuestionConfigBody UpdateQuestionConfigBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateQuestionConfig
Copy Copy
1
2const tenantId: string = 'tenant-82b3a';
3const id: string = 'qst-20260112';
4const updateQuestionConfigBody: UpdateQuestionConfigBody = { label: 'Age verification', required: true, renderingType: 'singleChoice', customOptions: [{ value: '18-24', label: '18–24' }] } as UpdateQuestionConfigBody;
5const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
6

Создать результат вопроса Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
createQuestionResultBody CreateQuestionResultBody Да

Ответ

Возвращает: CreateQuestionResult200Response

Пример

Пример createQuestionResult
Copy Copy
1
2const tenantId: string = "fc_tenant_7a3c_us-east-1";
3const metaItem: MetaItem = { key: "referrer", value: "/blog/how-to-comment" };
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "q_42",
6 commenterId: "user_1984",
7 answer: "yes",
8 score: 4,
9 meta: [metaItem] // пример необязательных метаданных
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

Удалить результат вопроса Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteQuestionResult
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const questionResultId: string = '6f1a2b3c-4d5e-6789-abcd-ef0123456789';
4const deletedResult: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, questionResultId);
5console.log(deletedResult);
6

Получить результат вопроса Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да

Ответ

Возвращает: GetQuestionResult200Response

Пример

Пример getQuestionResult
Copy Copy
1
2const tenantId: string = "3fa85f64-5717-4562-b3fc-2c963f66afa6";
3const questionId: string = "question_72f1b9c3a4";
4const result: GetQuestionResult200Response = await getQuestionResult(tenantId, questionId);
5console.log(result);
6

Получить результаты вопросов Internal Link

Параметры

Name Type Обязательный Описание
tenantId string Да
urlId string Нет
userId string Нет
startDate string Нет
questionId string Нет
questionIds string Нет
skip number Нет

Ответ

Возвращает: GetQuestionResults200Response

Пример

Пример getQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlId: string = 'news/2025/fastcomments-release';
4const userId: string = 'user_8b7f3c';
5const startDate: string = '2025-01-01T00:00:00Z';
6const questionIds: string = 'q123,q124';
7const skip: number = 20;
8const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
9

Обновить результат вопроса Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateQuestionResultBody UpdateQuestionResultBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_84f2b9';
3const id: string = 'question_3a7c1d';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 result: { verdict: 'helpful', confidence: 0.92 },
6 reviewer: { id: 'mod_102', name: 'Aisha Rahman' },
7 notifyUser: true // необязательный параметр включён
8};
9const response: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
10

Агрегировать результаты вопросов Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
questionId string Нет
questionIds Array Нет
urlId string Нет
timeBucket AggregateTimeBucket Нет
startDate Date Нет
forceRecalculate boolean Нет

Ответ

Возвращает: AggregateQuestionResults200Response


Массовая агрегация результатов вопросов Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Да
forceRecalculate boolean Нет

Ответ

Возвращает: BulkAggregateQuestionResults200Response


Объединить комментарии с результатами вопросов Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
questionId string Нет
questionIds Array Нет
urlId string Нет
startDate Date Нет
forceRecalculate boolean Нет
minValue number Нет
maxValue number Нет
limit number Нет

Ответ

Возвращает: CombineCommentsWithQuestionResults200Response


Добавить пользователя SSO Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createAPISSOUserData CreateAPISSOUserData Да

Ответ

Возвращает: AddSSOUserAPIResponse


Удалить пользователя SSO Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
deleteComments boolean Нет
commentDeleteMode string Нет

Ответ

Возвращает: DeleteSSOUserAPIResponse


Получить пользователя SSO по email Internal Link


Параметры

Имя Тип Требуется Описание
tenantId string Да
email string Да

Ответ

Возвращает: GetSSOUserByEmailAPIResponse


Получить пользователя SSO по id Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetSSOUserByIdAPIResponse


Получить пользователей SSO Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
skip number Нет

Ответ

Возвращает: GetSSOUsers200Response


Частично обновить пользователя SSO Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateAPISSOUserData UpdateAPISSOUserData Да
updateComments boolean Нет

Ответ

Возвращает: PatchSSOUserAPIResponse


Заменить пользователя SSO Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
updateAPISSOUserData UpdateAPISSOUserData Да
updateComments boolean Нет

Ответ

Возвращает: PutSSOUserAPIResponse


Создать подписку Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createAPIUserSubscriptionData CreateAPIUserSubscriptionData Да

Ответ

Возвращает: CreateSubscriptionAPIResponse


Удалить подписку Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да
userId string Нет

Ответ

Возвращает: DeleteSubscriptionAPIResponse


Получить подписки Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
userId string Нет

Ответ

Возвращает: GetSubscriptionsAPIResponse


Получить ежедневное использование арендатора Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
yearNumber number Нет
monthNumber number Нет
dayNumber number Нет
skip number Нет

Ответ

Возвращает: GetTenantDailyUsages200Response

Пример

Пример getTenantDailyUsages
Copy Copy
1
2const tenantId: string = "tenant_89f3c2-prod";
3const yearNumber: number = 2026;
4const monthNumber: number = 1;
5const skip: number = 0;
6const usages: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, yearNumber, monthNumber, undefined, skip);
7

Создать пакет арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createTenantPackageBody CreateTenantPackageBody Да

Ответ

Возвращает: CreateTenantPackage200Response

Пример

Пример createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_7f3b1a9c";
3const tenantPackage: TenantPackage = { id: "pkg_001", name: "Premium Plan", seats: 100 };
4const customConfig: CustomConfigParameters = { enableImages: true, maxImageSizeMb: 10 };
5const createTenantPackageBody: CreateTenantPackageBody = {
6 packageName: "Premium Plus",
7 tenantPackage,
8 customConfig,
9 notes: "Enable advanced moderation and image uploads" // необязательный параметр (демонстрация)
10};
11const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
12

Удалить пакет арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'fc-tenant-8a9c2b';
3const packageId: string = 'pkg-47f3c9';
4const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
5

Получить пакет арендатора Internal Link

Parameters

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Response

Возвращает: GetTenantPackage200Response

Example

Пример getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_westus_01';
3const packageId: string = 'pkg_premium_annual_2026';
4interface FetchOptions { includeArchived?: boolean }
5const options: FetchOptions = { includeArchived: false };
6const result: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
7

Получить пакеты арендатора Internal Link

Параметры

Name Type Required Description
tenantId string Да
skip number Нет

Ответ

Возвращает: GetTenantPackages200Response

Пример

Пример getTenantPackages
Copy Copy
1
2const tenantId: string = 'tenant_4f3a9c2d';
3const skip: number = 25;
4const packagesResponse: GetTenantPackages200Response = await getTenantPackages(tenantId);
5const pagedPackagesResponse: GetTenantPackages200Response = await getTenantPackages(tenantId, skip);
6

Заменить пакет арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
replaceTenantPackageBody ReplaceTenantPackageBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример replaceTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant-9b72f2';
3const packageId: string = 'pkg-prod-v2';
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 name: 'Premium Moderation Bundle',
6 enabled: true,
7 maxModerators: 4,
8 // необязательные поля, такие как "notes" или "trialExpiry", намеренно опущены здесь
9} as ReplaceTenantPackageBody;
10const result: FlagCommentPublic200Response = await replaceTenantPackage(
11 tenantId,
12 packageId,
13 replaceTenantPackageBody
14);
15

Обновить пакет арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateTenantPackageBody UpdateTenantPackageBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_8a4f1c9b';
3const packageId: string = 'pkg_premium_v2';
4const customConfig: CustomConfigParameters = { enableRichText: true, maxImagesPerComment: 5 };
5const updateTenantPackageBody: UpdateTenantPackageBody = {
6 name: 'Premium Moderation Package',
7 enabled: true,
8 description: 'Adds advanced spam rules, image moderation and priority support',
9 customConfigParameters: customConfig
10};
11const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, packageId, updateTenantPackageBody);
12

Создать пользователя арендатора Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
createTenantUserBody CreateTenantUserBody Да

Ответ

Возвращает: CreateTenantUser200Response

Пример

Пример createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_9a8c7e4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "julia.smith@acme-corp.com",
5 displayName: "Julia Smith",
6 role: "moderator",
7 password: "Str0ngP@ssword!23",
8 sendInviteEmail: true, // продемонстрирован необязательный параметр
9 locale: "en-US",
10 metadata: { department: "Customer Success" }
11};
12const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
13

Удалить пользователя арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
deleteComments string Нет
commentDeleteMode string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2a9c';
3const id: string = 'user_4e5f6a7b';
4const deleteComments: string = 'true';
5const commentDeleteMode: string = 'hard';
6
7const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8

Получить пользователя арендатора Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да

Ответ

Возвращает: GetTenantUser200Response

Пример

Пример getTenantUser
Copy Copy
1
2const tenantId: string = "tenant_9f7d4b2a-1c3e";
3const id: string = "user_6a12b3c4d5";
4const includeProfile: boolean | undefined = true; // пример необязательного параметра
5const response: GetTenantUser200Response = await getTenantUser(tenantId, id);
6console.log("Tenant user fetched", response);
7

Получить пользователей арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
skip number Нет

Ответ

Возвращает: GetTenantUsers200Response

Пример

Пример getTenantUsers
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2c1a';
3const skip: number = 50;
4const firstPage: GetTenantUsers200Response = await getTenantUsers(tenantId);
5const nextPage: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
6

Заменить пользователя арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
replaceTenantUserBody ReplaceTenantUserBody Да
updateComments string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

replaceTenantUser Пример
Copy Copy
1
2const tenantId: string = "tenant_5f8b9a";
3const id: string = "user_92bf21";
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 email: "jane.doe@acme-corp.com",
6 displayName: "Jane Doe",
7 externalId: "acme|12345",
8 roles: ["commenter", "moderator"],
9 isActive: true,
10 metadata: { team: "product", location: "NYC" }
11};
12const updateComments: string = "Update historical comments to reflect new display name";
13const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
14

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
redirectURL string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример sendLoginLink
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const id: string = 'user_9f3b2a';
4const redirectURL: string = 'https://app.example.com/onboard?source=login-email';
5const result: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
6

Обновить пользователя арендатора Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да
updateTenantUserBody UpdateTenantUserBody Да
updateComments string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_84f3b2';
3const id: string = 'user_7a9d1c';
4const updateComments: string = 'Promoted to moderator and updated contact email';
5const updateTenantUserBody: UpdateTenantUserBody = {
6 email: 'jane.doe+mod@example.com',
7 displayName: 'Jane D.',
8 roles: ['moderator'],
9 isBanned: false,
10 metadata: { department: 'community' }
11};
12const result: FlagCommentPublic200Response = await updateTenantUser(tenantId, id, updateTenantUserBody, updateComments);
13

Создать арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
createTenantBody CreateTenantBody Да

Response

Возвращает: CreateTenant200Response

Пример

Пример createTenant
Copy Copy
1
2const tenantId: string = "acme-corporation";
3const billing: BillingInfo = { planId: "pro", billingContactEmail: "finance@acme-corp.com", currency: "USD" };
4const domainConfig: APIDomainConfiguration = { primaryDomain: "comments.acme-corp.com", allowedDomains: ["acme-corp.com", "www.acme-corp.com"], enforceHttps: true };
5const importedSites: ImportedSiteType[] = [{ siteId: "site-001", url: "https://blog.acme-corp.com", name: "Acme Blog" }]; // необязательно
6const createBody: CreateTenantBody = { tenantName: "Acme Corporation", adminEmail: "admin@acme-corp.com", billingInfo: billing, domainConfiguration: domainConfig, importedSites, enableModeration: true };
7const response: CreateTenant200Response = await createTenant(tenantId, createBody);
8

Удалить арендатора Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
id string Да
sure string Нет

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример deleteTenant
Copy Copy
1
2const tenantId: string = "tenant_7b3f1a9e";
3const id: string = "flag_9c4d2b1a";
4const sure: string = "yes_confirm_delete";
5
6const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
7console.log(result);
8

Получить арендатора Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetTenant200Response

Пример

Пример getTenant
Copy Copy
1
2const tenantId: string = "tenant_acme_corp";
3const id: string = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
4interface GetOptions { includeDeleted?: boolean; locale?: string; }
5const options: GetOptions = { locale: "en-US" };
6const result: GetTenant200Response = await getTenant(tenantId, id);
7

Получить арендаторов Internal Link

Параметры

Имя Тип Обязательный Описание
tenantId string Да
meta string Нет
skip number Нет

Ответ

Возвращает: GetTenants200Response

Пример

Пример getTenants
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9f2d1b7c';
4 const meta: string = 'include=domains,billing,customConfig';
5 const skip: number = 20;
6 const response: GetTenants200Response = await getTenants(tenantId, meta, skip);
7 console.log(response);
8})();
9

Обновить арендатора Internal Link

Параметры

Name Type Обязательно Описание
tenantId string Да
id string Да
updateTenantBody UpdateTenantBody Да

Ответ

Возвращает: FlagCommentPublic200Response

Пример

Пример updateTenant
Copy Copy
1
2const tenantId: string = "tenant_01H4ZQ7KABCD";
3const id: string = "site_9f8e7d6c";
4const apiDomainConfiguration: APIDomainConfiguration = {
5 primaryDomain: "comments.acme.com",
6 allowSubdomains: true
7};
8const billingInfo: BillingInfo = {
9 planName: "Business",
10 billingContactEmail: "billing@acme.com",
11 seats: 25
12};
13const updateTenantBody: UpdateTenantBody = {
14 displayName: "Acme Corporation Comments",
15 apiDomainConfiguration,
16 billingInfo, // необязательный параметр, показано
17 enableModeration: true
18};
19const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
20

Загрузить изображение Internal Link

Загрузить и изменить размер изображения

Параметры

Name Type Required Description
tenantId string Да
file Blob Да
sizePreset SizePreset Нет
urlId string Нет

Ответ

Возвращает: UploadImageResponse


Получить прогресс значка пользователя по id Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetUserBadgeProgressById200Response


Получить прогресс значка по id пользователя Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
userId string Да

Ответ

Возвращает: GetUserBadgeProgressById200Response


Получить список прогресса значков пользователей Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
userId string Нет
limit number Нет
skip number Нет

Ответ

Возвращает: GetUserBadgeProgressList200Response


Создать значок пользователя Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
createUserBadgeParams CreateUserBadgeParams Да

Ответ

Возвращает: CreateUserBadge200Response


Удалить значок пользователя Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: UpdateUserBadge200Response


Получить значок пользователя Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetUserBadge200Response


Получить значки пользователя Internal Link

Параметры

Name Type Required Description
tenantId string Да
userId string Нет
badgeId string Нет
type number Нет
displayedOnComments boolean Нет
limit number Нет
skip number Нет

Ответ

Возвращает: GetUserBadges200Response


Обновить значок пользователя Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
updateUserBadgeParams UpdateUserBadgeParams Да

Ответ

Возвращает: UpdateUserBadge200Response


Получить количество уведомлений пользователя Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Да
sso string Нет

Ответ

Возвращает: GetUserNotificationCount200Response


Получить уведомления пользователя Internal Link

Параметры

Name Type Обязательно Description
tenantId string Да
pageSize number Нет
afterId string Нет
includeContext boolean Нет
afterCreatedAt number Нет
unreadOnly boolean Нет
dmOnly boolean Нет
noDm boolean Нет
includeTranslations boolean Нет
sso string Нет

Ответ

Возвращает: GetUserNotifications200Response


Сбросить счётчик уведомлений пользователя Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
sso string Нет

Ответ

Возвращает: ResetUserNotifications200Response


Сбросить уведомления пользователя Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
afterId string Нет
afterCreatedAt number Нет
unreadOnly boolean Нет
dmOnly boolean Нет
noDm boolean Нет
sso string Нет

Ответ

Возвращает: ResetUserNotifications200Response


Обновить статус подписки пользователя на комментарии Internal Link


Включить или отключить уведомления для конкретного комментария.

Параметры

Имя Тип Обязательный Описание
tenantId string Да
notificationId string Да
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum Да
commentId string Да
sso string Нет

Ответ

Возвращает: UpdateUserNotificationStatus200Response


Обновить статус подписки пользователя на страницу Internal Link


Включает или отключает уведомления для страницы. Когда пользователи подписаны на страницу, создаются уведомления для новых корневых комментариев, а также

Параметры

Имя Тип Обязательно Описание
tenantId string Да
urlId string Да
url string Да
pageTitle string Да
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum Да
sso string Нет

Ответ

Возвращает: UpdateUserNotificationStatus200Response


Обновить статус уведомлений пользователя Internal Link


Параметры

Имя Тип Обязательный Описание
tenantId string Да
notificationId string Да
newStatus UpdateUserNotificationStatusNewStatusEnum Да
sso string Нет

Ответ

Возвращает: UpdateUserNotificationStatus200Response


Получить статусы присутствия пользователей Internal Link


Параметры

Имя Тип Обязательно Описание
tenantId string Да
urlIdWS string Да
userIds string Да

Ответ

Возвращает: GetUserPresenceStatuses200Response


Поиск пользователей Internal Link


Параметры

Name Type Обязательно Описание
tenantId string Да
urlId string Да
usernameStartsWith string Да
mentionGroupIds Array Нет
sso string Нет

Ответ

Возвращает: SearchUsers200Response


Получить пользователя Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да

Ответ

Возвращает: GetUser200Response

Пример

Пример getUser
Copy Copy
1
2const tenantId: string = "acme-publishing-42";
3const userIdOptional: string | undefined = "user_9d7b4c"; // может быть undefined в некоторых сценариях (необязательно)
4const id: string = userIdOptional ?? "user_default_0001";
5const result: GetUser200Response = await getUser(tenantId, id);
6console.log(result);
7

Создать голос Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
commentId string Да
direction CreateVoteDirectionEnum Да
userId string Нет
anonUserId string Нет

Ответ

Возвращает: VoteComment200Response

Пример

Пример createVote
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-tenant-812';
4 const commentId: string = '5e8f8b7a-3d4b-4f1b-9a2e-1c9f2d6a7b8c';
5 const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.UP;
6 const anonUserId: string = 'anon-84b9c2d';
7 const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
8 console.log(voteResult);
9})();
10

Удалить голос Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
id string Да
editKey string Нет

Ответ

Возвращает: DeleteCommentVote200Response

Пример

Пример deleteVote
Copy Copy
1
2const tenantId: string = 'tenant_7f3b21c9';
3const id: string = 'vote_4a2d9f1b';
4const editKey: string = 'edit_92b7c6a1';
5
6const resultWithoutEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id);
7const resultWithEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
8

Получить голоса Internal Link

Parameters

Имя Тип Обязательно Описание
tenantId string Да
urlId string Да

Ответ

Возвращает: GetVotes200Response

Пример

Пример getVotes
Copy Copy
1
2const tenantId: string = 'tenant_9f8b3c_prod';
3const urlId: string = '/news/2026/typescript-ecosystem-update';
4const votes: GetVotes200Response = await getVotes(tenantId, urlId);
5// Если бы существовал необязательный параметр, например includeHidden, его можно было бы использовать так:
6// const votesWithHidden: GetVotes200Response = await getVotes(tenantId, urlId, { includeHidden: true });
7

Получить голоса пользователя Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Да
urlId string Да
userId string Нет
anonUserId string Нет

Ответ

Возвращает: GetVotesForUser200Response

Пример

Пример getVotesForUser
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const urlId: string = 'news/2026/01/12/product-launch';
4const userId: string = 'user_9c3f2b';
5const anonUserId: string = 'anon_d4e7a1';
6
7const votesForUser: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId);
8const votesForAnon: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, undefined, anonUserId);
9

Нужна помощь?

Если вы столкнулись с какими-либо проблемами или у вас есть вопросы по JavaScript/TypeScript SDK, пожалуйста:

Внесение вклада

Вклады приветствуются! Пожалуйста, посетите репозиторий GitHub для получения инструкций по внесению вклада.