FastComments.com

FastComments JavaScript/TypeScript SDK

Це офіційний SDK JavaScript/TypeScript для FastComments.

Офіційний SDK JavaScript/TypeScript для API FastComments

Репозиторій

Переглянути на GitHub


Installation Internal Link

npm install fastcomments-sdk

API Documentation Internal Link


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

Browser vs Server Compatibility Internal Link


Цей SDK використовує подвійні точки входу, щоб забезпечити оптимальну сумісність і запобігти помилкам під час виконання:

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

Public vs Secured APIs Internal Link


SDK надає три основні API-класи:

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

Приклад: Використання Public API (безпечне для браузера)

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

const publicApi = new PublicApi();

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

Приклад: Використання Default API (лише на сервері)

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

const config = new Configuration({
  apiKey: 'your-api-key' // Тримайте це в секреті!
});
const defaultApi = new DefaultApi(config);

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

SSO (Single Sign-On) Integration Internal Link

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

Просте 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 токен з вашого серверного endpoint
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)
});

Common Use Cases 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 (Real-time Updates) Internal Link

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

Події на рівні сторінки

Слухайте події в реальному часі для конкретної сторінки (коментарі, голоси тощо):

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

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

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

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

    return true; // Поверніть true, якщо подію оброблено
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

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

Підписка на події користувача

Слухайте події, специфічні для користувача (сповіщення, згадки тощо):

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

const userConfig = {
  userIdWS: 'user-session-id', // Отримайте це з відповіді getComments
};

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

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

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

// Закрийте, коли закінчите
userSubscription.close();

Отримання userIdWS

Параметр userIdWS потрібен для живих подій і може бути отриманий з відповідей API:

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

// Витягніть userIdWS з відповіді
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Тепер ви можете підписатися на живі події
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

Broadcast IDs Internal Link

Ви побачите, що потрібно передавати broadcastId у деяких викликах API. Коли ви отримуватимете події, ви отримаєте назад цей 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() // Унікальний ідентифікатор для цієї операції
  }
});

Error Handling 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


blockFromCommentPublic Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
commentId string Так
publicBlockFromCommentParams PublicBlockFromCommentParams Так
sso string Ні

Відповідь

Повертає: BlockFromCommentPublic200Response


unBlockCommentPublic Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
publicBlockFromCommentParams PublicBlockFromCommentParams Так
sso string Ні

Відповідь

Повертає: UnBlockCommentPublic200Response


checkedCommentsForBlocked Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentIds string Так
sso string Ні

Відповідь

Повертає: CheckedCommentsForBlocked200Response


blockUserFromComment Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
blockFromCommentParams BlockFromCommentParams Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: BlockFromCommentPublic200Response


createCommentPublic Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так
broadcastId string Так
commentData CommentData Так
sessionId string Ні
sso string Ні

Відповідь

Повертає: CreateCommentPublic200Response


deleteComment Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
contextUserId string Ні
isLive boolean Ні

Відповідь

Повертає: DeleteComment200Response


deleteCommentPublic Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
broadcastId string Так
editKey string Ні
sso string Ні

Відповідь

Повертає: DeleteCommentPublic200Response


deleteCommentVote Internal Link

Параметри

Name Type Required Description
tenantId string Так
commentId string Так
voteId string Так
urlId string Так
broadcastId string Так
editKey string Ні
sso string Ні

Відповідь

Повертає: DeleteCommentVote200Response


flagComment Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: FlagComment200Response


getComment Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetComment200Response


getComments Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
page number Ні
limit number Ні
skip number Ні
asTree boolean Ні
skipChildren number Ні
limitChildren number Ні
maxTreeDepth number Ні
urlId string Ні
userId string Ні
anonUserId string Ні
contextUserId string Ні
hashTag string Ні
parentId string Ні
direction SortDirections Ні

Відповідь

Повертає: GetComments200Response


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


getCommentText Internal Link

Параметри

Name Type Required Description
tenantId string Так
commentId string Так
editKey string Ні
sso string Ні

Відповідь

Повертає: GetCommentText200Response


getCommentVoteUserNames Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
dir number Так
sso string Ні

Відповідь

Повертає: GetCommentVoteUserNames200Response


lockComment Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
broadcastId string Так
sso string Ні

Відповідь

Повертає: LockComment200Response


pinComment Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
commentId string Так
broadcastId string Так
sso string Ні

Відповідь

Повертає: PinComment200Response


saveComment Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createCommentParams CreateCommentParams Так
isLive boolean Ні
doSpamCheck boolean Ні
sendEmails boolean Ні
populateNotifications boolean Ні

Відповідь

Повертає: SaveComment200Response


saveCommentsBulk Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createCommentParams Array Так
isLive boolean Ні
doSpamCheck boolean Ні
sendEmails boolean Ні
populateNotifications boolean Ні

Відповідь

Повертає: Array<SaveComment200Response


setCommentText Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
broadcastId string Так
commentTextUpdateRequest CommentTextUpdateRequest Так
editKey string Ні
sso string Ні

Відповідь

Повертає: SetCommentText200Response


unBlockUserFromComment Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
id string Так
unBlockFromCommentParams UnBlockFromCommentParams Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: UnBlockCommentPublic200Response


unFlagComment Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: FlagComment200Response


unLockComment Internal Link

Параметри

Name Type Required Description
tenantId string Так
commentId string Так
broadcastId string Так
sso string Ні

Відповідь

Повертає: LockComment200Response


unPinComment Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
broadcastId string Так
sso string Ні

Відповідь

Повертає: PinComment200Response


updateComment Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
body PickAPICommentUpdatableCommentFields Так
contextUserId string Ні
doSpamCheck boolean Ні
isLive boolean Ні

Відповідь

Повертає: FlagCommentPublic200Response


voteComment Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Так
urlId string Так
broadcastId string Так
voteBodyParams VoteBodyParams Так
sessionId string Ні
sso string Ні

Відповідь

Повертає: VoteComment200Response


addDomainConfig Internal Link


Параметри

Назва Тип Обов'язково Опис
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_7a9f2b3d";
3
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Comment Notification",
6 subject: "New comment on your article: ",
7 htmlBody: "<p> left a comment:</p><blockquote></blockquote>",
8 enabled: true,
9 defaultLocale: "en-US",
10 metadata: { createdBy: "admin@example.com", purpose: "notify_comment" } // необов'язкові додаткові дані
11};
12
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Параметри

Ім'я Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

deleteEmailTemplateRenderError Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так
errorId string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getEmailTemplate Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetEmailTemplate200Response

Приклад

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

getEmailTemplateDefinitions Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так

Відповідь

Повертає: GetEmailTemplateDefinitions200Response

Приклад

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

getEmailTemplateRenderErrors Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
skip number Ні

Відповідь

Повертає: GetEmailTemplateRenderErrors200Response

Приклад

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

getEmailTemplates Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
skip number Ні

Відповідь

Повертає: GetEmailTemplates200Response

Приклад

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

renderEmailTemplate Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
renderEmailTemplateBody RenderEmailTemplateBody Так
locale string Ні

Відповідь

Повертає: RenderEmailTemplate200Response

Приклад

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

updateEmailTemplate Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateEmailTemplateBody UpdateEmailTemplateBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getEventLog Internal Link

req tenantId urlId userIdWS

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так
userIdWS string Так
startTime number Так
endTime number Так

Відповідь

Повертає: GetEventLog200Response


getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так
userIdWS string Так
startTime number Так
endTime number Так

Відповідь

Повертає: GetEventLog200Response


createFeedPost Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createFeedPostParams CreateFeedPostParams Так
broadcastId string Ні
isLive boolean Ні
doSpamCheck boolean Ні
skipDupCheck boolean Ні

Відповідь

Повертає: CreateFeedPost200Response


createFeedPostPublic Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createFeedPostParams CreateFeedPostParams Так
broadcastId string Ні
sso string Ні

Відповідь

Повертає: CreateFeedPostPublic200Response


deleteFeedPostPublic Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
postId string Так
broadcastId string Ні
sso string Ні

Відповідь

Повертає: DeleteFeedPostPublic200Response


getFeedPosts Internal Link

req tenantId afterId

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
afterId string Ні
limit number Ні
tags Array Ні

Відповідь

Повертає: GetFeedPosts200Response

getFeedPostsPublic Internal Link

req tenantId afterId

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
afterId string Ні
limit number Ні
tags Array Ні
sso string Ні
isCrawler boolean Ні
includeUserInfo boolean Ні

Відповідь

Повертає: GetFeedPostsPublic200Response


getFeedPostsStats Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
postIds Array Так
sso string Ні

Відповідь

Повертає: GetFeedPostsStats200Response


getUserReactsPublic Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
postIds Array Ні
sso string Ні

Відповідь

Повертає: GetUserReactsPublic200Response

reactFeedPostPublic Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
postId string Так
reactBodyParams ReactBodyParams Так
isUndo boolean Ні
broadcastId string Ні
sso string Ні

Відповідь

Повертає: ReactFeedPostPublic200Response


updateFeedPost Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
feedPost FeedPost Так

Відповідь

Повертає: FlagCommentPublic200Response


updateFeedPostPublic Internal Link

Параметри

Ім'я Тип Обов'язково Опис
tenantId string Yes
postId string Yes
updateFeedPostParams UpdateFeedPostParams Yes
broadcastId string No
sso string No

Відповідь

Повертає: CreateFeedPostPublic200Response

flagCommentPublic Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
commentId string Так
isFlagged boolean Так
sso string Ні

Відповідь

Повертає: FlagCommentPublic200Response


addHashTag Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Ні
createHashTagBody CreateHashTagBody Ні

Відповідь

Повертає: AddHashTag200Response

Приклад

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

addHashTagsBulk Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Ні
bulkCreateHashTagsBody BulkCreateHashTagsBody Ні

Відповідь

Повертає: AddHashTagsBulk200Response

Приклад

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

deleteHashTag Internal Link

Параметри

Назва Тип Обов'язкове Опис
tag string Так
tenantId string Ні
deleteHashTagRequest DeleteHashTagRequest Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getHashTags Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
page number Ні

Відповідь

Повертає: GetHashTags200Response

Приклад

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

patchHashTag Internal Link


Параметри

Name Type Required Description
tag string Так
tenantId string Ні
updateHashTagBody UpdateHashTagBody Ні

Відповідь

Повертає: PatchHashTag200Response

Приклад

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

createModerator Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createModeratorBody CreateModeratorBody Так

Відповідь

Повертає: CreateModerator200Response

Приклад

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

deleteModerator Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
sendEmail string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getModerator Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetModerator200Response

Приклад

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

getModerators Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
skip number Ні

Відповідь

Повертає: GetModerators200Response

Приклад

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

sendInvite Internal Link

Параметри

Ім'я Тип Обов'язково Опис
tenantId string Так
id string Так
fromName string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання sendInvite
Copy Copy
1
2const tenantId: string = 'acme-tenant-004';
3const id: string = 'comment_9b7f3a2c';
4const fromName: string = 'María Hernández';
5const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
6

updateModerator Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так
updateModeratorBody UpdateModeratorBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

deleteNotificationCount Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getCachedNotificationCount Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetCachedNotificationCount200Response

Приклад

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

getNotificationCount Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
userId string Ні
urlId string Ні
fromCommentId string Ні
viewed boolean Ні
type string Ні

Відповідь

Повертає: GetNotificationCount200Response

Приклад

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

getNotifications Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
userId string Ні
urlId string Ні
fromCommentId string Ні
viewed boolean Ні
type string Ні
skip number Ні

Відповідь

Повертає: GetNotifications200Response

Приклад

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

updateNotification Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateNotificationBody UpdateNotificationBody Так
userId string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

addPage Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createAPIPageData CreateAPIPageData Так

Відповідь

Повертає: AddPageAPIResponse


deletePage Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: DeletePageAPIResponse


getPageByURLId Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так

Відповідь

Повертає: GetPageByURLIdAPIResponse


getPages Internal Link

Параметри

Назва Тип Обов'язковий Опис
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
2const tenantId: string = 'tenant_7f4e2b';
3const pendingEventId: string = '9f7b6a8c-3b2a-4c0d-a8e5-1234567890ab';
4const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, pendingEventId);
5console.log(result);
6

getPendingWebhookEventCount Internal Link

Параметри

Name Type Required Description
tenantId string Так
commentId string Ні
externalId string Ні
eventType string Ні
type string Ні
domain string Ні
attemptCountGT number Ні

Відповідь

Повертає: GetPendingWebhookEventCount200Response

Приклад

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

getPendingWebhookEvents Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
commentId string Ні
externalId string Ні
eventType string Ні
type string Ні
domain string Ні
attemptCountGT number Ні
skip number Ні

Response

Повертає: GetPendingWebhookEvents200Response

Приклад

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

createQuestionConfig Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createQuestionConfigBody CreateQuestionConfigBody Так

Відповідь

Повертає: CreateQuestionConfig200Response

Приклад

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

deleteQuestionConfig Internal Link

Параметри

Ім'я Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getQuestionConfig Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetQuestionConfig200Response

Приклад

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

getQuestionConfigs Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
skip number Ні

Відповідь

Повертає: GetQuestionConfigs200Response

Приклад

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

updateQuestionConfig Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так
updateQuestionConfigBody UpdateQuestionConfigBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

createQuestionResult Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createQuestionResultBody CreateQuestionResultBody Так

Відповідь

Повертає: CreateQuestionResult200Response

Приклад

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

deleteQuestionResult Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getQuestionResult Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Yes
id string Yes

Відповідь

Повертає: GetQuestionResult200Response

Приклад

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

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_42';
3const urlId: string = 'news/2025/fastcomments-release';
4const userId: string = 'user_8b7f3c';
5const startDate: string = '2025-01-01T00:00:00Z';
6const questionIds: string = 'q123,q124';
7const skip: number = 20;
8const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
9

updateQuestionResult Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateQuestionResultBody UpdateQuestionResultBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

aggregateQuestionResults Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
questionId string Ні
questionIds Array Ні
urlId string Ні
timeBucket AggregateTimeBucket Ні
startDate Date Ні
forceRecalculate boolean Ні

Відповідь

Повертає: AggregateQuestionResults200Response


bulkAggregateQuestionResults Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Так
forceRecalculate boolean Ні

Відповідь

Повертає: BulkAggregateQuestionResults200Response

combineCommentsWithQuestionResults Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
questionId string Ні
questionIds Array Ні
urlId string Ні
startDate Date Ні
forceRecalculate boolean Ні
minValue number Ні
maxValue number Ні
limit number Ні

Відповідь

Повертає: CombineCommentsWithQuestionResults200Response


addSSOUser Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createAPISSOUserData CreateAPISSOUserData Так

Відповідь

Повертає: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Параметри

Назва Type Обов'язково Опис
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

Параметри

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


deleteSubscription Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
id string Так
userId string Ні

Відповідь

Повертає: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
userId string Ні

Відповідь

Повертає: GetSubscriptionsAPIResponse


getTenantDailyUsages Internal Link


Параметри

Назва Type Обов'язково Опис
tenantId string Так
yearNumber number Ні
monthNumber number Ні
dayNumber number Ні
skip number Ні

Відповідь

Повертає: GetTenantDailyUsages200Response

Приклад

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

createTenantPackage Internal Link

Параметри

Name Type Required Description
tenantId string Так
createTenantPackageBody CreateTenantPackageBody Так

Відповідь

Повертає: CreateTenantPackage200Response

Приклад

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

deleteTenantPackage Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getTenantPackage Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetTenantPackage200Response

Приклад

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

getTenantPackages Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
skip number Ні

Відповідь

Повертає: GetTenantPackages200Response

Приклад

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

replaceTenantPackage Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
replaceTenantPackageBody ReplaceTenantPackageBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

updateTenantPackage Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateTenantPackageBody UpdateTenantPackageBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

createTenantUser Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Yes
createTenantUserBody CreateTenantUserBody Yes

Відповідь

Повертає: CreateTenantUser200Response

Приклад

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

deleteTenantUser Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так
deleteComments string Ні
commentDeleteMode string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getTenantUser Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetTenantUser200Response

Приклад

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

getTenantUsers Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
skip number Ні

Відповідь

Повертає: GetTenantUsers200Response

Приклад

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

replaceTenantUser Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
replaceTenantUserBody ReplaceTenantUserBody Так
updateComments string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
id string Так
redirectURL string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

updateTenantUser Internal Link

Параметри

Name Type Обов'язково Опис
tenantId string Так
id string Так
updateTenantUserBody UpdateTenantUserBody Так
updateComments string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

createTenant Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
createTenantBody CreateTenantBody Так

Відповідь

Повертає: CreateTenant200Response

Приклад

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

deleteTenant Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
sure string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getTenant Internal Link


Параметри

Name Type Required Description
tenantId string Так
id string Так

Відповідь

Повертає: GetTenant200Response

Приклад

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

getTenants Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
meta string Ні
skip number Ні

Відповідь

Повертає: GetTenants200Response

Приклад

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

updateTenant Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateTenantBody UpdateTenantBody Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

uploadImage Internal Link


Завантажити та змінити розмір зображення

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
file Blob Так
sizePreset SizePreset Ні
urlId string Ні

Відповідь

Повертає: UploadImageResponse


getUserBadgeProgressById Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetUserBadgeProgressById200Response


getUserBadgeProgressByUserId Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
userId string Так

Відповідь

Повертає: GetUserBadgeProgressById200Response


getUserBadgeProgressList Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
userId string Ні
limit number Ні
skip number Ні

Відповідь

Повертає: GetUserBadgeProgressList200Response


createUserBadge Internal Link

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
createUserBadgeParams CreateUserBadgeParams Так

Відповідь

Повертає: CreateUserBadge200Response


deleteUserBadge Internal Link


Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так

Відповідь

Повертає: UpdateUserBadge200Response


getUserBadge Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так

Відповідь

Повертає: GetUserBadge200Response


getUserBadges Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
userId string Ні
badgeId string Ні
type number Ні
displayedOnComments boolean Ні
limit number Ні
skip number Ні

Відповідь

Повертає: GetUserBadges200Response


updateUserBadge Internal Link


Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateUserBadgeParams UpdateUserBadgeParams Так

Відповідь

Повертає: UpdateUserBadge200Response


getUserNotificationCount Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
sso string Ні

Відповідь

Повертає: GetUserNotificationCount200Response


getUserNotifications Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
pageSize number Ні
afterId string Ні
includeContext boolean Ні
afterCreatedAt number Ні
unreadOnly boolean Ні
dmOnly boolean Ні
noDm boolean Ні
includeTranslations boolean Ні
sso string Ні

Відповідь

Повертає: GetUserNotifications200Response


resetUserNotificationCount Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
sso string Ні

Відповідь

Повертає: ResetUserNotifications200Response


resetUserNotifications Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
afterId string Ні
afterCreatedAt number Ні
unreadOnly boolean Ні
dmOnly boolean Ні
noDm boolean Ні
sso string Ні

Відповідь

Повертає: ResetUserNotifications200Response


updateUserNotificationCommentSubscriptionStatus Internal Link

Увімкнути або вимкнути сповіщення для певного коментаря.

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
notificationId string Так
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum Так
commentId string Так
sso string Ні

Відповідь

Повертає: UpdateUserNotificationStatus200Response


updateUserNotificationPageSubscriptionStatus Internal Link

Увімкнути або вимкнути сповіщення для сторінки. Коли користувачі підписані на сторінку, створюються сповіщення про нові кореневі коментарі, а також

Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
urlId string Так
url string Так
pageTitle string Так
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum Так
sso string Ні

Відповідь

Повертає: UpdateUserNotificationStatus200Response


updateUserNotificationStatus Internal Link

Параметри

Name Type Required Description
tenantId string Так
notificationId string Так
newStatus UpdateUserNotificationStatusNewStatusEnum Так
sso string Ні

Відповідь

Повертає: UpdateUserNotificationStatus200Response

getUserPresenceStatuses Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlIdWS string Так
userIds string Так

Відповідь

Повертає: GetUserPresenceStatuses200Response


searchUsers Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
urlId string Так
usernameStartsWith string Так
mentionGroupIds Array Ні
sso string Ні

Відповідь

Повертає: SearchUsers200Response


getUser Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так

Відповідь

Повертає: GetUser200Response

Приклад

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

createVote Internal Link

Параметри

Name Type Required Description
tenantId string Так
commentId string Так
direction CreateVoteDirectionEnum Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: VoteComment200Response

Приклад

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

deleteVote Internal Link


Параметри

Назва Тип Обов'язкове Опис
tenantId string Так
id string Так
editKey string Ні

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

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

getVotes Internal Link

Parameters

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так

Відповідь

Повертає: GetVotes200Response

Приклад

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

getVotesForUser Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: GetVotesForUser200Response

Приклад

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

Потрібна допомога?

Якщо ви стикнулися з будь-якими проблемами або маєте питання щодо JavaScript/TypeScript SDK, будь ласка:

Внесок

Внески вітаються! Будь ласка, відвідайте репозиторій на GitHub для отримання інструкцій щодо внесків.