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


The 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 (Single Sign-On) Internal Link

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

Простой SSO (только на стороне сервера)

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

// Код на стороне сервера (Node.js/бэкенд)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Создать простой SSO с помощью встроенного помощника  
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 (на стороне сервера, рекомендуется)

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

// Код на стороне сервера (Node.js/бэкенд)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Создать защищённый SSO с помощью встроенного помощника
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 клиенту для использования в браузере

Использование SSO из браузера (с серверно-сгенерированным токеном)

// Код на стороне клиента (браузер)
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 // Использовать сгенерированный сервером SSO-токен
});

SSO при создании комментария

// На стороне сервера: создать 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'
});

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

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

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

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

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

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

// Subscribe to live events for a page
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (get this from getComments response)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Update your UI with the new comment
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Update vote counts in your UI
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // Return true if event was handled
  },
  (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', // Get this from getComments response
};

// Subscribe to user's personal feed
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Show notification in your UI
        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');
  }
);

// Close when done
userSubscription.close();

Получение userIdWS

The userIdWS parameter is required for live events and can be obtained from API responses:

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

// Extract userIdWS from the response
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Now you can subscribe to live events
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

ID трансляций 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() // Уникальный идентификатор для этой операции
  }
});

Обработка ошибок 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

Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


Снять блокировку с комментария (публичный) Internal Link

Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


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

Параметры

Имя Тип Обязательно Описание
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

Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


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

Параметры

Name Тип Обязательно Описание
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

Параметры

Имя Тип Обязательно Описание
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

Параметры

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

Ответ

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


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

Параметры

Имя Тип Обязательный Описание
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

Параметры

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

Ответ

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

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

Параметры

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

Ответ

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


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

Параметры

Name Type Обязательно Описание
tenantId string Да
addDomainConfigParams AddDomainConfigParams Да

Ответ

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

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


Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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

Параметры

Имя Тип Обязательно Описание
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

Параметры

Имя Тип Обязательно Описание
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

Параметры

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

Ответ

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

Пример

Пример 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

Параметры

Name Type Required Description
tenantId string Да
urlId string Да
userIdWS string Да
startTime number Да
endTime number Да

Ответ

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


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

req tenantId urlId userIdWS

Параметры

Name Type Required Description
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

Параметры

Name Тип Обязательно Описание
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

Параметры

Имя Тип Обязательно Описание
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

Параметры

Name Type Required Description
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

Параметры

Имя Тип Обязательно Описание
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


Параметры

Имя Тип Обязательно Описание
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

Параметры

Name Type Required Description
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


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

Параметры

Name Type Required Description
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

Параметры

Имя Тип Обязательно Описание
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 Yes
id string Yes

Ответ

Возвращает: 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

Параметры

Name Type Required Description
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

Параметры

Имя Тип Обязательно Описание
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

Параметры

Имя Тип Обязательно Описание
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


Параметры

Имя Тип Обязательно Описание
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


Параметры

Name Type Required Description
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


Параметры

Имя Тип Обязательно Описание
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

Параметры

Name Type Required Description
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

Parameters

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

Response

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

Example

Пример 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

Параметры

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

Ответ

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

Пример

Пример 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

Параметры

Имя Тип Обязательно Описание
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

Параметры

Name Type Required Description
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

Параметры

Name Type Required Description
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

Параметры

Name Type Required Description
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

Parameters

Name Type Required Description
tenantId string Да
id string Да
replaceTenantUserBody ReplaceTenantUserBody Да
updateComments string Нет

Response

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

Example

Пример 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

Параметры

Имя Тип Обязательно Описание
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 Да

Ответ

Возвращает: 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

Параметры

Имя Тип Обязательно Описание
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, // optional parameter demonstrated
17 enableModeration: true
18};
19const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
20

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

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

Параметры

Имя Тип Обязательно Описание
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


Параметры

Name Type Обязательно Описание
tenantId string Да
createUserBadgeParams CreateUserBadgeParams Да

Ответ

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


Удалить бейдж пользователя Internal Link


Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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

Параметры

Имя Тип Обязательно Описание
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

Параметры

Имя Тип Обязательно Описание
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

Параметры

Name Type Обязательно Описание
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

Параметры

Имя Тип Обязательно Описание
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, пожалуйста:

Contributing

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