FastComments.com

FastComments JavaScript/TypeScript SDK


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

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

Репозиторий

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


Установка Internal Link

npm install fastcomments-sdk

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


Полная документация по API: docs/api/README.md

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


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

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

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


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

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

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

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

const publicApi = new PublicApi();

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

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

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

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

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

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

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

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

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

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

// Создать простой SSO с помощью встроенного помощника  
const userData = {
  username: 'john_doe',
  email: 'john@example.com',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg'
};

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

const ssoToken = sso.createToken();

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

Защищённый SSO (на стороне сервера, рекомендуется)

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

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

// Создать защищённый SSO с помощью встроенного помощника
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

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

const ssoConfig = sso.prepareToSend();

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

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

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

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

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

const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: ssoToken // Использовать сгенерированный сервером SSO-токен
});

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

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

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

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

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

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

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

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

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

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

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 — за, -1 — против
  }
});

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

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

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

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

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

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

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

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

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

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

    return true; // Return true if event was handled
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

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

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

Прослушивайте события, относящиеся к конкретному пользователю (уведомления, упоминания и т.д.):

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

const userConfig = {
  userIdWS: 'user-session-id', // Get this from getComments response
};

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

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Show notification in your UI
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }

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

// Close when done
userSubscription.close();

Получение userIdWS

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

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

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

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

ID трансляции Internal Link

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

import { v4 as uuidv4 } from 'uuid';

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

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

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

aggregate Internal Link


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

Параметры

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

Ответ

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


getAuditLogs Internal Link

Параметры

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

Ответ

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

Пример

Пример getAuditLogs
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = 'tenant_9b8f6c';
4 const limit: number = 50;
5 const skip: number = 0;
6 const order: SORTDIR = 'desc';
7 const after: number = Date.now() - 7 * 24 * 60 * 60 * 1000;
8 const response: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, order, after);
9 console.log(response);
10}
11main();
12

blockFromCommentPublic Internal Link

Параметры

Name Type Требуется Описание
tenantId string Да
commentId string Да
publicBlockFromCommentParams PublicBlockFromCommentParams Да
sso string Нет

Ответ

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

unBlockCommentPublic Internal Link

Параметры

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

Ответ

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

checkedCommentsForBlocked Internal Link

Параметры

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

Ответ

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

blockUserFromComment Internal Link

Параметры

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

Ответ

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

Пример

Пример blockUserFromComment
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const id: string = "comment_67890";
4const blockFromCommentParams: BlockFromCommentParams = {
5 reason: "Repeated abusive language",
6 blockDurationHours: 168,
7 blockReplies: true,
8 notifyAuthor: true
9};
10const userId: string = "user_abc123";
11const anonUserId: string = "anon_xyz789";
12const result: BlockFromCommentPublic200Response = await blockUserFromComment(tenantId, id, blockFromCommentParams, userId, anonUserId);
13

createCommentPublic Internal Link

Параметры

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

Ответ

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

deleteComment Internal Link

Параметры

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

Ответ

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

Пример

Пример использования deleteComment
Copy Copy
1
2const tenantId: string = 'tenant_7b3f2a';
3const commentId: string = 'cmt_8a1f4d2b';
4const contextUserId: string = 'user_102';
5const isLive: boolean = true;
6const result: DeleteComment200Response = await deleteComment(tenantId, commentId, contextUserId, isLive);
7

deleteCommentPublic Internal Link

Параметры

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

Ответ

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

deleteCommentVote Internal Link

Параметры

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

Ответ

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

flagComment Internal Link

Параметры

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

Ответ

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

Пример

Пример flagComment
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const id: string = 'comment_7f3a2b9e';
4const userId: string = 'user_jdoe_1001';
5const anonUserId: string = 'anon_3f2b_visitor';
6const result: FlagComment200Response = await flagComment(tenantId, id, userId, anonUserId);
7

getComment Internal Link

Параметры

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

Ответ

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

getComments Internal Link

Параметры

Name Type Required Description
tenantId string Да
page number Нет
limit number Нет
skip number Нет
asTree boolean Нет
skipChildren number Нет
limitChildren number Нет
maxTreeDepth number Нет
urlId string Нет
userId string Нет
anonUserId string Нет
contextUserId string Нет
hashTag string Нет
parentId string Нет
direction SortDirections Нет

Ответ

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

Пример

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

getCommentsPublic Internal Link

req tenantId urlId

Параметры

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

Ответ

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

Пример

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

getCommentText Internal Link

Параметры

Name Type Required Description
tenantId string Yes
commentId string Yes
editKey string No
sso string No

Ответ

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

getCommentVoteUserNames Internal Link


Parameters

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

Response

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

lockComment Internal Link

Параметры

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

Ответ

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

pinComment Internal Link

Параметры

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

Ответ

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

saveComment Internal Link

Параметры

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

Ответ

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

saveCommentsBulk Internal Link

Параметры

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

Ответ

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

setCommentText Internal Link

Параметры

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

Ответ

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

Пример

Пример setCommentText
Copy Copy
1
2const tenantId: string = 'tenant_6721f4';
3const commentId: string = 'cmt_9a3b2d';
4const broadcastId: string = 'live_2026_03_25';
5const editKey: string = 'edit_k_4f7b9';
6const sso: string = 'sso_tok_eyJhbGciOiJIUzI1';
7const commentTextUpdateRequest: CommentTextUpdateRequest = {
8 text: 'Updated to clarify the timeline and link the relevant docs.',
9 mentions: [{ userId: 'user_102', displayName: 'Alex Rivera' }],
10 hashtags: [{ tag: 'product-update' }]
11};
12const result: SetCommentText200Response = await setCommentText(tenantId, commentId, broadcastId, commentTextUpdateRequest, editKey, sso);
13

unBlockUserFromComment Internal Link

Параметры

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

Ответ

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

unFlagComment Internal Link


Параметры

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

Ответ

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

unLockComment Internal Link

Параметры

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

Ответ

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

unPinComment Internal Link

Параметры

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

Ответ

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

updateComment Internal Link

Параметры

Name Type Required Description
tenantId string Да
id string Да
updatableCommentParams UpdatableCommentParams Да
contextUserId string Нет
doSpamCheck boolean Нет
isLive boolean Нет

Ответ

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

Пример

Пример updateComment
Copy Copy
1
2const tenantId: string = "tenant_acme_corp_01";
3const id: string = "comment_20260325_4592";
4const updatableCommentParams: UpdatableCommentParams = {
5 body: "Updated the response to include a link to the RFC and fixed a typo in the second paragraph.",
6 editedByUserId: "user_8721",
7 isVisible: true
8};
9const contextUserId: string = "user_8721";
10const doSpamCheck: boolean = true;
11const isLive: boolean = true;
12const result: FlagCommentPublic200Response = await updateComment(tenantId, id, updatableCommentParams, contextUserId, doSpamCheck, isLive);
13

voteComment Internal Link

Параметры

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

Ответ

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

addDomainConfig Internal Link

Параметры

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

Ответ

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

deleteDomainConfig Internal Link


Параметры

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

Ответ

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


getDomainConfig Internal Link

Параметры

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

Ответ

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


getDomainConfigs Internal Link


Параметры

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

Ответ

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


patchDomainConfig Internal Link


Параметры

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

Ответ

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


putDomainConfig Internal Link


Параметры

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

Ответ

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


createEmailTemplate Internal Link

Параметры

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

Ответ

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

Пример

Пример createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_7a9f3c2b";
3const customConfig: CustomConfigParameters = { smtpHost: "smtp.fastmail.com", smtpPort: 587, useTLS: true };
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Account Notification",
6 subject: "Your ACME account was updated",
7 fromEmail: "no-reply@acme-corp.com",
8 replyTo: "support@acme-corp.com",
9 html: "<p>Hi {{user.firstName}}, your account settings were changed.</p>",
10 text: "Hi {{user.firstName}}, your account settings were changed.",
11 isActive: true,
12 description: "Used for transactional account update emails",
13 customConfig
14};
15const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
16

deleteEmailTemplate Internal Link

Параметры

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

Ответ

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

Пример

deleteEmailTemplate Пример
Copy Copy
1
2const tenantId: string = 'tenant_7f4c9d1e';
3const templateId: string = 'tmpl_welcome_2024-03';
4const notifyAdmin: boolean | undefined = true; // пример необязательного параметра
5
6const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
7

deleteEmailTemplateRenderError Internal Link

Параметры

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

Ответ

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

Пример

deleteEmailTemplateRenderError Пример
Copy Copy
1
2const tenantId: string = 'tenant_7f3b4c2a';
3const templateEnvironment: string | undefined = 'production'; // необязательный селектор окружения
4const id: string = `emailTemplates/${templateEnvironment ?? 'staging'}/welcome_v2`;
5const errorId: string = 'err_5a9d2f1c';
6const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
7console.log(result);
8

getEmailTemplate Internal Link

Параметры

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

Ответ

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

getEmailTemplateDefinitions Internal Link

Параметры

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

Ответ

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

getEmailTemplateRenderErrors Internal Link

Параметры

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

Ответ

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

getEmailTemplates Internal Link

Параметры

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

Ответ

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

renderEmailTemplate Internal Link

Параметры

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

Ответ

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

Пример

Пример renderEmailTemplate
Copy Copy
1
2const tenantId: string = 'tenant_b6f3c2';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'comment-notification',
5 recipient: { name: 'Ava Thompson', email: 'ava.thompson@publisher.com' },
6 context: {
7 siteName: 'City Gazette',
8 commentText: 'Thanks for the in-depth coverage — very helpful.',
9 articleTitle: 'Downtown Redevelopment Plan Advances',
10 threadUrl: 'https://citygazette.example/articles/2026/redevelopment#comments'
11 }
12};
13const locale: string = 'en-US';
14const result: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
15

updateEmailTemplate Internal Link

Параметры

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

Ответ

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

getEventLog Internal Link

req tenantId urlId userIdWS

Параметры

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

Ответ

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

Пример

Пример getEventLog
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const urlId: string = 'article-2026-03-25';
4const userIdWS: string | undefined = undefined; // необязательное входящее значение
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

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Параметры

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

Ответ

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

createFeedPost Internal Link

Параметры

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

Ответ

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

Пример

Пример createFeedPost
Copy Copy
1
2const tenantId: string = "tenant_7f3b9a";
3const createFeedPostParams: CreateFeedPostParams = {
4 title: "Weekly Product Update — March 2026",
5 body: "We've shipped performance improvements and bug fixes across the web client. See the release notes for details.",
6 authorId: "user_86fa2b",
7 allowComments: true,
8 media: [
9 {
10 url: "https://cdn.example.com/images/update-march.png",
11 mimeType: "image/png",
12 caption: "Performance graph",
13 assets: [{ url: "https://cdn.example.com/images/update-march@2x.png", width: 1600, height: 900 }]
14 }
15 ],
16 links: [{ url: "https://www.example.com/release-notes/march-2026", title: "Release notes" }]
17};
18const broadcastId: string = "broadcast_prod_updates_202603";
19const isLive: boolean = false;
20const doSpamCheck: boolean = true;
21const skipDupCheck: boolean = false;
22const result: CreateFeedPost200Response = await createFeedPost(tenantId, createFeedPostParams, broadcastId, isLive, doSpamCheck, skipDupCheck);
23

createFeedPostPublic Internal Link

Параметры

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

Ответ

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

deleteFeedPostPublic Internal Link

Параметры

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

Ответ

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

getFeedPosts Internal Link

req tenantId afterId

Параметры

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

Ответ

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

getFeedPostsPublic Internal Link

req tenantId afterId

Параметры

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

Ответ

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

getFeedPostsStats Internal Link

Параметры

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

Ответ

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

getUserReactsPublic Internal Link


Параметры

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

Ответ

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

reactFeedPostPublic Internal Link

Параметры

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

Ответ

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

Пример

Пример reactFeedPostPublic
Copy Copy
1
2const tenantId: string = 'd290f1ee-6c54-4b01-90e6-d701748f0851';
3const postId: string = 'c1a2b3d4-5678-90ab-cdef-1234567890ab';
4const reactBodyParams: ReactBodyParams = { reaction: 'like', emoji: '👍', source: 'web' };
5const isUndo: boolean = false;
6const broadcastId: string = 'broadcast-2026-03-25-001';
7const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
8const result: ReactFeedPostPublic200Response = await reactFeedPostPublic(tenantId, postId, reactBodyParams, isUndo, broadcastId, sso);
9

updateFeedPost Internal Link

Параметры

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

Ответ

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

updateFeedPostPublic Internal Link


Параметры

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

Ответ

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

flagCommentPublic Internal Link

Параметры

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

Ответ

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

addHashTag Internal Link

Параметры

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

Ответ

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

Пример

addHashTag Пример
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const createHashTagBody: CreateHashTagBody = {
4 name: 'feature-request',
5 label: 'Feature Request',
6 color: '#FF5722',
7 enabled: true
8};
9const response: AddHashTag200Response = await addHashTag(tenantId, createHashTagBody);
10const responseWithoutTenant: AddHashTag200Response = await addHashTag(undefined, createHashTagBody);
11

addHashTagsBulk Internal Link

Параметры

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

Ответ

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

Пример

Пример addHashTagsBulk
Copy Copy
1
2// Создать идентификатор тенанта (необязательный параметр)
3const tenantId: string = "tenant_9f8c2b7a";
4
5// Подготовить отдельные записи тегов
6const tag1: BulkCreateHashTagsBodyTagsInner = {
7 name: "product-feedback",
8 label: "Product Feedback",
9 color: "#1f8a70",
10 description: "User suggestions and enhancement requests",
11 isActive: true
12};
13
14const tag2: BulkCreateHashTagsBodyTagsInner = {
15 name: "bug-report",
16 label: "Bug Report",
17 color: "#d64545",
18 description: "User-reported defects and issues",
19 isActive: true
20};
21
22// Тело для массового создания (необязательный параметр)
23const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
24 tags: [tag1, tag2]
25};
26
27// Вызвать глобальную асинхронную функцию и присвоить типизированный результат
28const result: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
29

deleteHashTag Internal Link

Параметры

Name Type Required Description
tag string Да
tenantId string Нет
deleteHashTagRequest DeleteHashTagRequest Нет

Ответ

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

Пример

Пример deleteHashTag
Copy Copy
1
2const tag: string = "breaking-news";
3const tenantId: string = "tenant_12345";
4const deleteRequest: DeleteHashTagRequest = { initiatedBy: "moderator@newsorg.com", purgeAllOccurrences: true };
5const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteRequest);
6

getHashTags Internal Link

Параметры

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

Ответ

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

patchHashTag Internal Link

Параметры

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

Ответ

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

createModerator Internal Link


Параметры

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

Ответ

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

Пример

Пример createModerator
Copy Copy
1
2const tenantId: string = 'tenant_7d9f2b4a';
3const customConfig: CustomConfigParameters = { timezone: 'UTC', moderationQueueEnabled: true };
4const createModeratorBody: CreateModeratorBody = {
5 email: 'jane.martin@publisher.com',
6 displayName: 'Jane Martin',
7 roles: ['moderator'],
8 sendWelcomeEmail: true,
9 customConfig
10};
11const response: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
12

deleteModerator Internal Link

Параметры

Name Type Required Description
tenantId string Yes
id string Yes
sendEmail string No

Ответ

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

Пример

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

getModerator Internal Link

Параметры

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

Ответ

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

getModerators Internal Link

Параметры

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

Ответ

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

sendInvite Internal Link

Параметры

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

Ответ

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

Пример

Пример sendInvite
Copy Copy
1
2const tenantId: string = 'tenant_acme-42';
3const id: string = 'comment_8f3b21a7';
4const fromName: string = 'Elena Morales';
5const replyToEmail: string | undefined = undefined;
6
7const result: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName, replyToEmail);
8

updateModerator Internal Link


Параметры

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

Ответ

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

deleteNotificationCount Internal Link

Параметры

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

Ответ

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

Пример

Пример deleteNotificationCount
Copy Copy
1
2const tenantSuffix: string | undefined = undefined;
3const tenantId: string = tenantSuffix ? `tenant-${tenantSuffix}` : 'tenant-9142a7';
4const id: string = '3f9b2a44-1c2e-4d3b-9f6a-8e7c6d5b2a1f';
5const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, id);
6console.log(result);
7

getCachedNotificationCount Internal Link

Параметры

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

Ответ

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

getNotificationCount Internal Link

Параметры

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

Ответ

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

getNotifications Internal Link

Параметры

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

Ответ

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

updateNotification Internal Link

Параметры

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

Ответ

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

addPage Internal Link


Параметры

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

Ответ

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


deletePage Internal Link

Параметры

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

Ответ

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


getPageByURLId Internal Link

Параметры

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

Ответ

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


getPages Internal Link


Параметры

Name Type Required Description
tenantId string Да

Ответ

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


patchPage Internal Link


Параметры

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

Ответ

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


deletePendingWebhookEvent Internal Link

Параметры

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

Ответ

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

Пример

deletePendingWebhookEvent Пример
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_42f7c9b1';
4 const id: string = 'pending_webhook_ev_8f3b9a2d';
5 const reason?: string = undefined; // пример необязательного параметра (не обязателен для функции)
6 const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, id);
7 console.log(result);
8})();
9

getPendingWebhookEventCount Internal Link

Параметры

Name Type Required Description
tenantId string Yes
commentId string No
externalId string No
eventType string No
type string No
domain string No
attemptCountGT number No

Ответ

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

getPendingWebhookEvents Internal Link

Параметры

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

Ответ

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

Пример

getPendingWebhookEvents Пример
Copy Copy
1
2const tenantId: string = 'tenant_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

createQuestionConfig Internal Link

Параметры

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

Ответ

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

Пример

Пример createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_9f8b2c";
3const option: QuestionConfigCustomOptionsInner = { id: "opt_yes", label: "Yes, helpful", value: "yes" };
4const createQuestionConfigBody: CreateQuestionConfigBody = {
5 title: "Article usefulness",
6 prompt: "Was this article helpful?",
7 type: "singleChoice",
8 required: false, // необязательный параметр для демонстрации
9 options: [option],
10 saveBehavior: "immediate"
11};
12const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
13

deleteQuestionConfig Internal Link

Параметры

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

Ответ

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

Пример

Пример deleteQuestionConfig
Copy Copy
1
2const tenantId: string = "acme-enterprises-01";
3const idOptional: string | undefined = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
4const id: string = idOptional ?? "11111111-1111-1111-1111-111111111111";
5const response: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
6

getQuestionConfig Internal Link

Параметры

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

Ответ

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

getQuestionConfigs Internal Link

Параметры

Name Type Required Description
tenantId string Yes
skip number No

Ответ

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

updateQuestionConfig Internal Link

Параметры

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

Ответ

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

createQuestionResult Internal Link

Параметры

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

Ответ

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

Пример

Пример createQuestionResult
Copy Copy
1
2const tenantId: string = "tenant-72b1f4";
3const meta: MetaItem[] = [{ key: "platform", value: "web" }];
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "question-83472",
6 commenterId: "user-5521",
7 answers: [{ subQuestionId: "sq-1", value: "Yes" }],
8 meta, // необязательные метаданные
9 note: "Follow-up requested" // демонстрируется необязательный параметр
10};
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

deleteQuestionResult Internal Link

Parameters

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

Response

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

Example

Пример deleteQuestionResult
Copy Copy
1
2const tenantId: string = "org-82479";
3const questionId: string = "q-6a3d2e1f";
4const includeArchived?: boolean = false; // необязательный параметр, демонстрирующий альтернативный выбор цели
5const targetId: string = includeArchived ? "q-archived-112233" : questionId;
6const result: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, targetId);
7

getQuestionResult Internal Link

Параметры

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

Ответ

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

Пример

Пример getQuestionResult
Copy Copy
1
2const post: { title: string; questionId?: string } = { title: 'Product feedback' };
3const tenantId: string = 'acme-corp-tenant-01';
4const id: string = post.questionId ?? 'q-8f3a7b2c4d9e';
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, id);
6

getQuestionResults Internal Link

Параметры

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

Ответ

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

Пример

Пример getQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_001";
3const urlId: string = "articles/product-launch-2026";
4const userId: string = "user_2048";
5const startDate: string = "2026-03-01T00:00:00Z";
6const questionId: string | undefined = undefined;
7const questionIds: string | undefined = "q_101,q_102";
8const skip: number | undefined = 0;
9
10const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, questionId, questionIds, skip);
11

updateQuestionResult Internal Link

Параметры

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

Ответ

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

aggregateQuestionResults Internal Link

Параметры

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

Ответ

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

Пример

Пример aggregateQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_acme_98765';
3const questionIds: Array<string> = ['q-102', 'q-103'];
4const urlId: string = 'url_55b3';
5const timeBucket: AggregateTimeBucket = { unit: 'day', size: 7 };
6const startDate: Date = new Date('2026-01-01T00:00:00Z');
7const forceRecalculate: boolean = true;
8
9const result: AggregateQuestionResults200Response = await aggregateQuestionResults(
10 tenantId,
11 undefined, // questionId опущен, вместо него используются questionIds
12 questionIds,
13 urlId,
14 timeBucket,
15 startDate,
16 forceRecalculate
17);
18

bulkAggregateQuestionResults Internal Link

Параметры

Name Type Required Description
tenantId string Да
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Да
forceRecalculate boolean Нет

Ответ

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

Пример

Пример bulkAggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_live_7c9d";
3const bulkAggregateQuestionResultsRequest: BulkAggregateQuestionResultsRequest = {
4 items: [
5 { questionId: "q_feedback_rating", includeSubQuestions: false, filters: { locale: "en-US" } }
6 ],
7 timeBuckets: [
8 { granularity: "day", startUtc: "2026-03-01T00:00:00Z", endUtc: "2026-03-15T00:00:00Z" }
9 ]
10};
11const forceRecalculate: boolean = true;
12const result: BulkAggregateQuestionResults200Response = await bulkAggregateQuestionResults(tenantId, bulkAggregateQuestionResultsRequest, forceRecalculate);
13

combineCommentsWithQuestionResults Internal Link

Параметры

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

Ответ

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

Пример

Пример combineCommentsWithQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_9f3a2';
3const questionIds: string[] = ['question-42', 'question-43'];
4const urlId: string = 'url_5d7b';
5const startDate: Date = new Date('2026-02-01T00:00:00Z');
6const forceRecalculate: boolean = true;
7const minValue: number = 1;
8const maxValue: number = 5;
9const limit: number = 50;
10const result: CombineCommentsWithQuestionResults200Response = await combineCommentsWithQuestionResults(
11 tenantId,
12 undefined,
13 questionIds,
14 urlId,
15 startDate,
16 forceRecalculate,
17 minValue,
18 maxValue,
19 limit
20);
21

addSSOUser Internal Link


Параметры

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

Ответ

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


deleteSSOUser Internal Link

Параметры

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

Ответ

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

getSSOUserByEmail Internal Link


Параметры

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

Ответ

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


getSSOUserById Internal Link

Параметры

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

Ответ

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


getSSOUsers Internal Link

Параметры

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

Ответ

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


patchSSOUser Internal Link


Параметры

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

Ответ

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


putSSOUser Internal Link

Параметры

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

Ответ

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


createSubscription Internal Link

Параметры

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

Ответ

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

Пример

Пример createSubscription
Copy Copy
1
2const tenantId: string = "acme-corp-123";
3const createAPIUserSubscriptionData: CreateAPIUserSubscriptionData = {
4 userId: "u_987654",
5 planId: "pro_monthly",
6 startDate: new Date().toISOString(),
7 trialDays: 14, // необязательный параметр (демонстрация)
8 metadata: { source: "marketing-email" } // необязательный параметр (демонстрация)
9};
10const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
11const subscription: APIUserSubscription = result.subscription;
12

deleteSubscription Internal Link


Параметры

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

Ответ

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


getSubscriptions Internal Link

Параметры

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

Ответ

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

Пример

Пример getSubscriptions
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_01';
3const userId: string = 'user_76a3b9f2';
4const subscriptionsForUser: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId, userId);
5const subscriptionsForTenant: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId);
6

updateSubscription Internal Link

Параметры

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

Ответ

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

getTenantDailyUsages Internal Link


Параметры

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

Ответ

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

createTenantPackage Internal Link

Параметры

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

Ответ

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

Пример

Пример createTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const createTenantPackageBody: CreateTenantPackageBody = {
4 packageName: 'Standard Moderation',
5 description: 'Suitable for small-to-medium sites: basic moderation, spam rules, and analytics',
6 maxCommentsPerMinute: 50,
7 allowAnonymousComments: false, // необязательный параметр, передан
8 // необязательные поля опущены: например, расширенные правила модерации, пользовательский CSS
9 customConfigParameters: {
10 enableProfanityFilter: true,
11 imageContentProfanityLevel: 'medium' // иллюстративное значение; использует структуру CustomConfigParameters
12 }
13};
14const response: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
15console.log(response);
16

deleteTenantPackage Internal Link

Параметры

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

Ответ

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

Пример

Пример deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_987';
3const packageId: string = 'pkg_pro_2026_01';
4type DeleteOptions = { force?: boolean; notify?: boolean };
5const options: DeleteOptions = { force: true }; // продемонстрированы необязательные параметры
6const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
7

getTenantPackage Internal Link

Параметры

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

Ответ

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

getTenantPackages Internal Link

Параметры

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

Ответ

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

Пример

Пример getTenantPackages
Copy Copy
1
2const tenantId: string = "tenant_7f8e3b4c";
3const skip: number = 20;
4const packagesDefault: GetTenantPackages200Response = await getTenantPackages(tenantId);
5const packagesWithSkip: GetTenantPackages200Response = await getTenantPackages(tenantId, skip);
6

replaceTenantPackage Internal Link

Параметры

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

Ответ

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

updateTenantPackage Internal Link

Параметры

Name Type Required Description
tenantId string Yes
id string Yes
updateTenantPackageBody UpdateTenantPackageBody Yes

Ответ

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

Пример

Пример updateTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_3b7f9d-prod";
3const id: string = "pkg_enterprise_2026";
4const updateTenantPackageBody: UpdateTenantPackageBody = {
5 name: "Enterprise Plus",
6 isActive: true,
7 // необязательные поля намеренно опущены (например, description, limits)
8} as UpdateTenantPackageBody;
9const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
10

createTenantUser Internal Link

Параметры

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

Ответ

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

Пример

Пример createTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_6f4b2c';
3const createTenantUserBody: CreateTenantUserBody = {
4 email: 'sara.kim@example.com',
5 displayName: 'Sara Kim',
6 role: 'moderator',
7 notifyOnMentions: true
8};
9const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
10

deleteTenantUser Internal Link


Параметры

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

Ответ

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

Пример

Пример deleteTenantUser
Copy Copy
1
2const tenantId: string = '4f3a9b2e-1c6a-4f7b-9e2a-0b8d6f1c2a3e';
3const userId: string = '9d2f7b3a-5c4e-48a2-b1f0-6c7d8e9f0a12';
4const deleteComments: string = 'true';
5const commentDeleteMode: string = 'permanent';
6const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, userId, deleteComments, commentDeleteMode);
7

getTenantUser Internal Link

Параметры

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

Ответ

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

getTenantUsers Internal Link

Параметры

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

Ответ

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

replaceTenantUser Internal Link

Параметры

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

Ответ

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

Пример

Пример replaceTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_9d8f4b2c';
3const id: string = 'user_f47ac10b';
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 externalId: 'ext-5234',
6 email: 'jane.doe@acme.com',
7 displayName: 'Jane Doe',
8 roles: ['moderator'],
9 metadata: { department: 'product', region: 'us-east-1' }
10};
11const updateComments: string = 'propagate-display-name-to-comments';
12
13const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
14

Параметры

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

Ответ

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

Пример

Пример sendLoginLink
Copy Copy
1
2const tenantId: string = "tenant_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

updateTenantUser Internal Link

Параметры

Name Type Обязательно Описание
tenantId string Да
id string Да
updateTenantUserBody UpdateTenantUserBody Да
updateComments string Нет

Ответ

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

createTenant Internal Link

Параметры

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

Ответ

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

Пример

Пример createTenant
Copy Copy
1
2const tenantId: string = "acme-corp-001";
3const createTenantBody: CreateTenantBody = {
4 name: "Acme Corporation",
5 domain: "comments.acme.com",
6 adminContact: { name: "Jane Doe", email: "jane.doe@acme.com" },
7 billingInfo: { planId: "pro-monthly", billingContactEmail: "billing@acme.com" },
8 importedSite: { siteId: "site-123", siteName: "Acme Blog" } // необязательный импортированный сайт
9};
10const result: CreateTenant200Response = await createTenant(tenantId, createTenantBody);
11

deleteTenant Internal Link

Параметры

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

Ответ

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

Пример

Пример deleteTenant
Copy Copy
1
2const tenantId: string = "tenant_7f3d2c";
3const id: string = "flag_8392b1a7";
4const sure: string = "confirmed";
5
6const responseWithoutSure: FlagCommentPublic200Response = await deleteTenant(tenantId, id);
7const responseWithSure: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
8

getTenant Internal Link


Параметры

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

Ответ

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

getTenants Internal Link

Параметры

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

Ответ

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

updateTenant Internal Link

Параметры

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

Ответ

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

Пример

Пример updateTenant
Copy Copy
1
2const tenantId: string = "tenant_4821";
3const id: string = "flag_7b9e";
4const billingInfo: BillingInfo | undefined = undefined; // необязательно, опустите, чтобы сохранить текущую информацию о выставлении счетов
5const updateTenantBody: UpdateTenantBody = {
6 name: "Acme News Comments",
7 defaultDomain: "comments.acme.com",
8 ...(billingInfo ? { billingInfo } : {})
9};
10const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
11

changeTicketState Internal Link

Параметры

Name Type Required Description
tenantId string Да
userId string Да
id string Да
changeTicketStateBody ChangeTicketStateBody Да

Ответ

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

Пример

Пример вызова changeTicketState
Copy Copy
1
2const tenantId: string = 'tenant_82f9b3';
3const userId: string = 'user_9472';
4const id: string = 'ticket_550e8400-e29b-41d4-a716-446655440000';
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: 'resolved',
7 comment: 'Confirmed fix deployed to production; closing ticket.',
8 notifySubscribers: true
9};
10const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
11

createTicket Internal Link

Параметры

Name Type Обязательно Описание
tenantId string Да
userId string Да
createTicketBody CreateTicketBody Да

Ответ

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

Пример

Пример createTicket
Copy Copy
1
2const tenantId: string = "acme-corp-001";
3const userId: string = "user_72b9f4";
4const createTicketBody: CreateTicketBody = {
5 subject: "Subscription renewal failed for card on file",
6 description: "Customer's card was declined by the payment processor during automatic renewal. Transaction ID: txn_9a8b7c. Please review gateway logs and retry.",
7 priority: "high", // необязательное поле (пример)
8 contactEmail: "billing@acme-corp.com", // необязательная контактная информация
9 relatedUrl: "https://acme-corp.com/account/billing"
10};
11const ticketResponse: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
12

getTicket Internal Link

Параметры

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

Ответ

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

getTickets Internal Link

Параметры

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

Ответ

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

uploadImage Internal Link

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

Параметры

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

Ответ

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


getUserBadgeProgressById Internal Link

Параметры

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

Ответ

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

getUserBadgeProgressByUserId Internal Link

Параметры

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

Ответ

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

getUserBadgeProgressList Internal Link

Параметры

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

Ответ

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

createUserBadge Internal Link

Параметры

Name Type Required Description
tenantId string Да
createUserBadgeParams CreateUserBadgeParams Да

Ответ

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

Пример

Пример createUserBadge
Copy Copy
1
2const tenantId: string = 'tenant_84f3b2';
3const createUserBadgeParams: CreateUserBadgeParams = {
4 name: 'Top Contributor',
5 slug: 'top-contributor',
6 imageUrl: 'https://assets.fastcomments.com/badges/top-contributor.png',
7 description: 'Awarded for 100 helpful comments',
8 active: true,
9 criteria: { commentsCount: 100 }, // необязательные критерии
10 displayOrder: 10,
11 metadata: { featured: true } // необязательные метаданные
12};
13const result: CreateUserBadge200Response = await createUserBadge(tenantId, createUserBadgeParams);
14console.log(result);
15

deleteUserBadge Internal Link

Параметры

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

Ответ

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

getUserBadge Internal Link

Параметры

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

Ответ

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

Пример

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

getUserBadges Internal Link

Параметры

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

Ответ

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

updateUserBadge Internal Link

Параметры

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

Ответ

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

getUserNotificationCount Internal Link


Параметры

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

Ответ

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

getUserNotifications Internal Link

Параметры

Name Type Required Description
tenantId string Да
pageSize number Нет
afterId string Нет
includeContext boolean Нет
afterCreatedAt number Нет
unreadOnly boolean Нет
dmOnly boolean Нет
noDm boolean Нет
includeTranslations boolean Нет
sso string Нет

Ответ

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

resetUserNotificationCount Internal Link

Параметры

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

Ответ

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

resetUserNotifications Internal Link

Параметры

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

Ответ

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

updateUserNotificationCommentSubscriptionStatus Internal Link


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

Параметры

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

Ответ

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

updateUserNotificationPageSubscriptionStatus Internal Link

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

Параметры

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

Ответ

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

updateUserNotificationStatus Internal Link

Параметры

Name Type Required Description
tenantId string Да
notificationId string Да
newStatus UpdateUserNotificationStatusNewStatusEnum Да
sso string Нет

Ответ

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

getUserPresenceStatuses Internal Link

Параметры

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

Ответ

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

searchUsers Internal Link

Параметры

Имя Тип Обязательно Описание
tenantId string Yes
urlId string Yes
usernameStartsWith string No
mentionGroupIds Array No
sso string No
searchSection SearchUsersSearchSectionEnum No

Ответ

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

getUser Internal Link


Параметры

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

Ответ

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

Пример

Пример getUser
Copy Copy
1
2const tenantId: string = 'tenant_7b3f42';
3const id: string = 'user_9c4d2a';
4const userResponse: GetUser200Response = await getUser(tenantId, id);
5console.log(userResponse);
6

createVote Internal Link

Параметры

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

Ответ

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

Пример

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

deleteVote Internal Link

Параметры

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

Ответ

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

Пример

Пример deleteVote
Copy Copy
1
2const tenantId: string = "tenant_7c3f2b4a";
3const voteId: string = "vote_4f8d9a11";
4const editKey: string = "edit_2b9f8c";
5const resultWithoutKey: DeleteCommentVote200Response = await deleteVote(tenantId, voteId);
6const resultWithKey: DeleteCommentVote200Response = await deleteVote(tenantId, voteId, editKey);
7

getVotes Internal Link

Параметры

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

Ответ

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

Пример

Пример getVotes
Copy Copy
1
2const tenantId: string = 'acme-corp-8f3b';
3const refCampaign: string | undefined = 'newsletter-march2026'; // необязательный параметр запроса
4const urlId: string = `https://www.example.com/articles/2026/03/25/fastcomments-integration${refCampaign ? `?ref=${refCampaign}` : ''}`;
5
6const votes: GetVotes200Response = await getVotes(tenantId, urlId);
7

getVotesForUser Internal Link

Параметры

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

Ответ

Возвращает: 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, пожалуйста:

Contributing

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