FastComments.com

FastComments SDK для JavaScript/TypeScript

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

Управляйте комментариями, пользователями, SSO и модерацией в Node.js или в браузере.

Репозиторий

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


Установка Internal Link

npm

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'
});

Live события (обновления в реальном времени) 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 и т.д.).

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
aggregationRequestAggregationRequestДа
parentTenantIdstringНет
includeStatsbooleanНет

Ответ

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


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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
limitnumberНет
skipnumberНет
orderSORTDIRНет
afternumberНет
beforenumberНет

Ответ

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

Пример

Пример getAuditLogs
Copy Copy
1
2const tenantId: string = 'tenant_9a8b7c';
3const limit: number = 100;
4const skip: number = 0;
5const after: number = Date.now() - 30 * 24 * 60 * 60 * 1000; // 30 дней назад
6const before: number = Date.now();
7const auditLogs: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, undefined, after, before);
8

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringДа
publicBlockFromCommentParamsPublicBlockFromCommentParamsДа
ssostringНет

Ответ

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

Пример

Пример blockFromCommentPublic
Copy Copy
1
2const tenantId: string = "site_7f9b2e";
3const commentId: string = "comment_2026-03-25_001";
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: "Repeated harassment and targeted abuse",
6 blockDurationDays: 90,
7 includeHistory: true,
8 notifyModeratorTeam: true
9};
10const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakePayload.signature";
11const result: BlockFromCommentPublic200Response = await blockFromCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
publicBlockFromCommentParamsPublicBlockFromCommentParamsДа
ssostringНет

Ответ

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

Пример

Пример unBlockCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_42e8a1';
3const commentId: string = 'cmt_9b3f2d';
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: 'abusive_language',
6 blockedByModeratorId: 'mod_17',
7 note: 'Targeted harassment; review complete',
8 unblockRequestedAt: new Date().toISOString()
9};
10const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
11const result: UnBlockCommentPublic200Response = await unBlockCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdsstringДа
ssostringНет

Ответ

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

Пример

Пример checkedCommentsForBlocked
Copy Copy
1
2const tenantId: string = 'tenant_4f3b2a1e';
3const commentIds: string = 'c_1001,c_1002,c_1003';
4const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIn0.Sf4ke7nQP3mZx9v2';
5
6const resultWithoutSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds);
7const resultWithSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds, ssoToken);
8

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
blockFromCommentParamsBlockFromCommentParamsДа
userIdstringНет
anonUserIdstringНет

Ответ

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

Пример

Пример blockUserFromComment
Copy Copy
1
2const tenantId: string = 'acme-corp';
3const id: string = 'comment_7f3b2a9c';
4const blockFromCommentParams: BlockFromCommentParams = {
5 reason: 'Repeated abusive language and targeted harassment',
6 durationDays: 90,
7 preventReposting: true
8};
9const userId: string = 'user_12345';
10const anonUserId: string = 'anon_98765';
11
12const result: BlockFromCommentPublic200Response = await blockUserFromComment(
13 tenantId,
14 id,
15 blockFromCommentParams,
16 userId,
17 anonUserId
18);
19

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
urlIdstringДа
broadcastIdstringДа
commentDataCommentDataДа
sessionIdstringНет
ssostringНет

Ответ

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

Пример

Пример createCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_prod_42';
3const urlId: string = 'article-2026-03-25-tech-deep-dive';
4const broadcastId: string = 'live-broadcast-001';
5const sessionId: string = 'sess_9f8e7d6a3b';
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
7const commentData: CommentData = {
8 content: 'Great reporting — appreciated the depth on performance tradeoffs.',
9 authorName: 'Jordan M.',
10 language: 'en-US',
11 metadata: { client: 'web' }
12};
13const result: CreateCommentPublic200Response = await createCommentPublic(tenantId, urlId, broadcastId, commentData, sessionId, sso);
14

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
contextUserIdstringНет
isLivebooleanНет

Ответ

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

Пример

Пример deleteComment
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const id: string = "comment_5f3a2b7c";
4const contextUserId: string = "user_1229";
5const isLive: boolean = true;
6const response: DeleteComment200Response = await deleteComment(tenantId, id, contextUserId, isLive);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
editKeystringНет
ssostringНет

Ответ

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

Пример

Пример deleteCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_4f2c9b';
3const commentId: string = 'comment-7c3a9f2d';
4const broadcastId: string = 'article-2026-03-20';
5const editKey: string | undefined = 'ek_pub_abc12345';
6const sso: string | undefined = 'sso_eyJhbGciOiJIUzI1Ni';
7
8const result: DeleteCommentPublic200Response = await deleteCommentPublic(
9 tenantId,
10 commentId,
11 broadcastId,
12 editKey,
13 sso
14);
15

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringДа
voteIdstringДа
urlIdstringДа
broadcastIdstringДа
editKeystringНет
ssostringНет

Ответ

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

Пример

Пример deleteCommentVote
Copy Copy
1
2const tenantId: string = 'acme-tenant-87e4fd';
3const commentId: string = 'cmt-9a12b3f4';
4const voteId: string = 'vote-4f6d21b9';
5const urlId: string = 'https://www.acme.com/articles/2026/03/25/how-to-test';
6const broadcastId: string = 'broadcast-20260325-01';
7const editKey: string = 'editkey-6b7c8d9e';
8const sso: string = 'sso-jwt-eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
9
10const response: DeleteCommentVote200Response = await deleteCommentVote(
11 tenantId,
12 commentId,
13 voteId,
14 urlId,
15 broadcastId,
16 editKey,
17 sso
18);
19

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
idstringДа
userIdstringНет
anonUserIdstringНет

Ответ

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

Пример

Пример flagComment
Copy Copy
1
2const tenantId: string = 'tenant_7f3b21';
3const commentId: string = 'cmt_9a2b4';
4const userId: string = 'user_1024';
5const result: FlagComment200Response = await flagComment(tenantId, commentId, userId);
6

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

Параметры

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

Ответ

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

Пример

Пример getComment
Copy Copy
1
2const tenantId: string = "acme-publishing-001";
3const commentId: string = "f3b2c1d0-9a8e-4b7c-8123-6d5f0a1e2b3c";
4const result: GetComment200Response = await getComment(tenantId, commentId);
5const wrapper: GetComment200Response & { comment?: APIComment } = result;
6const comment: APIComment | undefined = wrapper.comment;
7const authorBadge: CommentUserBadgeInfo | undefined = comment?.user?.badge;
8const userHashTags: CommentUserHashTagInfo[] | undefined = comment?.user?.hashTags
9

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
pagenumberНет
limitnumberНет
skipnumberНет
asTreebooleanНет
skipChildrennumberНет
limitChildrennumberНет
maxTreeDepthnumberНет
urlIdstringНет
userIdstringНет
anonUserIdstringНет
contextUserIdstringНет
hashTagstringНет
parentIdstringНет
directionSortDirectionsНет

Ответ

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

Пример

Пример getComments
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // страница
6 20, // лимит
7 0, // пропустить
8 true, // в виде дерева
9 1, // пропустить дочерние
10 3, // лимит дочерних
11 4, // максимальная глубина дерева
12 'articles/2026/new-product-launch', // urlId
13 'user_7890', // идентификатор пользователя
14 'anon_4f3b2', // идентификатор анонимного пользователя
15 undefined, // идентификатор контекстного пользователя
16 '#launch', // хэштег
17 undefined // идентификатор родителя
18);
19

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

req tenantId urlId

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
urlIdstringДа
pagenumberНет
directionSortDirectionsНет
ssostringНет
skipnumberНет
skipChildrennumberНет
limitnumberНет
limitChildrennumberНет
countChildrenbooleanНет
fetchPageForCommentIdstringНет
includeConfigbooleanНет
countAllbooleanНет
includei10nbooleanНет
localestringНет
modulesstringНет
isCrawlerbooleanНет
includeNotificationCountbooleanНет
asTreebooleanНет
maxTreeDepthnumberНет
useFullTranslationIdsbooleanНет
parentIdstringНет
searchTextstringНет
hashTagsArrayНет
userIdstringНет
customConfigStrstringНет
afterCommentIdstringНет
beforeCommentIdstringНет

Ответ

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

Пример

Пример getCommentsPublic
Copy Copy
1
2const tenantId: string = 'tenant_eu-west_01';
3const urlId: string = 'https://www.financialtimes.com/articles/2026/market-update-q1';
4const response: GetCommentsPublic200Response = await getCommentsPublic(
5 tenantId,
6 urlId,
7 2,
8 undefined,
9 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.tokenPayload.signature',
10 undefined,
11 0,
12 50,
13 5,
14 true,
15 undefined,
16 true,
17 false,
18 true,
19 'en-US',
20 'reactions,moderation',
21 false,
22 true,
23 true,
24 3,
25 false,
26 undefined,
27 'performance',
28 ['feature','fastcomments'],
29 'user_9876',
30 undefined,
31 undefined,
32 undefined
33);
34

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringДа
editKeystringНет
ssostringНет

Ответ

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

Пример

Пример getCommentText
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const commentId: string = 'cmt_7890b';
4const editKey: string = 'edit_4f2d9b7c';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
6
7const result: GetCommentText200Response = await getCommentText(tenantId, commentId, editKey, sso);
8

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
dirnumberДа
ssostringНет

Ответ

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

Пример

Пример getCommentVoteUserNames
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_4f2c1e';
4 const commentId: string = 'cmt_9a7b3d';
5 const dir: number = 1;
6 const resultUpvotes: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dir);
7 const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakepayload.signature';
8 const dirDown: number = -1;
9 const resultDownvotes: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dirDown, sso);
10 console.log(resultUpvotes, resultDownvotes);
11})();
12

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНет

Ответ

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

Пример

Пример lockComment
Copy Copy
1
2const tenantId: string = "tenant_prod_8f3a2b";
3const commentId: string = "cmt_5d7e9a92";
4const broadcastId: string = "broadcast_2026_03_25_1400";
5const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature";
6const resultWithSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId, ssoToken);
7const resultWithoutSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId);
8

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
ssostringNo

Ответ

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

Пример

Пример pinComment
Copy Copy
1
2const tenantId: string = "tenant_4f2b9a";
3const commentId: string = "cmt_9f8e7d6c";
4const broadcastId: string = "brd_live_concert_2026-03-25";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_payload_signature";
6
7const result: PinComment200Response = await pinComment(tenantId, commentId, broadcastId, sso);
8

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
createCommentParamsCreateCommentParamsДа
isLivebooleanНет
doSpamCheckbooleanНет
sendEmailsbooleanНет
populateNotificationsbooleanНет

Ответ

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

Пример

Пример saveComment
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const createCommentParams: CreateCommentParams = {
4 content: 'Great article — helped me fix a production issue in minutes.',
5 url: 'https://app.acme.com/blog/performance-tips',
6 author: { name: 'Maya Chen', email: 'maya.chen@acme.com' },
7 metadata: { locale: 'en-US', appVersion: '4.2.1' }
8} as CreateCommentParams;
9const isLive: boolean = true;
10const doSpamCheck: boolean = true;
11const sendEmails: boolean = false;
12const populateNotifications: boolean = true;
13const result: SaveComment200Response = await saveComment(tenantId, createCommentParams, isLive, doSpamCheck, sendEmails, populateNotifications);
14

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

Параметры

NameТипОбязательноОписание
tenantIdstringДа
createCommentParamsArrayДа
isLivebooleanНет
doSpamCheckbooleanНет
sendEmailsbooleanНет
populateNotificationsbooleanНет

Ответ

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

Пример

Пример saveCommentsBulk
Copy Copy
1
2const tenantId: string = 'acme-corp-01';
3const mentions1: CommentUserMentionInfo[] = [{ userId: 'user-123', displayName: 'Jane Doe' }];
4const hashtags1: CommentUserHashTagInfo[] = [{ tag: 'typescript' }];
5const createCommentParams: CreateCommentParams[] = [
6 {
7 content: 'Great insights on async/await patterns.',
8 authorName: 'John Smith',
9 authorEmail: 'john.smith@acme.com',
10 externalId: 'comment-001',
11 createdAt: '2026-03-25T10:15:00Z',
12 userMentions: mentions1,
13 userHashTags: hashtags1
14 },
15 {
16 content: 'I prefer using Promise.all for bulk ops.',
17 authorName: 'Emily Turner',
18 authorEmail: 'emily.turner@acme.com',
19 externalId: 'comment-002',
20 createdAt: '2026-03-25T10:20:00Z'
21 }
22];
23const result: SaveComment200Response[] = await saveCommentsBulk(tenantId, createCommentParams, true, true, false, true);
24

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
commentTextUpdateRequestCommentTextUpdateRequestДа
editKeystringНет
ssostringНет

Ответ

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

Пример

Пример использования setCommentText
Copy Copy
1
2const tenantId: string = 'tenant-42';
3const commentId: string = 'cmt-8932';
4const broadcastId: string = 'brd-2023-07';
5const updateRequest: CommentTextUpdateRequest = {
6 text: 'Updated comment text for the product launch — congrats team!',
7 mentions: [{ userId: 'user-17', displayName: 'Ava Nguyen' }] as CommentUserMentionInfo[],
8 hashtags: [{ tag: 'ProductLaunch' }] as CommentUserHashTagInfo[]
9};
10const editKey: string = 'edtk-9f7b';
11const sso: string = 'sso-token-abc123';
12const result: SetCommentText200Response = await setCommentText(tenantId, commentId, broadcastId, updateRequest, editKey, sso);
13

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
unBlockFromCommentParamsUnBlockFromCommentParamsДа
userIdstringНет
anonUserIdstringНет

Ответ

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

Пример

Пример unBlockUserFromComment
Copy Copy
1
2const tenantId: string = 'tenant_87f3e1';
3const id: string = 'comment_9b2a4f';
4const unBlockFromCommentParams: UnBlockFromCommentParams = {
5 reason: 'Reviewed by moderation team — reinstated',
6 moderatorId: 'mod_21',
7 unblockedAt: new Date().toISOString()
8};
9const userId: string = 'user_42';
10const anonUserId: string = 'anon_e7f9';
11const result: UnBlockCommentPublic200Response = await unBlockUserFromComment(tenantId, id, unBlockFromCommentParams, userId, anonUserId);
12

Снять жалобу с комментария Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
userIdstringНет
anonUserIdstringНет

Ответ

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

Пример

Пример unFlagComment
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const commentId: string = 'cmt_9f8e7d6c';
4const userId: string = 'user_72b4a1c9';
5const anonUserId: string = 'anon_3d2c1b0a';
6const response: FlagComment200Response = await unFlagComment(tenantId, commentId, userId, anonUserId);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНет

Ответ

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

Пример

Пример unLockComment
Copy Copy
1
2const tenantId: string = 'tenant_9d4f2b';
3const commentId: string = 'cmt_8a3e1f';
4const broadcastId: string = 'broadcast_2026_03_25';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
6
7const result: LockComment200Response = await unLockComment(tenantId, commentId, broadcastId, sso);
8

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНет

Ответ

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

Пример

Пример unPinComment
Copy Copy
1
2const tenantId: string = 'tenant_7f9d2a3b';
3const commentId: string = 'comment_842b9c1f';
4const broadcastId: string = 'bcast_frontpage_202603';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exampleSignature';
6
7const result: PinComment200Response = await unPinComment(tenantId, commentId, broadcastId, sso);
8

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updatableCommentParamsUpdatableCommentParamsДа
contextUserIdstringНет
doSpamCheckbooleanНет
isLivebooleanНет

Ответ

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

Пример

Пример updateComment
Copy Copy
1
2const tenantId: string = "tenant_3f47b2a1";
3const id: string = "comment_9a12b3c4";
4const updatableCommentParams: UpdatableCommentParams = {
5 body: "Thanks for the update — I've adjusted my view accordingly."
6};
7const contextUserId: string = "user_8721";
8const doSpamCheck: boolean = true;
9const isLive: boolean = false;
10const result: FlagCommentPublic200Response = await updateComment(tenantId, id, updatableCommentParams, contextUserId, doSpamCheck, isLive);
11

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
urlIdstringДа
broadcastIdstringДа
voteBodyParamsVoteBodyParamsДа
sessionIdstringНет
ssostringНет

Ответ

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

Пример

Пример voteComment
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c';
3const commentId: string = 'cmt_42f3a1';
4const urlId: string = 'articles/ai-trends-2026';
5const broadcastId: string = 'web';
6const voteBodyParams: VoteBodyParams = { vote: 1, reason: 'Insightful and on-topic' };
7const sessionId: string = 'sess_6d2b4c9e';
8const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
9const result: VoteComment200Response = await voteComment(tenantId, commentId, urlId, broadcastId, voteBodyParams, sessionId, sso);
10

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

Параметры

NameTypeОбязательныйОписание
userIdstringНет
tenantIdstringНет
urlIdstringНет
pagenumberНет
directionSortDirectionsНет
lastGenDatenumberНет
repliesToUserIdstringНет
fetchPageForCommentIdstringНет
includei10nbooleanНет
useFullTranslationIdsbooleanНет
localestringНет
includeConfigbooleanНет
includeNotificationCountbooleanНет
countAllbooleanНет
ssostringНет

Ответ

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

Пример

Пример getCommentsForUser
Copy Copy
1
2const userId: string = 'user_82f9b';
3const tenantId: string = 'tenant_22';
4const page: number = 2;
5const lastGenDate: number = Date.now();
6const includei10n: boolean = true;
7const useFullTranslationIds: boolean = false;
8const locale: string = 'en-US';
9const includeConfig: boolean = true;
10const includeNotificationCount: boolean = true;
11const countAll: boolean = false;
12const sso: string = 'sso-token-1a2b';
13const commentsResponse: GetCommentsForUserResponse = await getCommentsForUser(userId, tenantId, undefined, page, undefined, lastGenDate, undefined, undefined, includei10n, useFullTranslationIds, locale, includeConfig, includeNotificationCount, countAll, sso);
14

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

Параметры

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

Ответ

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


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


Параметры

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

Ответ

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


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

Параметры

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

Ответ

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


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

Параметры

NameTypeRequiredDescription
tenantIdstringДа

Ответ

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


Изменить конфигурацию домена (PATCH) Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
domainToUpdatestringДа
patchDomainConfigParamsPatchDomainConfigParamsДа

Ответ

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


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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
domainToUpdatestringДа
updateDomainConfigParamsUpdateDomainConfigParamsДа

Ответ

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


Создать шаблон email Internal Link


Параметры

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

Ответ

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

Пример

Пример createEmailTemplate
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9f4a2b';
4 const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: 'Weekly Digest',
6 subject: 'Your weekly discussion highlights',
7 html: '<!doctype html><body><h1>Hello \{{user.name}}</h1><p>Top comments this week...</p></body>',
8 fromAddress: 'no-reply@fastcomments-example.com',
9 replyTo: 'moderation@fastcomments-example.com',
10 isDefault: false
11 };
12 const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
13 console.log(result);
14})();
15

Удалить шаблон email Internal Link

Parameters

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

Response

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

Example

Пример deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "acme-corp-42";
3const idSuffix: string | undefined = "-archived";
4const templateId: string = "email_tmpl_6a1b2c" + (idSuffix ?? "");
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
6

Удалить ошибку рендера шаблона email Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringYes
idstringYes
errorIdstringYes

Ответ

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

Пример

Пример deleteEmailTemplateRenderError
Copy Copy
1
2const tenantId: string = "tenant_7a1d2f9b";
3const id: string = "email_template_42b1";
4const errorId: string = "render_err_2026-04-24_7f3c";
5const includeStackTrace: boolean | undefined = undefined; // пример необязательного флага
6
7const response: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
8// Если бы поддерживался необязательный объект options, он мог бы выглядеть так:
9// await deleteEmailTemplateRenderError(tenantId, id, errorId /*, { includeStackTrace } */);
10

Получить шаблон email Internal Link


Параметры

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

Ответ

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

Пример

Пример getEmailTemplate
Copy Copy
1
2const tenantId: string = "acme-marketing-042";
3const templateId: string = "tpl_welcome_2026";
4const result: GetEmailTemplate200Response = await getEmailTemplate(tenantId, templateId);
5const template: CustomEmailTemplate | undefined = result.template;
6const subject: string | undefined = template?.subject;
7const customParams: CustomConfigParameters | undefined = template?.customConfigParameters;
8

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

Параметры

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

Ответ

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

Пример

Пример getEmailTemplateDefinitions
Copy Copy
1
2const tenantId: string = 'tenant_acme_eu_01';
3const templates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4console.log('Email template definitions loaded for', tenantId, templates);
5

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
skipnumberНет

Ответ

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

Пример

getEmailTemplateRenderErrors Пример
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-tenant-42';
4 const id: string = 'tmpl_3fa85f64-5717-4562-b3fc-2c963f66afa6';
5 const skip: number = 20;
6 const result: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
7 console.log(result);
8})();
9

Получить шаблоны email Internal Link

Параметры

NameTypeRequiredDescription
tenantIdstringДа
skipnumberНет

Ответ

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

Пример

Пример getEmailTemplates
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = 'tenant_5f3a9c2b';
4 const templates: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
5 const skip: number = 20;
6 const pagedTemplates: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
7 console.log(templates, pagedTemplates);
8}
9main();
10

Отрендерить шаблон email Internal Link

Параметры

NameTypeОбязательноОписание
tenantIdstringДа
renderEmailTemplateBodyRenderEmailTemplateBodyДа
localestringНет

Ответ

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

Пример

Пример renderEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-987';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'user-invite',
5 subject: "You're invited to Acme",
6 placeholders: { firstName: 'Alex' },
7 metadata: { source: 'signup-flow' }
8};
9const locale: string = 'en-US';
10const result: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
11

Обновить шаблон email Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateEmailTemplateBodyUpdateEmailTemplateBodyДа

Ответ

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

Пример

Пример updateEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_76a4b2";
3const id: string = "template_9f3c1e";
4const updateEmailTemplateBody: UpdateEmailTemplateBody = {
5 name: "Comment Flag Notification",
6 subject: "A comment was flagged on your-site.com",
7 bodyHtml: "<p>Admin,</p><p>User \{{commenterName}} flagged a comment: “\{{commentText}}”</p>",
8 isEnabled: true,
9 description: "Email sent to moderators when a comment is flagged (optional field included)"
10};
11const result: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
12

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

req tenantId urlId userIdWS

Параметры

NameTypeRequiredDescription
tenantIdstringДа
urlIdstringДа
userIdWSstringДа
startTimenumberДа
endTimenumberДа

Ответ

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

Пример

Пример getEventLog
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const urlId: string = 'article-2026-03-25';
4const userIdWS: string | undefined = undefined; // необязательное значение из upstream
5const startTime: number = Date.parse('2026-03-01T00:00:00Z');
6const endTime: number = Date.parse('2026-03-25T23:59:59Z');
7
8const eventLogResponse: GetEventLog200Response = await getEventLog(
9 tenantId,
10 urlId,
11 userIdWS ?? 'ws_user_8b1f',
12 startTime,
13 endTime
14);
15

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

req tenantId urlId userIdWS

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
urlIdstringДа
userIdWSstringДа
startTimenumberДа
endTimenumberДа

Ответ

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

Пример

Пример getGlobalEventLog
Copy Copy
1
2const tenantId: string = "tenant-84b2f1";
3const urlId: string = "article-6721";
4const userIdWS: string = "ws-conn-9a3c";
5const startTime: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // 7 дней назад
6const endTimeOptional: number | undefined = undefined; // необязательный конец временного интервала
7const endTime: number = endTimeOptional ?? Date.now();
8const eventLog: GetEventLog200Response = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime, endTime);
9

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
createFeedPostParamsCreateFeedPostParamsДа
broadcastIdstringНет
isLivebooleanНет
doSpamCheckbooleanНет
skipDupCheckbooleanНет

Ответ

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

Пример

Пример createFeedPost
Copy Copy
1
2const tenantId: string = 'tenant_87f3b2';
3const mediaAsset: FeedPostMediaItemAsset = { url: 'https://cdn.example.com/images/post-123.jpg', mimeType: 'image/jpeg', width: 1200, height: 800, size: 245000 };
4const mediaItem: FeedPostMediaItem = { id: 'media_1', type: 'image', assets: [mediaAsset], altText: 'Conference keynote stage' };
5const link: FeedPostLink = { url: 'https://news.example.com/keynote-recap', title: 'Keynote recap' };
6const createFeedPostParams: CreateFeedPostParams = {
7 title: 'Product Launch Highlights',
8 content: 'Highlights from today’s product launch and roadmap updates.',
9 authorId: 'user_42',
10 mediaItems: [mediaItem],
11 links: [link],
12 tags: ['product', 'launch', 'announcement']
13};
14const broadcastId: string = 'broadcast_20260424';
15const isLive: boolean = true;
16const doSpamCheck: boolean = true;
17const skipDupCheck: boolean = false;
18const result: CreateFeedPost200Response = await createFeedPost(tenantId, createFeedPostParams, broadcastId, isLive, doSpamCheck, skipDupCheck);
19

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
createFeedPostParamsCreateFeedPostParamsДа
broadcastIdstringНет
ssostringНет

Ответ

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

Пример

Пример createFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_987654321";
3const asset: FeedPostMediaItemAsset = { url: "https://cdn.fastcomments.com/uploads/team-photo.jpg", mimeType: "image/jpeg", sizeBytes: 324512 };
4const mediaItem: FeedPostMediaItem = { type: "image", assets: [asset], caption: "Team launch day" };
5const link: FeedPostLink = { url: "https://www.example.com/blog/product-update-march-2026", title: "Product update — March 2026" };
6const createFeedPostParams: CreateFeedPostParams = {
7 title: "Product update — March 2026",
8 content: "<p>We shipped performance improvements and two new integrations.</p>",
9 media: [mediaItem],
10 link,
11 visibility: "public",
12 tags: ["product","release","march-2026"],
13 customConfig: { allowComments: true, requireTOS: false }
14};
15const broadcastId: string = "broadcast_2026_03_25_live";
16const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NSIsImlhdCI6MTY5MDI0MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
17const result: CreateFeedPostPublic200Response = await createFeedPostPublic(tenantId, createFeedPostParams, broadcastId, sso);
18

Удалить публичную запись в ленте Internal Link

Параметры

NameTypeRequiredDescription
tenantIdstringДа
postIdstringДа
broadcastIdstringНет
ssostringНет

Ответ

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

Пример

Пример deleteFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_5f8a9b3c";
3const postId: string = "post_a1b2c3d4";
4const broadcastId: string = "broadcast_2026-03-25T10:00:00Z";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwiaWF0IjoxNjE5MjM5MjAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6
7const resultWithOptional: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId, broadcastId, sso);
8const resultRequiredOnly: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId);
9

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

req tenantId afterId

Параметры

NameTypeRequiredDescription
tenantIdstringДа
afterIdstringНет
limitnumberНет
tagsArrayНет

Ответ

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

Пример

Пример getFeedPosts
Copy Copy
1
2const initialPage: GetFeedPosts200Response = await getFeedPosts('tenant_9f1b3d', undefined, 20, ['sports', 'local']);
3const nextPage: GetFeedPosts200Response = await getFeedPosts('tenant_9f1b3d', 'post_abc123', 20, ['sports', 'local']);
4

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

req tenantId afterId

Параметры

NameTypeRequiredDescription
tenantIdstringДа
afterIdstringНет
limitnumberНет
tagsArrayНет
ssostringНет
isCrawlerbooleanНет
includeUserInfobooleanНет

Ответ

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

Пример

Пример getFeedPostsPublic
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const afterId: string = 'fp_20260301_042';
4const limit: number = 25;
5const tags: Array<string> = ['technology', 'announcement'];
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiamRvZSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
7const isCrawler: boolean = false;
8const includeUserInfo: boolean = true;
9const response: GetFeedPostsPublic200Response = await getFeedPostsPublic(tenantId, afterId, limit, tags, sso, isCrawler, includeUserInfo);
10

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
postIdsArrayДа
ssostringНет

Ответ

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

Пример

Пример getFeedPostsStats
Copy Copy
1
2const tenantId: string = 'tenant_9b2f1c4a';
3const postIds: Array<string> = [
4 '8f14e45f-ea82-4c7a-b6b2-1a2b3c4d5e6f',
5 'd0e1f2a3-b4c5-6d7e-8f90-1234567890ab'
6];
7const sso: string = 'sso_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.signature';
8const statsWithoutSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds);
9const statsWithSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds, sso);
10

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
postIdsArrayНет
ssostringНет

Ответ

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

Пример

Пример getUserReactsPublic
Copy Copy
1
2const tenantId: string = "acme-tenant-8a4d2c";
3const postIds: string[] = ["post-645a2f", "post-645a30"];
4const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImlhdCI6MTY2MTYwMDAwMH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
5const result: GetUserReactsPublic200Response = await getUserReactsPublic(tenantId, postIds, sso);
6

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
postIdstringДа
reactBodyParamsReactBodyParamsДа
isUndobooleanНет
broadcastIdstringНет
urlIdstringНет
ssostringНет

Ответ

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

Пример

Пример reactFeedPostPublic
Copy Copy
1
2const tenantId: string = "global-markets";
3const postId: string = "8e2c3f9a-4b6d-4f1a-9c2d-e8a1b2c3d4e5";
4const reactBodyParams: ReactBodyParams = { reactionType: "like", clientApp: "web-ui", timestamp: new Date().toISOString() };
5const isUndo: boolean = false;
6const broadcastId: string = "broadcast-2026-05-20";
7const urlId: string = "feed-post-8e2c";
8const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fake.payload";
9
10const result: ReactFeedPostPublic200Response = await reactFeedPostPublic(tenantId, postId, reactBodyParams, isUndo, broadcastId, urlId, sso);
11

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

Параметры

NameTypeОбязательноОписание
tenantIdstringДа
idstringДа
feedPostFeedPostДа

Response

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

Пример

Пример updateFeedPost
Copy Copy
1
2const tenantId: string = 'acme-global-tenant-42';
3const id: string = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
4
5const asset: FeedPostMediaItemAsset = {
6 url: 'https://cdn.acme.com/images/product-launch.jpg',
7 mimeType: 'image/jpeg',
8 width: 1200,
9 height: 630
10};
11
12const mediaItem: FeedPostMediaItem = {
13 id: 'media-001',
14 type: 'image',
15 asset
16};
17
18const link: FeedPostLink = {
19 url: 'https://acme.com/blog/product-launch',
20 title: 'Product Launch Details'
21};
22
23const feedPost: FeedPost = {
24 title: 'Introducing the Q3 Product Suite',
25 body: 'We are excited to unveil our new lineup for Q3, focusing on performance and security improvements.',
26 media: [mediaItem], // необязательный массив включён
27 links: [link], // необязательные ссылки включены
28 isPublished: true // необязательный флаг публикации, используемый здесь
29};
30
31const result: FlagCommentPublic200Response = await updateFeedPost(tenantId, id, feedPost);
32

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
postIdstringДа
updateFeedPostParamsUpdateFeedPostParamsДа
broadcastIdstringНет
ssostringНет

Ответ

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

Пример

Пример updateFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_9f4b2";
3const postId: string = "post_21a8e";
4const updateFeedPostParams: UpdateFeedPostParams = {
5 title: "Quarterly product update",
6 body: "Major performance improvements and bug fixes deployed today. See release notes and schedule.",
7 links: [{ url: "https://status.example.com/release-notes", title: "Release notes" }],
8 media: [
9 {
10 type: "image",
11 assets: [{ url: "https://cdn.example.com/updates/q2.png", mimeType: "image/png", width: 1200, height: 628 }]
12 }
13 ]
14};
15const broadcastId: string = "broadcast_live_202603";
16const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature";
17const result: CreateFeedPostPublic200Response = await updateFeedPostPublic(tenantId, postId, updateFeedPostParams, broadcastId, sso);
18

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


Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
isFlaggedbooleanДа
ssostringНет

Ответ

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

Пример

Пример flagCommentPublic
Copy Copy
1
2const tenantId: string = "tenant_9f8b3c";
3const commentId: string = "comment_72a1d4";
4const isFlagged: boolean = true;
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1Njc4OSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6const result: FlagCommentPublic200Response = await flagCommentPublic(tenantId, commentId, isFlagged, sso);
7

Получить большой GIF Internal Link


Параметры

NameTypeRequiredDescription
tenantIdstringДа
largeInternalURLSanitizedstringДа

Ответ

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

Пример

Пример getGifLarge
Copy Copy
1
2const tenantId: string = 'tenant_8a92f4';
3const largeInternalURLSanitized: string = 'https://cdn.streamingco.com/gifs/product-demo-large.gif';
4let maybeStatus: APIStatus | undefined = undefined; // необязательные метаданные, если доступны
5const response: GifGetLargeResponse = await getGifLarge(tenantId, largeInternalURLSanitized);
6

Поиск GIF Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
searchstringДа
localestringНет
ratingstringНет
pagenumberНет

Ответ

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

Пример

Пример getGifsSearch
Copy Copy
1
2(async () => {
3 const tenantId: string = "global-media";
4 const search: string = "laughing baby";
5 const locale: string = "en-US";
6 const rating: string = "pg";
7 const page: number = 2;
8 const result: GifSearchResponse = await getGifsSearch(tenantId, search, locale, rating, page);
9 console.log(result);
10})();
11

Популярные GIF Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
localestringНет
ratingstringНет
pagenumberНет

Ответ

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

Пример

Пример getGifsTrending
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const locale: string = 'en-US';
4const rating: string = 'PG';
5const page: number = 1;
6const result: GifSearchResponse = await getGifsTrending(tenantId, locale, rating, page);
7

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


Параметры

ИмяТипОбязательныйОписание
tenantIdstringНет
createHashTagBodyCreateHashTagBodyНет

Ответ

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

Пример

Пример addHashTag
Copy Copy
1
2const tenantId: string | undefined = undefined;
3const createHashTagBody: CreateHashTagBody = {
4 name: 'release-2026',
5 description: 'Feedback and bug reports for the April 2026 product release',
6 synonyms: ['v2-release', 'launch-2026'],
7 color: '#1d72b8',
8 isActive: true,
9 createdBy: 'product.manager@acme-corp.com'
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createHashTagBody);
12

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

Параметры

NameTypeRequiredDescription
tenantIdstringНет
bulkCreateHashTagsBodyBulkCreateHashTagsBodyНет

Ответ

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

Пример

Пример addHashTagsBulk
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_01';
3const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
4 tags: [
5 { name: 'feature-request', slug: 'feature-request', description: 'Requests for new capabilities', isActive: true, customConfig: { visibility: 'public' } as unknown as CustomConfigParameters }
6 ]
7};
8const addHashTagsResponse: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
9
10const bulkCreateHashTagsBodyNoTenant: BulkCreateHashTagsBody = {
11 tags: [
12 { name: 'ux-feedback', slug: 'ux-feedback', description: 'User experience suggestions', isActive: true }
13 ]
14};
15const addHashTagsResponseNoTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBodyNoTenant);
16

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

Параметры

ИмяТипОбязательноОписание
tagstringYes
tenantIdstringNo
deleteHashTagRequestDeleteHashTagRequestNo

Ответ

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

Пример

Пример deleteHashTag
Copy Copy
1
2const tag: string = "spring-sale-2026";
3const tenantId: string = "tenant-9876";
4const deleteHashTagRequest: DeleteHashTagRequest = {
5 requestedBy: "admin@retailco.com",
6 reason: "Campaign ended; remove associated auto-tags",
7 cascadeDelete: true
8};
9const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteHashTagRequest);
10

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
pagenumberНет

Ответ

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

Пример

Пример getHashTags
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const pageNumber: number = 2;
4const responseWithPage: GetHashTags200Response = await getHashTags(tenantId, pageNumber);
5const responseWithoutPage: GetHashTags200Response = await getHashTags(tenantId);
6

Изменить хэштег (PATCH) Internal Link

Параметры

NameTypeRequiredDescription
tagstringДа
tenantIdstringНет
updateHashTagBodyUpdateHashTagBodyНет

Ответ

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

Пример

Пример patchHashTag
Copy Copy
1
2const tag: string = "feature-ux-refresh";
3const tenantId: string = "tenant_4f92c1";
4const updateHashTagBody: UpdateHashTagBody = {
5 label: "UX Refresh",
6 description: "Track comments related to the 2026 UX redesign",
7 isActive: true,
8 metadata: { owner: "product-design", rolloutPhase: "phase-2" }
9};
10const response: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
11

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

Параметры

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

Ответ

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

Пример

Пример createModerator
Copy Copy
1
2const tenantId: string = "tenant_8f3b6c";
3const optionalConfig: CustomConfigParameters = { moderationThreshold: 5, escalateOnRepeatedOffenses: true };
4const newModerator: CreateModeratorBody = {
5 email: "lina.gomez@dailynews.com",
6 fullName: "Lina Gomez",
7 role: "senior_moderator",
8 enabled: true,
9 notifyByEmail: true,
10 customConfig: optionalConfig
11};
12const response: CreateModerator200Response = await createModerator(tenantId, newModerator);
13

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
sendEmailstringНет

Ответ

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

Пример

Пример deleteModerator
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c6d';
3const id: string = 'mod_4a3e11ec9d1f0242ac120003';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, id, sendEmail);
6

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

Параметры

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

Ответ

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

Пример

Пример getModerator
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-123';
3const id: string = 'mod-987654321';
4const moderatorResponse: GetModerator200Response = await getModerator(tenantId, id);
5

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

Параметры

ИмяTypeОбязательноОписание
tenantIdstringДа
skipnumberНет

Ответ

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

Пример

Пример getModerators
Copy Copy
1
2const tenantId: string = 'tenant-12345-prod';
3const moderatorsPage1: GetModerators200Response = await getModerators(tenantId);
4const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, 50);
5

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
fromNamestringДа

Response

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

Пример

Пример использования sendInvite
Copy Copy
1
2const tenantId: string = 'acme-corp-128';
3const id: string = 'comment-8421f';
4const fromName: string = 'Marcus Lindström';
5const note: string | undefined = undefined; // пример необязательного параметра
6const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
7

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateModeratorBodyUpdateModeratorBodyДа

Ответ

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

Пример

Пример использования updateModerator
Copy Copy
1
2const tenantId: string = "acme-enterprises-42";
3const id: string = "moderator_517";
4const updateModeratorBody: UpdateModeratorBody = {
5 displayName: "Sofia Martinez",
6 email: "sofia.martinez@acme.com",
7 permissions: ["approve_comments", "flag_spam", "suspend_users"],
8 active: true,
9 avatarUrl: "https://cdn.acme.com/avatars/sofia.jpg" // необязательное поле (пример)
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBody);
12

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

Параметры

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

Ответ

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

Пример

deleteNotificationCount Пример
Copy Copy
1
2const tenantId: string = "org-72a8f1b9";
3const id: string = "notif-8f9c2e4a";
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, id);
5console.log(result);
6

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

Параметры

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

Ответ

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

Пример

Пример getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const id: string = 'user_00012345';
4const includeUnreadOnly: boolean | undefined = true; // необязательный флаг параметра (продемонстрировано)
5const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, id);
6

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
userIdstringНет
urlIdstringНет
fromCommentIdstringНет
viewedbooleanНет
typestringНет

Ответ

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

Пример

Пример getNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_abc123';
3const userId: string = 'user_987654321';
4const urlId: string = 'https://example.com/news/2026/new-features';
5const viewed: boolean = false;
6const type: string = 'reply';
7const notificationCountResponse: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, undefined, viewed, type);
8

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
userIdstringНет
urlIdstringНет
fromCommentIdstringНет
viewedbooleanНет
typestringНет
skipnumberНет

Ответ

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

Пример

Пример getNotifications
Copy Copy
1
2const tenantId: string = "tenant_84b3f2";
3const userId: string = "user_1279";
4const urlId: string = "https://www.example.com/articles/2026/03/25/new-feature";
5const fromCommentId: string = "cmt_5421";
6const viewed: boolean = false;
7const type: string = "mention";
8const skip: number = 0;
9const notifications: GetNotifications200Response = await getNotifications(tenantId, userId, urlId, fromCommentId, viewed, type, skip);
10

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateNotificationBodyUpdateNotificationBodyДа
userIdstringНет

Ответ

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

Пример

Пример updateNotification
Copy Copy
1
2const tenantId: string = 'tenant_prod_8f4b2c';
3const id: string = 'notification_61a2e9';
4const userId: string = 'moderator_107';
5const updateNotificationBody: UpdateNotificationBody = {
6 name: 'Flagged Comment Notification',
7 enabled: true,
8 channels: ['email', 'inbox'],
9 templateId: 'tmpl_mod_alerts_01',
10 severity: 'high'
11};
12const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
13

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


Параметры

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

Ответ

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


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

Параметры

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

Ответ

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

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


Параметры

НазваниеТипОбязательноОписание
tenantIdstringДа
urlIdstringДа

Ответ

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


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


Параметры

NameTypeRequiredDescription
tenantIdstringДа

Ответ

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


Изменить страницу (PATCH) Internal Link


Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateAPIPageDataUpdateAPIPageDataДа

Ответ

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


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

Параметры

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

Ответ

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

Пример

Пример deletePendingWebhookEvent
Copy Copy
1
2const tenantId: string = "tenant_7f3b2a";
3const webhookEventId: string = "wh_evt_9a8c7d1234";
4const dryRun: boolean | undefined = undefined; // пример необязательного флага (не обязателен для этого вызова)
5const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, webhookEventId);
6

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


Параметры

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringНет
externalIdstringНет
eventTypestringНет
typestringНет
domainstringНет
attemptCountGTnumberНет

Ответ

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

Пример

Пример getPendingWebhookEventCount
Copy Copy
1
2const tenantId: string = "tenant_8d3b7a2f";
3const commentId: string | undefined = "comment_79a2b";
4const eventType: string | undefined = "comment.created";
5const domain: string | undefined = "forum.acme-corp.com";
6const attemptCountGT: number | undefined = 1;
7const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
8 tenantId,
9 commentId,
10 undefined,
11 eventType,
12 undefined,
13 domain,
14 attemptCountGT
15);
16

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringНет
externalIdstringНет
eventTypestringНет
typestringНет
domainstringНет
attemptCountGTnumberНет
skipnumberНет

Ответ

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

Пример

Пример getPendingWebhookEvents
Copy Copy
1
2const tenantId: string = 'tenant_9b3f7c';
3const commentId: string | undefined = undefined;
4const externalId: string | undefined = 'external-572a';
5const eventType: string | undefined = 'comment.updated';
6const type: string | undefined = 'outbound';
7const domain: string | undefined = 'reviews.example.com';
8const attemptCountGT: number | undefined = 1;
9const skip: number | undefined = 20;
10
11const result: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
12 tenantId,
13 commentId,
14 externalId,
15 eventType,
16 type,
17 domain,
18 attemptCountGT,
19 skip
20);
21

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
createQuestionConfigBodyCreateQuestionConfigBodyДа

Ответ

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

Пример

Пример createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const createQuestionConfigBody: CreateQuestionConfigBody = {
4 title: "Post-purchase feedback",
5 description: "Quick survey about your recent order",
6 required: true,
7 renderingType: "single_choice",
8 options: [
9 { label: "Very dissatisfied", value: "1" },
10 { label: "Dissatisfied", value: "2" },
11 { label: "Neutral", value: "3" },
12 { label: "Satisfied", value: "4" },
13 { label: "Very satisfied", value: "5" }
14 ] as QuestionConfigCustomOptionsInner[]
15} as CreateQuestionConfigBody;
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

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

Параметры

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

Ответ

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

Пример

Пример deleteQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_42fa9b7c";
3const id: string = "qcfg-0f8fad5b-d9cb-469f-a165-70867728950e";
4const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример getQuestionConfig
Copy Copy
1
2const tenantId: string = 'acme-tenant-92';
3const id: string = 'question-2026-07-42';
4const response: GetQuestionConfig200Response = await getQuestionConfig(tenantId, id);
5
6function summarize(cfg: GetQuestionConfig200Response, includeDetails?: boolean): string {
7 return includeDetails ? 'Question config (detailed)' : 'Question config (summary)';
8}
9
10const summary: string = summarize(response);
11

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

Parameters

ИмяТипОбязательноОписание
tenantIdstringДа
skipnumberНет

Ответ

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

Пример

Пример getQuestionConfigs
Copy Copy
1
2const tenantId: string = "tenant_acme_9876";
3const configsWithoutSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const configsWithSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 20);
5

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateQuestionConfigBodyUpdateQuestionConfigBodyДа

Ответ

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

Пример

Пример updateQuestionConfig
Copy Copy
1
2const tenantId: string = 'tenant_42e8b';
3const id: string = 'question_9f4a2';
4const updateQuestionConfigBody: UpdateQuestionConfigBody = {
5 questionText: 'How helpful was this article?',
6 description: 'Shown to users below the question (optional)',
7 required: true,
8 renderingType: 'Likert' as QuestionRenderingType,
9 customOptions: [
10 { label: 'Very helpful', value: '5' } as QuestionConfigCustomOptionsInner,
11 { label: 'Somewhat helpful', value: '3' } as QuestionConfigCustomOptionsInner,
12 { label: 'Not helpful', value: '1' } as QuestionConfigCustomOptionsInner
13 ],
14 whenSave: 'notify' as QuestionWhenSave
15};
16const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
17

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


Параметры

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

Ответ

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

Пример

Пример createQuestionResult
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const createQuestionResultBody: CreateQuestionResultBody = {
4 questionId: 'q-34567',
5 respondentId: 'user-8923',
6 answers: [{ optionId: 'opt_A', text: 'Agree', count: 1 }],
7 score: 5,
8 meta: [{ key: 'platform', value: 'web' }],
9 notifyModerators: false // необязательный параметр
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример deleteQuestionResult
Copy Copy
1
2const tenantIdEnv: string | undefined = process.env.FASTCOMMENTS_TENANT_ID;
3const tenantId: string = tenantIdEnv ?? 'tenant_78b3f2';
4const id: string = 'qres-9f2a3b1c';
5const response: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, id);
6

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример getQuestionResult
Copy Copy
1
2const tenantId: string = 'acme-corp-42';
3const id: string = 'question-9f8b7c';
4const includeComments: boolean | undefined = true; // пример необязательного параметра
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, id);
6console.log(result);
7

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


Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
urlIdstringНет
userIdstringНет
startDatestringНет
questionIdstringНет
questionIdsstringНет
skipnumberНет

Ответ

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

Пример

Пример getQuestionResults
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9b3f";
4 const urlId: string = "survey-2026-spring";
5 const userId: string = "user_00123";
6 const startDate: string = "2026-04-01T00:00:00Z";
7 const questionIds: string = "q_42,q_43";
8 const skip: number = 0;
9 const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
10 console.log(result);
11})();
12

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateQuestionResultBodyUpdateQuestionResultBodyДа

Ответ

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

Пример

Пример updateQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_7f8b3c';
3const id: string = 'questionResult_4621';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 questionId: 'q_1024',
6 result: 'flagged',
7 score: 0.92,
8 notes: 'Automated moderation flagged for review',
9 meta: [{ key: 'source', value: 'ai-moderator' }] as MetaItem[], // необязательные метаданные
10 status: { code: 'review_pending' } as APIStatus
11} as UpdateQuestionResultBody;
12const result: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
13

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
questionIdstringНет
questionIdsArrayНет
urlIdstringНет
timeBucketAggregateTimeBucketНет
startDateDateНет
forceRecalculatebooleanНет

Ответ

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

Пример

Пример aggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_001";
3const questionIds: string[] = ["q-2026-sales", "q-2026-support"];
4const urlId: string = "url_7f2c";
5const timeBucket: AggregateTimeBucket = { unit: "week", size: 1 };
6const startDate: Date = new Date("2026-01-01T00:00:00Z");
7const forceRecalculate: boolean = true;
8
9const result: AggregateQuestionResults200Response = await aggregateQuestionResults(
10 tenantId,
11 undefined,
12 questionIds,
13 urlId,
14 timeBucket,
15 startDate,
16 forceRecalculate
17);
18

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequestДа
forceRecalculatebooleanНет

Ответ

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

Пример

Пример bulkAggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_42";
3const bulkAggregateQuestionResultsRequest: BulkAggregateQuestionResultsRequest = {
4 questions: [
5 { questionId: "q-001", threadId: "thread-1001", questionType: "rating" },
6 { questionId: "q-002", threadId: "thread-1002", questionType: "yes_no" }
7 ],
8 timeRange: { from: "2026-03-01T00:00:00Z", to: "2026-04-01T00:00:00Z" },
9 groupBy: ["questionId", "threadId"]
10};
11const forceRecalculate: boolean = true;
12const result: BulkAggregateQuestionResults200Response = await bulkAggregateQuestionResults(tenantId, bulkAggregateQuestionResultsRequest, forceRecalculate);
13

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

Параметры

NameТипОбязательноОписание
tenantIdstringДа
questionIdstringНет
questionIdsArrayНет
urlIdstringНет
startDateDateНет
forceRecalculatebooleanНет
minValuenumberНет
maxValuenumberНет
limitnumberНет

Ответ

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

Пример

Пример combineCommentsWithQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant-acme-001';
3const questionId: string | undefined = 'q-analytics-42';
4const questionIds: string[] | undefined = ['q-analytics-42', 'q-feedback-17'];
5const urlId: string | undefined = 'url-987654';
6const startDate: Date | undefined = new Date('2026-01-01T00:00:00Z');
7const forceRecalculate: boolean | undefined = true;
8const minValue: number | undefined = 1;
9const maxValue: number | undefined = 5;
10const limit: number | undefined = 250;
11const result: CombineCommentsWithQuestionResults200Response = await combineCommentsWithQuestionResults(
12 tenantId,
13 questionId,
14 questionIds,
15 urlId,
16 startDate,
17 forceRecalculate,
18 minValue,
19 maxValue,
20 limit
21);
22

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

Параметры

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

Ответ

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


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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
idstringДа
deleteCommentsbooleanНет
commentDeleteModestringНет

Ответ

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


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


Параметры

ИмяТипТребуетсяОписание
tenantIdstringДа
emailstringДа

Ответ

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


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


Параметры

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

Ответ

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


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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
skipnumberНет

Ответ

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


Изменить пользователя SSO (PATCH) Internal Link


Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateAPISSOUserDataUpdateAPISSOUserDataДа
updateCommentsbooleanНет

Ответ

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


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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateAPISSOUserDataUpdateAPISSOUserDataДа
updateCommentsbooleanНет

Ответ

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

Пример

Пример putSSOUser
Copy Copy
1
2const tenantId: string = 'acme-enterprises-42';
3const id: string = 'usr-73a1b2';
4const updateAPISSOUserData: UpdateAPISSOUserData = {
5 email: 'marcus.ingram@acme.com',
6 givenName: 'Marcus',
7 familyName: 'Ingram',
8 roles: ['editor', 'project_owner'],
9 enabled: true
10};
11const result: PutSSOUserAPIResponse = await putSSOUser(tenantId, id, updateAPISSOUserData, true);
12

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


Параметры

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

Ответ

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

Пример

Пример createSubscription
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-123";
3const createAPIUserSubscriptionData: CreateAPIUserSubscriptionData = {
4 userId: "user_98765",
5 planId: "pro_monthly",
6 paymentMethod: { type: "card", cardId: "card_abc123" },
7 autoRenew: true,
8 trialDays: 14, // необязательный параметр (продемонстрировано)
9 metadata: { campaign: "spring_launch" } // необязательный параметр (продемонстрировано)
10};
11const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
12

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
userIdstringНет

Ответ

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


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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
userIdstringНет

Ответ

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

Пример

Пример getSubscriptions
Copy Copy
1
2const tenantId: string = "contoso-9a1b2c";
3const userId: string = "u-482f6";
4const subscriptions: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId);
5const userSubscriptions: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId, userId);
6

Обновить подписку Internal Link

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionDataДа
userIdstringНет

Ответ

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

Пример

Пример updateSubscription
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2c';
3const subscriptionId: string = 'sub_7641a2b3';
4const updateData: UpdateAPIUserSubscriptionData = {
5 status: 'active',
6 planId: 'pro_annual',
7 autoRenew: true,
8 renewalDate: '2026-04-15T00:00:00Z',
9 metadata: { upgradedBy: 'billing-team' }
10};
11const userId: string = 'user_215';
12const result: UpdateSubscriptionAPIResponse = await updateSubscription(tenantId, subscriptionId, updateData, userId);
13

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
yearNumbernumberНет
monthNumbernumberНет
dayNumbernumberНет
skipnumberНет

Ответ

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

Пример

Пример getTenantDailyUsages
Copy Copy
1
2const tenantId: string = 'tenant_5f4a3b2c-1d6e-4f9a-b9d8-123456789abc';
3const yearNumber: number = 2026;
4const monthNumber: number = 3;
5const dayNumber: number = 24;
6const skip: number = 0;
7
8const result: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, yearNumber, monthNumber, dayNumber, skip);
9

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
createTenantPackageBodyCreateTenantPackageBodyДа

Ответ

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

Пример

Пример createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_acme-corp_001";
3const createTenantPackageBody: CreateTenantPackageBody = {
4 name: "Acme Standard Package",
5 description: "Default package for Acme Corp comments with moderation and SSO enabled",
6 enabled: true,
7 maxCommentsPerThread: 500,
8 voteStyle: "thumbs",
9 gifRating: "PG-13",
10 tosConfig: { enabled: true, url: "https://acme.example.com/terms" } // демонстрация необязательного параметра
11};
12const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
13

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

Параметры

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

Ответ

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

Пример

Пример deleteTenantPackage
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_8f3a2b4c9d01";
4 const packageId: string = "pkg_2026-04-security-patch";
5 const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
6 console.log(result);
7})();
8

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_7f3b2c8';
3const packageId: string = 'pkg_standard_2026';
4const requestOptions: { includeConfig?: boolean } = { includeConfig: true };
5const packageResponse: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
6

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
skipnumberНет

Ответ

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

Пример

Пример getTenantPackages
Copy Copy
1
2const tenantId: string = 'tenant-7b3c2f';
3const skipCount: number = 10;
4const packages: GetTenantPackages200Response = await getTenantPackages(tenantId, skipCount);
5const packagesFromStart: GetTenantPackages200Response = await getTenantPackages(tenantId);
6

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
replaceTenantPackageBodyReplaceTenantPackageBodyДа

Ответ

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

Пример

Пример replaceTenantPackage
Copy Copy
1
2const tenantId: string = "tenant-9f3c2a";
3const id: string = "pkg_4f8b21";
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 packageName: "Premium Moderation Pack",
6 enabled: true,
7 apiStatus: { mode: "active" } as APIStatus,
8 customConfigParameters: { maxFlagsBeforeReview: 5 } as CustomConfigParameters,
9 voteStyle: "thumbs" as VoteStyle,
10 tosConfig: { requireAcceptance: true } as TOSConfig
11};
12const result: FlagCommentPublic200Response = await replaceTenantPackage(tenantId, id, replaceTenantPackageBody);
13

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

Параметры

NameТипОбязательноОписание
tenantIdstringДа
idstringДа
updateTenantPackageBodyUpdateTenantPackageBodyДа

Ответ

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

Пример

Пример updateTenantPackage
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_sf_001";
4 const id: string = "pkg-premium-v2";
5 const updateTenantPackageBody: UpdateTenantPackageBody = {
6 name: "San Francisco Premium",
7 enabled: true,
8 customConfig: { maxComments: 500 },
9 tosConfig: { required: true } // необязательные поля показаны в качестве примера; остальные опущены
10 } as UpdateTenantPackageBody;
11 const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
12 console.log(result);
13})();
14

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

Параметры

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

Ответ

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

Пример

Пример createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_74b3a9f4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "jane.doe@acmecorp.com",
5 displayName: "Jane Doe",
6 role: "moderator",
7 sendWelcomeEmail: true, // показан необязательный параметр
8 metadata: { department: "Customer Support" }
9};
10const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
11

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
deleteCommentsstringНет
commentDeleteModestringНет

Ответ

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

Пример

Пример deleteTenantUser
Copy Copy
1
2async function run(): Promise<void> {
3 const tenantId: string = "acme_corp_tenant_9f1a2b";
4 const id: string = "user_4d2a1b6c";
5 const deleteComments: string = "true"; // удалить также комментарии пользователя
6 const commentDeleteMode: string = "permanent"; // "permanent" или "soft"
7 const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8 console.log(result);
9}
10run();
11

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

Параметры

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

Ответ

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

Пример

Пример использования getTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_fc5a9b2c';
3const userId: string = 'user_0a12b3';
4const result: GetTenantUser200Response = await getTenantUser(tenantId, userId);
5const user: User | undefined = (result as any).user; // доступ к полезной нагрузке
6const userEmail: string | undefined = user?.email;
7console.log('Fetched user email:', userEmail);
8

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
skipnumberНет

Ответ

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

Пример

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

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
replaceTenantUserBodyReplaceTenantUserBodyДа
updateCommentsstringНет

Ответ

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

Пример

Пример replaceTenantUser
Copy Copy
1
2const tenantId: string = "tenant_acmeCorp";
3const id: string = "user_84b2";
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 email: "alice.jenkins@acmecorp.com",
6 displayName: "Alice Jenkins",
7 roles: ["moderator", "editor"],
8 disabled: false
9} as ReplaceTenantUserBody;
10const updateComments: string = "Migrated user account and reattributed historical comments";
11
12const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
13

Параметры

NameTypeОбязательныйDescription
tenantIdstringДа
idstringДа
redirectURLstringНет

Ответ

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

Пример

Пример sendLoginLink
Copy Copy
1
2const tenantId: string = "tenant_12a9f3b7";
3const id: string = "user_84b2c7d1";
4const redirectURL: string = "https://app.mycompany.com/welcome?ref=login_email";
5const resultWithoutRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id);
6const resultWithRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
7

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateTenantUserBodyUpdateTenantUserBodyДа
updateCommentsstringНет

Ответ

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

Пример

Пример updateTenantUser
Copy Copy
1
2const tenantId: string = "tenant_8f3b2a9d";
3const id: string = "user_52c9f1ab";
4const updateTenantUserBody: UpdateTenantUserBody = {
5 email: "jane.doe@example.com",
6 displayName: "Jane Doe",
7 roles: ["moderator"],
8 isActive: true,
9 metadata: { signupSource: "sso", locale: "en-US" }
10};
11const updateComments: string = "Promoted to moderator and updated display name";
12const result: FlagCommentPublic200Response = await updateTenantUser(tenantId, id, updateTenantUserBody, updateComments);
13

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


Параметры

NameTypeRequiredDescription
tenantIdstringДа
createTenantBodyCreateTenantBodyДа

Ответ

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

Пример

Пример createTenant
Copy Copy
1
2const tenantId: string = 'acme-corp-001';
3const createTenantBody: CreateTenantBody = {
4 name: 'Acme Corporation',
5 domainConfiguration: { primaryDomain: 'comments.acme.com', enforceHttps: true } as APIDomainConfiguration,
6 billingInfo: { planId: 'enterprise', contactEmail: 'billing@acme.com' } as BillingInfo
7 // необязательные поля, такие как ssoConfig или customConfig, намеренно опущены
8} as CreateTenantBody;
9
10const result: CreateTenant200Response = await createTenant(tenantId, createTenantBody);
11

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
surestringНет

Ответ

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

Пример

Пример deleteTenant
Copy Copy
1
2const tenantId: string = 'tenant_42c9f1';
3const id: string = 'flag_9a7b3c';
4const sure: string = 'confirm-delete';
5const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
6

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример getTenant
Copy Copy
1
2const tenantId: string = "tenant_9f4b2c1a";
3const idOverride: string | undefined = undefined; // необязательное переопределение, если доступно
4const id: string = idOverride ?? "site_3e7a6b2f";
5const response: GetTenant200Response = await getTenant(tenantId, id);
6console.log(response);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
metastringНет
skipnumberНет

Ответ

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

Пример

Пример getTenants
Copy Copy
1
2const tenantId: string = 'tenant_8421e7';
3const meta: string = 'include=domains,billing,customConfig';
4const skip: number = 20;
5
6const tenantsBasic: GetTenants200Response = await getTenants(tenantId);
7const tenantsWithOptions: GetTenants200Response = await getTenants(tenantId, meta, skip);
8

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


Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateTenantBodyUpdateTenantBodyДа

Ответ

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

Пример

Пример updateTenant
Copy Copy
1
2const tenantId: string = 'acme-corp-001';
3const id: string = 'tenant-42';
4const billingInfo: BillingInfo = { billingEmail: 'billing@acme.com', address: '123 Market St' } as BillingInfo;
5const updateTenantBody: UpdateTenantBody = { displayName: 'Acme Corporation', billingInfo } as UpdateTenantBody;
6const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
7

Изменить состояние тикета Internal Link


Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
userIdstringДа
idstringДа
changeTicketStateBodyChangeTicketStateBodyДа

Ответ

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

Пример

Пример changeTicketState
Copy Copy
1
2const tenantId: string = "tenant_7f3b2c9a";
3const userId: string = "user_5a1d9fb2";
4const id: string = "ticket_3e8a1b6f";
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: "closed",
7 reason: "Fixed in backend release 2.4.1",
8 notifyUsers: true,
9 metadata: { resolutionOwner: "agent_12", priority: "high" } // показаны необязательные поля
10};
11const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
12

Создать тикет Internal Link

Параметры

NameTypeRequiredDescription
tenantIdstringДа
userIdstringДа
createTicketBodyCreateTicketBodyДа

Ответ

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

Пример

Пример createTicket
Copy Copy
1
2const tenantId: string = 'acme-company-001';
3const userId: string = 'u_78f4b2';
4const createTicketBody: CreateTicketBody = {
5 title: 'Unable to access project dashboard',
6 description: 'Receiving 403 when accessing /dashboard for project X',
7 priority: 'high',
8 tags: ['dashboard', 'access'] // демонстрация необязательного поля
9};
10const result: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
11

Получить тикет Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
userIdstringНет

Ответ

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

Пример

Пример getTicket
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const ticketId: string = 'tkt-20260325-42';
4const userId: string = 'user-8452';
5
6const ticketResponseWithUser: GetTicket200Response = await getTicket(tenantId, ticketId, userId);
7const ticketResponseWithoutUser: GetTicket200Response = await getTicket(tenantId, ticketId);
8

Получить тикеты Internal Link

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
userIdstringНет
statenumberНет
skipnumberНет
limitnumberНет

Ответ

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

Пример

Пример getTickets
Copy Copy
1
2const tenantId: string = "tenant_92f3b4c1";
3const userId: string = "user_742a9f3e";
4const state: number = 1;
5const skip: number = 0;
6const limit: number = 25;
7const ticketsFull: GetTickets200Response = await getTickets(tenantId, userId, state, skip, limit);
8const ticketsMinimal: GetTickets200Response = await getTickets("tenant_92f3b4c1");
9

Получить переводы Internal Link

Параметры

ИмяТипОбязательноОписание
namespacestringДа
componentstringДа
localestringНет
useFullTranslationIdsbooleanНет

Ответ

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

Пример

Пример getTranslations
Copy Copy
1
2const translationsDefault: GetTranslationsResponse = await getTranslations("payments", "checkout");
3const translationsFrenchDetailed: GetTranslationsResponse = await getTranslations("payments", "checkout", "fr-FR", true);
4

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

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
fileBlobДа
sizePresetSizePresetНет
urlIdstringНет

Ответ

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


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

Параметры

ИмяТипОбязательноОписание
tenantIdstringYes
idstringYes

Ответ

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

Пример

Пример использования getUserBadgeProgressById
Copy Copy
1
2const optionalTenantSuffix: string | undefined = undefined;
3const tenantId: string = `5f8d0d55-1234-4ab1-9e2a-3f2b5c6d7e8f${optionalTenantSuffix ?? ''}`;
4const id: string = '3a2b1c4d-5678-4ef0-9abc-def123456789';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressById(tenantId, id);
6

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


Параметры

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

Ответ

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

Пример

Пример getUserBadgeProgressByUserId
Copy Copy
1
2const tenantId: string = 'tenant_7f9c2d3b';
3const maybeUserId: string | undefined = 'user_4b8e1f9a'; // необязательный источник (может быть undefined)
4const userId: string = maybeUserId ?? 'user_fallback0001';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressByUserId(tenantId, userId);
6console.log(result);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
userIdstringНет
limitnumberНет
skipnumberНет

Ответ

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

Пример

Пример getUserBadgeProgressList
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_4f8c2b9d';
4 const userId: string = 'user_9a7e215c';
5 const limit: number = 25;
6 const skip: number = 0;
7 const resultMinimal: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId);
8 const resultFull: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId, userId, limit, skip);
9 console.log(resultMinimal, resultFull);
10})();
11

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

Параметры

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

Ответ

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

Пример

Пример createUserBadge
Copy Copy
1
2const tenantId: string = "tenant_9a8b7c";
3const params: CreateUserBadgeParams = {
4 name: "Top Contributor",
5 slug: "top-contributor",
6 description: "Awarded for 100 approved comments",
7 iconUrl: "https://cdn.fastcomments.com/badges/top-contributor.png",
8 active: true,
9 criteria: { approvedComments: 100 },
10 customConfig: { showOnProfile: true } // необязательный параметр
11};
12const result: CreateUserBadge200Response = await createUserBadge(tenantId, params);
13

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример deleteUserBadge
Copy Copy
1
2type DeleteOptions = { notifyModerators?: boolean };
3
4const tenantId: string = 'tenant_8a3f21';
5const id: string = 'badge_71f2b';
6const options: DeleteOptions = { notifyModerators: true };
7
8const result: UpdateUserBadge200Response = await deleteUserBadge(tenantId, id);
9

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

Параметры

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

Ответ

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

Пример

Пример getUserBadge
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const id: string = "badge_8c7d2f";
4const response: GetUserBadge200Response = await getUserBadge(tenantId, id);
5

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
userIdstringНет
badgeIdstringНет
typenumberНет
displayedOnCommentsbooleanНет
limitnumberНет
skipnumberНет

Ответ

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

Пример

Пример getUserBadges
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const userId: string = 'user_5f4d3c2a';
4const badgeId: string = 'badge_top_contributor';
5const type: number = 1;
6const displayedOnComments: boolean = true;
7const limit: number = 50;
8const skip: number = 0;
9
10const result: GetUserBadges200Response = await getUserBadges(tenantId, userId, badgeId, type, displayedOnComments, limit, skip);
11

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
updateUserBadgeParamsUpdateUserBadgeParamsДа

Ответ

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

Пример

Пример updateUserBadge
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_acme_987';
4 const id: string = 'badge_top_contributor_42';
5 const updateUserBadgeParams: UpdateUserBadgeParams = {
6 title: 'Top Contributor',
7 description: 'Awarded for reaching 100 high-quality comments',
8 color: '#FFD700',
9 iconUrl: 'https://cdn.acme.com/badges/top-contributor.svg',
10 active: true,
11 notifyUsers: true
12 } as UpdateUserBadgeParams;
13 const result: UpdateUserBadge200Response = await updateUserBadge(tenantId, id, updateUserBadgeParams);
14 console.log(result);
15})();
16

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
ssostringНет

Ответ

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

Пример

Пример getUserNotificationCount
Copy Copy
1
2(async () => {
3 const tenantId: string = '9f1e2d3c-4b5a-6d7e-8f90-123456789abc';
4 const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MjMifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
5 const resultWithSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId, ssoToken);
6 const resultWithoutSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId);
7 console.log(resultWithSSO, resultWithoutSSO);
8})();
9

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
pageSizenumberНет
afterIdstringНет
includeContextbooleanНет
afterCreatedAtnumberНет
unreadOnlybooleanНет
dmOnlybooleanНет
noDmbooleanНет
includeTranslationsbooleanНет
ssostringНет

Ответ

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

Пример

Пример getUserNotifications
Copy Copy
1
2const tenantId: string = 'tenant_7f3b1c';
3const pageSize: number = 25;
4const afterId: string = 'notif_b2f9e4';
5const includeContext: boolean = true;
6const afterCreatedAt: number = Date.now() - 24 * 60 * 60 * 1000;
7const unreadOnly: boolean = true;
8const dmOnly: boolean = false;
9const noDm: boolean = false;
10const includeTranslations: boolean = true;
11const sso: string = 'sso_tok_user_9f8d7c';
12const response: GetUserNotifications200Response = await getUserNotifications(
13 tenantId,
14 pageSize,
15 afterId,
16 includeContext,
17 afterCreatedAt,
18 unreadOnly,
19 dmOnly,
20 noDm,
21 includeTranslations,
22 sso
23);
24

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

Параметры

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

Ответ

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

Пример

Пример resetUserNotificationCount
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9f3b2c4a";
4 const ssoToken: string | undefined = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9._sample_payload_.signature";
5 const responseWithSSO: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId, ssoToken);
6 const responseWithoutSSO: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId);
7 console.log(responseWithSSO, responseWithoutSSO);
8})();
9

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringДа
afterIdstringНет
afterCreatedAtnumberНет
unreadOnlybooleanНет
dmOnlybooleanНет
noDmbooleanНет
ssostringНет

Ответ

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

Пример

resetUserNotifications Пример
Copy Copy
1
2const tenantId: string = "tenant_prod_4a9f12";
3const afterId: string = "notification_87213";
4const afterCreatedAt: number = Math.floor(Date.now() / 1000) - 3600;
5const unreadOnly: boolean = true;
6const dmOnly: boolean = false;
7const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.payload";
8const result: ResetUserNotifications200Response = await resetUserNotifications(tenantId, afterId, afterCreatedAt, unreadOnly, dmOnly, undefined, sso);
9

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

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
notificationIdstringДа
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumДа
commentIdstringДа
ssostringНет

Ответ

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

Пример

Пример updateUserNotificationCommentSubscriptionStatus
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const notificationId: string = 'notif-2026-03-25-01';
4const commentId: string = 'cmt-8f3a2b';
5const optedInOrOut: UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum = UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum.OptIn;
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso-payload.signature';
7const result: UpdateUserNotificationStatus200Response = await updateUserNotificationCommentSubscriptionStatus(tenantId, notificationId, optedInOrOut, commentId, sso);
8

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

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

Параметры

ИмяТипОбязательныйОписание
tenantIdstringYes
urlIdstringYes
urlstringYes
pageTitlestringYes
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnumYes
ssostringNo

Ответ

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

Пример

updateUserNotificationPageSubscriptionStatus Пример
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const urlId: string = 'blog-launch-2026';
4const url: string = 'https://acme.example.com/blog/launch-march-2026';
5const pageTitle: string = 'Acme Product Launch — March 2026';
6const subscribedOrUnsubscribed: UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum = UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum.Subscribed;
7const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
8const response: UpdateUserNotificationStatus200Response = await updateUserNotificationPageSubscriptionStatus(tenantId, urlId, url, pageTitle, subscribedOrUnsubscribed, sso);
9

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
notificationIdstringДа
newStatusUpdateUserNotificationStatusNewStatusEnumДа
ssostringНет

Ответ

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

Пример

Пример updateUserNotificationStatus
Copy Copy
1
2const tenantId: string = 'tenant_84a2c3';
3const notificationId: string = 'notif_20260325_01';
4const newStatus: UpdateUserNotificationStatusNewStatusEnum = UpdateUserNotificationStatusNewStatusEnum.Read;
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_signature_example';
6const result: UpdateUserNotificationStatus200Response = await updateUserNotificationStatus(tenantId, notificationId, newStatus, sso);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
urlIdWSstringДа
userIdsstringДа

Ответ

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

Пример

Пример getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_7f3a2b';
3const urlIdWS: string = 'articles/2026/03/25/fastcomments-integration';
4const maybeUserIds: string | undefined = 'user_123,user_456'; // необязательный источник
5const userIds: string = maybeUserIds ?? 'user_123';
6const presence: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
urlIdstringДа
usernameStartsWithstringНет
mentionGroupIdsArrayНет
ssostringНет
searchSectionSearchUsersSearchSectionEnumНет

Ответ

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

Пример

Пример searchUsers
Copy Copy
1
2const tenantId: string = 'tenant_8392';
3const urlId: string = 'articles/2026/03/25/fastcomments-release';
4const usernameStartsWith: string = 'jo';
5const mentionGroupIds: Array<string> = ['editors', 'senior-writers'];
6const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
7const searchSection: SearchUsersSearchSectionEnum = SearchUsersSearchSectionEnum.ALL;
8const result: SearchUsers200Response = await searchUsers(tenantId, urlId, usernameStartsWith, mentionGroupIds, sso, searchSection);
9

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
idstringДа

Ответ

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

Пример

Пример использования getUser
Copy Copy
1
2const idSuffix: string | undefined = undefined;
3const tenantId: string = "acme-enterprises";
4const id: string = idSuffix ?? "user_98765";
5const response: GetUser200Response = await getUser({ tenantId, id });
6

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


Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
commentIdstringДа
directionCreateVoteDirectionEnumДа
userIdstringНет
anonUserIdstringНет

Ответ

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

Пример

Пример createVote
Copy Copy
1
2const tenantId: string = 'tenant_5f2a9b';
3const commentId: string = 'cmt_3b7e21';
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.Up;
5const anonUserId: string = 'anon_9x7k2p';
6const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
7

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
idstringДа
editKeystringНет

Ответ

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

Пример

Пример deleteVote
Copy Copy
1
2const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
3const id: string = 'vote-7a1b2c3d-9f8e-4b6a-8123-abcdef012345';
4const editKey: string = 'editKey_4f3e2d1c';
5
6const resultWithEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
7const resultWithoutEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id);
8

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

Параметры

NameTypeRequiredDescription
tenantIdstringДа
urlIdstringДа

Ответ

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

Пример

Пример использования getVotes
Copy Copy
1
2const tenantId: string = 'tenant-42c-eu';
3const urlId: string = 'article-7f9b';
4const includeMetadata: boolean | undefined = true;
5const votes: GetVotes200Response = await getVotes(tenantId, urlId);
6

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

Параметры

ИмяТипОбязательноОписание
tenantIdstringДа
urlIdstringДа
userIdstringНет
anonUserIdstringНет

Ответ

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

Пример

Пример getVotesForUser
Copy Copy
1
2(async (): Promise<void> => {
3 const tenantId: string = "local-news-ny";
4 const urlId: string = "articles/2026-03-25/ev-infrastructure-update";
5 const userId: string = "user_78b6f3d9";
6 const anonUserId: string = "anon_9c3f7a1b";
7 const result: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId, anonUserId);
8 console.log(result);
9})();
10

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

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

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

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