FastComments.com

FastComments SDK для JavaScript/TypeScript


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

Керуйте коментарями, користувачами, SSO та модерацією з Node.js або браузера.

Репозиторій

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


Встановлення Internal Link

npm

npm install fastcomments-sdk

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


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

Сумісність браузера та сервера Internal Link


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

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

Публічні та захищені API Internal Link


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

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

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

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

const publicApi = new PublicApi();

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

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

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

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

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

Інтеграція SSO (єдиний вхід) Internal Link

FastComments підтримує SSO для інтеграції з вашою існуючою системою аутентифікації користувачів. Функціональність SSO доступна лише у серверному експорті, оскільки вона вимагає можливостей 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)
});

Типові випадки використання Internal Link

Отримання коментарів для сторінки

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

Створення коментаря

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

Голосування за коментар

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

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

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

Живі події (оновлення в реальному часі) Internal Link

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

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

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

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

Обробка помилок 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 тощо).

Параметри

NameTypeRequiredDescription
tenantIdstringТак
aggregationRequestAggregationRequestТак
parentTenantIdstringНі
includeStatsbooleanНі

Відповідь

Повертає: Aggregate200Response

Приклад

Приклад aggregate
Copy Copy
1
2const tenantId: string = 'tenant_78a9';
3const parentTenantId: string = 'parent_tenant_01';
4const includeStats: boolean = true;
5const aggregationRequest: AggregationRequest = {
6 operation: { type: 'COUNT' },
7 groupBy: ['pageUrl'],
8 predicate: { field: 'status', operator: 'EQUALS', value: 'approved' },
9 sort: [{ field: 'count', direction: 'DESC' }],
10 limit: 25
11};
12const result: Aggregate200Response = await aggregate(tenantId, aggregationRequest, parentTenantId, includeStats);
13

getAuditLogs Internal Link

Parameters

NameTypeRequiredDescription
tenantIdstringYes
limitnumberNo
skipnumberNo
orderSORTDIRNo
afternumberNo
beforenumberNo

Response

Повертає: GetAuditLogs200Response

Example

Приклад getAuditLogs
Copy Copy
1
2const tenantId: string = 'tenant_5f8d7c3a';
3const limit: number = 100;
4const skip: number = 0;
5const order: SORTDIR = 'DESC' as SORTDIR;
6const after: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // тиждень тому
7const before: number = Date.now();
8const result: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, order, after, before);
9

blockFromCommentPublic Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
commentIdstringТак
publicBlockFromCommentParamsPublicBlockFromCommentParamsТак
ssostringНі

Відповідь

Повертає: BlockFromCommentPublic200Response

Приклад

blockFromCommentPublic Приклад
Copy Copy
1
2const tenantId: string = 'tenant_6b3f9a2d';
3const commentId: string = 'cmt_8f4b12a9';
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: 'Repeated promotional links',
6 durationMinutes: 60 * 24 * 30, // 30 днів
7 escalateToModeration: true
8};
9const sso: string = 'sso_token_3fH7kLw';
10
11const result: BlockFromCommentPublic200Response = await blockFromCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

unBlockCommentPublic Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
publicBlockFromCommentParamsPublicBlockFromCommentParamsТак
ssostringНі

Відповідь

Повертає: UnBlockCommentPublic200Response

Приклад

Приклад unBlockCommentPublic
Copy Copy
1
2const tenantId: string = "tenant-42-production";
3const commentId: string = "comment_7f3b2a9d";
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: "flag reviewed and determined not to violate policy",
6 restoredBy: "moderator_jane",
7 restoredAt: new Date().toISOString()
8};
9const sso: string = "sso_token_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";
10const result: UnBlockCommentPublic200Response = await unBlockCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
11

checkedCommentsForBlocked Internal Link


Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
commentIdsstringТак
ssostringНі

Відповідь

Повертає: CheckedCommentsForBlocked200Response

Приклад

Приклад checkedCommentsForBlocked
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_fa3b2c9e';
4 const commentIds: string = 'cmt_112233,cmt_445566';
5 const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI0Njc4IiwidGVuYW50IjoidGVuYW50X2ZhM2IifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
6 const resultWithSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds, sso);
7 const resultWithoutSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds);
8 console.log(resultWithSSO, resultWithoutSSO);
9})();
10

blockUserFromComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
blockFromCommentParamsBlockFromCommentParamsТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: BlockFromCommentPublic200Response

Приклад

Приклад blockUserFromComment
Copy Copy
1
2const tenantId: string = "tenant_7f3b4c";
3const id: string = "comment_9a8b7c6d";
4const blockFromCommentParams: BlockFromCommentParams = {
5 reason: "Repeated spam links",
6 durationHours: 168,
7 notifyModerators: true
8};
9const userId: string | undefined = "user_42";
10const anonUserId: string | undefined = undefined;
11const result: BlockFromCommentPublic200Response = await blockUserFromComment(tenantId, id, blockFromCommentParams, userId, anonUserId);
12

createCommentPublic Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
broadcastIdstringТак
commentDataCommentDataТак
sessionIdstringНі
ssostringНі

Відповідь

Повертає: CreateCommentPublic200Response

Приклад

Приклад createCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_9a1b2c';
3const urlId: string = 'https://www.news-site.com/article/67890';
4const broadcastId: string = 'broadcast_2026-06-15-01';
5const sessionId: string | undefined = 'sess_abc123xyz';
6const sso: string | undefined = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiam9yZGFuIiwiaWF0IjoxNjI0MDAwMDB9.signature';
7const commentData: CommentData = {
8 content: 'Insightful piece — I appreciated the data-backed points and sources cited.',
9 authorDisplayName: 'Jordan Miles'
10} as CommentData;
11const result: CreateCommentPublic200Response = await createCommentPublic(tenantId, urlId, broadcastId, commentData, sessionId, sso);
12

deleteComment Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
contextUserIdstringНі
isLivebooleanНі

Відповідь

Повертає: DeleteComment200Response

Приклад

Приклад deleteComment
Copy Copy
1
2const tenantId: string = 'tenant_84a9f2';
3const id: string = 'comment_5f3b21';
4const contextUserId: string | undefined = 'user_1122';
5const isLive: boolean | undefined = true;
6
7async function run(): Promise<void> {
8 const result: DeleteComment200Response = await deleteComment(tenantId, id, contextUserId, isLive);
9 console.log(result);
10}
11
12run();
13

deleteCommentPublic Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
broadcastIdstringТак
editKeystringНі
ssostringНі

Відповідь

Повертає: DeleteCommentPublic200Response

Приклад

deleteCommentPublic Приклад
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const commentId: string = 'c0mment-9f8b7a6';
4const broadcastId: string = 'site_homepage_2026-06-15';
5const editKey: string = 'ek_3b7a1f59-4d2c-11eb-8dcd-0242ac130003';
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakePayload.signature';
7
8const result: DeleteCommentPublic200Response = await deleteCommentPublic(tenantId, commentId, broadcastId, editKey, sso);
9

deleteCommentVote Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
commentIdstringТак
voteIdstringТак
urlIdstringТак
broadcastIdstringТак
editKeystringНі
ssostringНі

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

Приклад використання deleteCommentVote
Copy Copy
1
2const tenantId: string = 'tenant_8f3a2b7c';
3const commentId: string = 'cmt-5a1f3d92';
4const voteId: string = 'vote-3b9c7e1a';
5const urlId: string = 'articles/2026/06/typescript-best-practices';
6const broadcastId: string = 'broadcast-77f4d2';
7const editKey: string = 'edk-9b2f4c';
8const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_payload.signature';
9const result: DeleteCommentVote200Response = await deleteCommentVote(tenantId, commentId, voteId, urlId, broadcastId, editKey, sso);
10

flagComment Internal Link


Parameters

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: FlagComment200Response

Приклад

Приклад flagComment
Copy Copy
1
2const tenantId: string = "tenant_4f21c9a";
3const commentId: string = "cmt_7a12b3e9";
4const userId: string = "user_82bd123";
5const result: FlagComment200Response = await flagComment(tenantId, commentId, userId);
6

getComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetComment200Response

Приклад

Приклад getComment
Copy Copy
1
2const tenantId: string = 'tenant_6f1a2b';
3const commentId: string = 'cmt_4d9e8f';
4const includeReplies: boolean | undefined = true; // приклад необов'язкового параметра (не передається в getComment)
5const result: GetComment200Response = await getComment(tenantId, commentId);
6console.log('Fetched comment for tenant:', tenantId, 'comment id:', commentId);
7console.log('API response received:', result);
8

getComments Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
pagenumberНі
limitnumberНі
skipnumberНі
asTreebooleanНі
skipChildrennumberНі
limitChildrennumberНі
maxTreeDepthnumberНі
urlIdstringНі
userIdstringНі
anonUserIdstringНі
contextUserIdstringНі
hashTagstringНі
parentIdstringНі
directionSortDirectionsНі
fromDatenumberНі
toDatenumberНі

Відповідь

Повертає: GetComments200Response

Приклад

Приклад getComments
Copy Copy
1
2const tenantId: string = "tenant_9a12b3";
3const response: GetComments200Response = await getComments(tenantId, 1, 20, 0, true, 0, 3, 2, "https://mysite.com/posts/678", undefined, undefined, undefined, undefined, "parent_987", undefined, 1716873600000, 1719552000000);
4

getCommentsPublic Internal Link

req tenantId urlId

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
pagenumberНі
directionSortDirectionsНі
ssostringНі
skipnumberНі
skipChildrennumberНі
limitnumberНі
limitChildrennumberНі
countChildrenbooleanНі
fetchPageForCommentIdstringНі
includeConfigbooleanНі
countAllbooleanНі
includei10nbooleanНі
localestringНі
modulesstringНі
isCrawlerbooleanНі
includeNotificationCountbooleanНі
asTreebooleanНі
maxTreeDepthnumberНі
useFullTranslationIdsbooleanНі
parentIdstringНі
searchTextstringНі
hashTagsArrayНі
userIdstringНі
customConfigStrstringНі
afterCommentIdstringНі
beforeCommentIdstringНі

Відповідь

Повертає: GetCommentsPublic200Response

Приклад

Приклад getCommentsPublic
Copy Copy
1
2const tenantId: string = 'acme-news';
3const urlId: string = '/articles/2026/fastcomments-update';
4const page: number = 1;
5const skip: number = 0;
6const limit: number = 25;
7const countChildren: boolean = true;
8const includeConfig: boolean = true;
9const result: GetCommentsPublic200Response = await getCommentsPublic(
10 tenantId,
11 urlId,
12 page,
13 undefined,
14 undefined,
15 skip,
16 undefined,
17 limit,
18 undefined,
19 countChildren,
20 undefined,
21 includeConfig
22);
23

getCommentText Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
editKeystringНі
ssostringНі

Відповідь

Повертає: GetCommentText200Response

Приклад

Приклад getCommentText
Copy Copy
1
2const tenantId: string = 'tenant_42b7e9';
3const commentId: string = 'cmt_9f3a2b';
4const editKey: string = 'edk_3f1b7c9d';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ssoPayload.signature';
6
7const result: GetCommentText200Response = await getCommentText(tenantId, commentId, editKey, sso);
8

getCommentVoteUserNames Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
dirnumberТак
ssostringНі

Відповідь

Повертає: GetCommentVoteUserNames200Response

Приклад

Приклад getCommentVoteUserNames
Copy Copy
1
2const tenantId: string = "tenant_67890";
3const commentId: string = "comment_abc123";
4const dir: number = 1;
5const ssoToken: string = "sso-eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";
6
7const responseWithoutSSO: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dir);
8const responseWithSSO: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dir, ssoToken);
9

lockComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
broadcastIdstringТак
ssostringНі

Відповідь

Повертає: LockComment200Response

Приклад

Приклад lockComment
Copy Copy
1
2const tenantId: string = 'tenant_42f6c1';
3const commentId: string = 'cmt-9a8b7c';
4const broadcastId: string = 'brd_2026_06_15';
5const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1Njc4OSIsImlhdCI6MTY1MDAwMDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
6
7const lockedWithSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId, ssoToken);
8const lockedWithoutSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId);
9

pinComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
broadcastIdstringТак
ssostringНі

Відповідь

Повертає: PinComment200Response

Приклад

Приклад pinComment
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-72";
3const commentId: string = "cmt_8f3a2b4c9d";
4const broadcastId: string = "live_2026-06-15_21z";
5const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fake.payload.signature";
6
7const responseNoSSO: PinComment200Response = await pinComment(tenantId, commentId, broadcastId);
8const responseWithSSO: PinComment200Response = await pinComment(tenantId, commentId, broadcastId, ssoToken);
9

saveComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createCommentParamsCreateCommentParamsТак
isLivebooleanНі
doSpamCheckbooleanНі
sendEmailsbooleanНі
populateNotificationsbooleanНі

Відповідь

Повертає: SaveComment200Response

Приклад

Приклад saveComment
Copy Copy
1
2const tenantId: string = "fastcomments-tenant-42";
3const createCommentParams: CreateCommentParams = {
4 threadId: "article-2026-06-0142",
5 content: "Great write-up — I followed the migration steps and everything worked as described.",
6 userId: "u_9c72b",
7 userName: "Ava R.",
8 userAvatarUrl: "https://cdn.example.com/avatars/u_9c72b.png",
9 metadata: { platform: "web", locale: "en-US" }
10};
11const isLive: boolean = true;
12const doSpamCheck: boolean = true;
13const sendEmails: boolean = false;
14const populateNotifications: boolean = true;
15const result: SaveComment200Response = await saveComment(tenantId, createCommentParams, isLive, doSpamCheck, sendEmails, populateNotifications);
16

saveCommentsBulk Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createCommentParamsArrayТак
isLivebooleanНі
doSpamCheckbooleanНі
sendEmailsbooleanНі
populateNotificationsbooleanНі

Відповідь

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

Приклад

Приклад saveCommentsBulk
Copy Copy
1
2const tenantId: string = "tenant_42a1b7";
3const mentions: CommentUserMentionInfo[] = [{ userId: "user_2b9", displayName: "Alex Chen" }];
4const hashtags: CommentUserHashTagInfo[] = [{ tag: "performance" }];
5const createCommentParams: CreateCommentParams[] = [
6 {
7 content: "Thanks for the detailed article — the alternative approach worked for me.",
8 authorId: "user_8f3c2",
9 authorName: "Maya Patel",
10 authorEmail: "maya.patel@example.com",
11 url: "/articles/optimizing-ts-performance",
12 createdAt: new Date().toISOString(),
13 mentions,
14 hashtags
15 }
16];
17const isLive: boolean = true;
18const doSpamCheck: boolean = false;
19const sendEmails: boolean = true;
20const populateNotifications: boolean = true;
21const result: Array<SaveComment200Response> = await saveCommentsBulk(tenantId, createCommentParams, isLive, doSpamCheck, sendEmails, populateNotifications);
22

setCommentText Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
commentIdstringТак
broadcastIdstringТак
commentTextUpdateRequestCommentTextUpdateRequestТак
editKeystringНі
ssostringНі

Відповідь

Повертає: SetCommentText200Response

Приклад

Приклад setCommentText
Copy Copy
1
2const tenantId: string = 'tenant_4f9a2b'
3const commentId: string = 'cmt-8421'
4const broadcastId: string = 'brd-2026-06-15'
5const commentTextUpdateRequest: CommentTextUpdateRequest = { text: 'Updated comment text to clarify the schedule.', mentions: [], hashtags: [] }
6const editKey: string = 'editkey_9b12'
7const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso.signature'
8const result: SetCommentText200Response = await setCommentText(tenantId, commentId, broadcastId, commentTextUpdateRequest, editKey, sso)
9

unBlockUserFromComment Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
unBlockFromCommentParamsUnBlockFromCommentParamsТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: UnBlockCommentPublic200Response

Приклад

Приклад unBlockUserFromComment
Copy Copy
1
2const tenantId: string = 'tenant_7b9c2a';
3const id: string = 'comment_4f8e1d';
4const unBlockFromCommentParams: UnBlockFromCommentParams = {
5 reason: 'User submitted appeal and provided additional context',
6 effectiveAt: new Date().toISOString()
7};
8const userId: string = 'user_92a3f6';
9const result: UnBlockCommentPublic200Response = await unBlockUserFromComment(tenantId, id, unBlockFromCommentParams, userId);
10

unFlagComment Internal Link


Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: FlagComment200Response

Приклад

Приклад unFlagComment
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2a1f';
3const commentId: string = 'cmt_20250614_01';
4const userId: string = 'user_47d2b9';
5const result: FlagComment200Response = await unFlagComment(tenantId, commentId, userId);
6

unLockComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
broadcastIdstringТак
ssostringНі

Відповідь

Повертає: LockComment200Response

Приклад

Приклад unLockComment
Copy Copy
1
2const tenantId: string = "tenant-8f3b2c4a";
3const commentId: string = "cmt_92a7f3e6";
4const broadcastId: string = "brd_1b4c9d20";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6const result: LockComment200Response = await unLockComment(tenantId, commentId, broadcastId, sso);
7

unPinComment Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
commentIdstringТак
broadcastIdstringТак
ssostringНі

Відповідь

Повертає: PinComment200Response

Приклад

Приклад unPinComment
Copy Copy
1
2const tenantId: string = "tenant_9f3b2c1a";
3const commentId: string = "comment_4d2e8a7f";
4const broadcastId: string = "broadcast_live_2026_06_15_18";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.invalid-signature";
6const response: PinComment200Response = await unPinComment(tenantId, commentId, broadcastId, sso);
7console.log(response);
8

updateComment Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updatableCommentParamsUpdatableCommentParamsТак
contextUserIdstringНі
doSpamCheckbooleanНі
isLivebooleanНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

updateComment Приклад
Copy Copy
1
2const tenantId: string = 'tenant_7f3c1b2a';
3const commentId: string = 'cmt_8d9f2a4b';
4const updatableCommentParams: UpdatableCommentParams = {
5 body: 'Updating this comment to clarify the feature behavior and include a timestamp.',
6 metadata: { category: 'support', editedReason: 'clarify instructions' },
7 visible: true
8};
9const contextUserId: string = 'user_42';
10const doSpamCheck: boolean = true;
11const result: FlagCommentPublic200Response = await updateComment(tenantId, commentId, updatableCommentParams, contextUserId, doSpamCheck);
12

voteComment Internal Link


Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
commentIdstringТак
urlIdstringТак
broadcastIdstringТак
voteBodyParamsVoteBodyParamsТак
sessionIdstringНі
ssostringНі

Відповідь

Повертає: VoteComment200Response

Приклад

Приклад voteComment
Copy Copy
1
2const tenantId: string = 'tenant_7f9d2e';
3const commentId: string = '5a1d3f9b-2c4e-4a2b-bf7b-1234567890ab';
4const urlId: string = 'articles/2026/06/15/typescript-api-patterns';
5const broadcastId: string = 'broadcast-20260615-01';
6const voteBodyParams: VoteBodyParams = { vote: 'up' };
7const sessionId: string = 'sess_9d2f3b45';
8const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImlhdCI6MTY5NzE2MDAwMH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
9
10const response: VoteComment200Response = await voteComment(
11 tenantId,
12 commentId,
13 urlId,
14 broadcastId,
15 voteBodyParams,
16 sessionId,
17 sso
18);
19

getCommentsForUser Internal Link

Параметри

НазваТипОбов'язковоОпис
userIdstringНі
directionSortDirectionsНі
repliesToUserIdstringНі
pagenumberНі
includei10nbooleanНі
localestringНі
isCrawlerbooleanНі

Відповідь

Повертає: GetCommentsForUser200Response

Приклад

Приклад getCommentsForUser
Copy Copy
1
2const userId: string = "550e8400-e29b-41d4-a716-446655440000";
3const page: number = 2;
4const includei10n: boolean = true;
5const locale: string = "en-US";
6const isCrawler: boolean = false;
7
8const comments: GetCommentsForUser200Response = await getCommentsForUser(
9 userId,
10 undefined, // direction пропущено
11 undefined, // repliesToUserId пропущено
12 page,
13 includei10n,
14 locale,
15 isCrawler
16);
17
18console.log(comments);
19

addDomainConfig Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
addDomainConfigParamsAddDomainConfigParamsТак

Відповідь

Повертає: AddDomainConfig200Response


deleteDomainConfig Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
domainstringТак

Відповідь

Повертає: DeleteDomainConfig200Response


getDomainConfig Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
domainstringТак

Відповідь

Повертає: GetDomainConfig200Response

getDomainConfigs Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак

Відповідь

Повертає: GetDomainConfigs200Response

patchDomainConfig Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
domainToUpdatestringТак
patchDomainConfigParamsPatchDomainConfigParamsТак

Відповідь

Повертає: GetDomainConfig200Response


putDomainConfig Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
domainToUpdatestringТак
updateDomainConfigParamsUpdateDomainConfigParamsТак

Відповідь

Повертає: GetDomainConfig200Response


createEmailTemplate Internal Link

Параметри

NameTypeОбов'язковоОпис
tenantIdstringТак
createEmailTemplateBodyCreateEmailTemplateBodyТак

Відповідь

Повертає: CreateEmailTemplate200Response

Приклад

Приклад createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_4f2b1c9e";
3const createEmailTemplateBody: CreateEmailTemplateBody = {
4 name: "New Comment Notification",
5 subject: "Someone replied to your discussion",
6 fromName: "Community Team",
7 fromAddress: "no-reply@community.example.com",
8 htmlBody: "<p>\{{comment.author}} replied: \{{comment.text}}</p>",
9 plaintextBody: "\{{comment.author}} replied: \{{comment.text}}",
10 previewText: "A new reply on a discussion you follow",
11 isDefault: false // необов'язковий прапорець, що демонструє використання необов'язкового параметра
12};
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_9c4f1b2a";
3const id: string = "emailtmpl_4d2b9a5e";
4const requestorNote: string | undefined = undefined; // необов'язкові метадані (не вимагаються функцією)
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, id);
6

deleteEmailTemplateRenderError Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
errorIdstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад deleteEmailTemplateRenderError
Copy Copy
1
2const tenantId: string = 'tenant-72f3b4';
3const templateId: string = 'email_template-9c3a1';
4let providedErrorId: string | undefined = undefined; // необов'язкове значення, може бути встановлене в іншому місці
5const errorId: string = providedErrorId ?? 'render_err-5d2f7';
6const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, templateId, errorId);
7

getEmailTemplate Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
idstringYes

Відповідь

Повертає: GetEmailTemplate200Response

Приклад

Приклад getEmailTemplate
Copy Copy
1
2const tenantId: string = 'tenant_7f3b2c';
3const templateId: string = 'welcome-email-2024';
4const includeDrafts: boolean | undefined = undefined;
5const emailTemplate: GetEmailTemplate200Response = await getEmailTemplate(tenantId, templateId);
6

getEmailTemplateDefinitions Internal Link


Параметри

NameTypeRequiredDescription
tenantIdstringТак

Відповідь

Повертає: GetEmailTemplateDefinitions200Response

Приклад

Приклад getEmailTemplateDefinitions
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_acme_001';
4 const options: { includeDrafts?: boolean } = { includeDrafts: true }; // продемонстровано необов'язковий параметр
5 const templates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId, options);
6 console.log(templates);
7})();
8

getEmailTemplateRenderErrors Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
skipnumberНі

Відповідь

Повертає: GetEmailTemplateRenderErrors200Response

Приклад

Приклад getEmailTemplateRenderErrors
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const id: string = 'tmpl_7f9a2b4c';
4const skip: number = 20;
5
6const errorsWithSkip: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
7const errorsFirstPage: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id);
8

getEmailTemplates Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetEmailTemplates200Response

Приклад

Приклад getEmailTemplates
Copy Copy
1
2async function run(): Promise<void> {
3 const tenantId: string = "acme-marketing-tenant-001";
4 const templatesDefault: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
5 const templatesPaged: GetEmailTemplates200Response = await getEmailTemplates(tenantId, 25);
6 console.log(templatesDefault, templatesPaged);
7}
8run();
9

renderEmailTemplate Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
renderEmailTemplateBodyRenderEmailTemplateBodyТак
localestringНі

Відповідь

Повертає: RenderEmailTemplate200Response

Приклад

Приклад renderEmailTemplate
Copy Copy
1
2const tenantId: string = '7f7e2b90-3a2b-4d9b-9df1-5f0b6b2e8a1c';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'welcome_email',
5 recipient: { email: 'jordan.smith@acme.co', name: 'Jordan Smith' },
6 variables: { siteName: 'Acme Forum', verificationUrl: 'https://acme.forum/verify?code=abc123' }
7};
8const locale: string = 'en-US';
9const result: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
10

updateEmailTemplate Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
updateEmailTemplateBodyUpdateEmailTemplateBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-123';
3const id: string = 'template-789';
4const locale: string | undefined = 'en-US';
5const updateEmailTemplateBody: UpdateEmailTemplateBody = {
6 subject: 'Welcome to Acme — Get started',
7 bodyHtml: '<p>Hi \{{firstName}}, welcome to Acme. Start by visiting your dashboard.</p>',
8 fromName: 'Acme Support',
9 fromEmail: 'support@acme.com',
10 enabled: true,
11 ...(locale ? { locale } : {})
12};
13const result: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
14

getEventLog Internal Link

req tenantId urlId userIdWS

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
userIdWSstringТак
startTimenumberТак
endTimenumberНі

Відповідь

Повертає: GetEventLog200Response

Приклад

Приклад getEventLog
Copy Copy
1
2const tenantId: string = 'tenant_9f3a2b';
3const urlId: string = 'news/2026/06/fastcomments-release';
4const userIdWS: string = 'ws_user_48291';
5const startTime: number = Date.now() - 86_400_000;
6const endTime: number = Date.now();
7const result: GetEventLog200Response = await getEventLog(tenantId, urlId, userIdWS, startTime, endTime);
8

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
urlIdstringТак
userIdWSstringТак
startTimenumberТак
endTimenumberНі

Відповідь

Повертає: GetEventLog200Response

Приклад

Приклад getGlobalEventLog
Copy Copy
1
2const tenantId: string = "tenant_639b7f12";
3const urlId: string = "https://www.news-site.com/articles/2026/06/15/important-update-987";
4const userIdWS: string = "user_ws_42b7";
5const startTime: number = new Date("2026-06-14T00:00:00Z").getTime();
6const endTime: number = Date.now();
7
8const eventLog: GetEventLog200Response = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime, endTime);
9

createFeedPost Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createFeedPostParamsCreateFeedPostParamsТак
broadcastIdstringНі
isLivebooleanНі
doSpamCheckbooleanНі
skipDupCheckbooleanНі

Відповідь

Повертає: CreateFeedPost200Response

Приклад

Приклад createFeedPost
Copy Copy
1
2const tenantId: string = 'tenant_4f2b1c';
3const createFeedPostParams: CreateFeedPostParams = {
4 content: 'Launching our summer collection today — check it out!',
5 authorId: 'user_879',
6 media: [
7 {
8 type: 'image',
9 assets: [
10 { url: 'https://cdn.myshop.com/uploads/summer-look.jpg', width: 1200, height: 800 } as FeedPostMediaItemAsset
11 ]
12 } as FeedPostMediaItem
13 ],
14 links: [
15 { url: 'https://myshop.com/new-arrival', title: 'Summer Collection' } as FeedPostLink
16 ],
17 allowComments: true
18};
19const broadcastId: string = 'broadcast-2026-06-15-001';
20const isLive: boolean = false;
21const doSpamCheck: boolean = true;
22const skipDupCheck: boolean = false;
23const response: CreateFeedPost200Response = await createFeedPost(tenantId, createFeedPostParams, broadcastId, isLive, doSpamCheck, skipDupCheck);
24

createFeedPostPublic Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
createFeedPostParamsCreateFeedPostParamsТак
broadcastIdstringНі
ssostringНі

Відповідь

Повертає: CreateFeedPostPublic200Response

Приклад

Приклад createFeedPostPublic
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9f8b7c";
4 const media: FeedPostMediaItem[] = [{ type: "image", assets: [{ url: "https://cdn.example.com/roadmap.jpg", mimeType: "image/jpeg" }] }];
5 const links: FeedPostLink[] = [{ url: "https://company.example.com/roadmap", title: "Full roadmap" }];
6 const createFeedPostParams: CreateFeedPostParams = {
7 title: "Weekly Product Roadmap Update",
8 body: "This week we shipped enhancements to search relevance and fixed top customer bugs.",
9 authorId: "user_8321",
10 media,
11 links,
12 visibility: "public"
13 };
14 const broadcastId: string = "broadcast_2026_06_15";
15 const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_payload";
16 const response: CreateFeedPostPublic200Response = await createFeedPostPublic(tenantId, createFeedPostParams, broadcastId, sso);
17 console.log(response);
18})();
19

deleteFeedPostPublic Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
postIdstringТак
broadcastIdstringНі
ssostringНі

Відповідь

Повертає: DeleteFeedPostPublic200Response

Приклад

Приклад deleteFeedPostPublic
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const postId: string = 'post_8f3d2a7c';
4const broadcastId: string = 'broadcast_2026-06-15_01';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ssoPayload.signature';
6const response: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId, broadcastId, sso);
7

getFeedPosts Internal Link

req tenantId afterId

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
afterIdstringНі
limitnumberНі
tagsArrayНі

Відповідь

Повертає: GetFeedPosts200Response

Приклад

Приклад getFeedPosts
Copy Copy
1
2const tenantId: string = "tenant_74321";
3const afterId: string = "post_20250610_9b2f3";
4const limit: number = 25;
5const tags: Array<string> = ["product-updates", "announcements"];
6
7const response: GetFeedPosts200Response = await getFeedPosts(tenantId, afterId, limit, tags);
8

getFeedPostsPublic Internal Link

req tenantId afterId

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
afterIdstringНі
limitnumberНі
tagsArrayНі
ssostringНі
isCrawlerbooleanНі
includeUserInfobooleanНі

Відповідь

Повертає: GetFeedPostsPublic200Response

Приклад

Приклад getFeedPostsPublic
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_acme_01';
4 const afterId: string = 'post_20250610_842';
5 const limit: number = 25;
6 const tags: string[] = ['news', 'technology'];
7 const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1Ni';
8 const isCrawler: boolean = false;
9 const includeUserInfo: boolean = true;
10
11 const response: GetFeedPostsPublic200Response = await getFeedPostsPublic(
12 tenantId,
13 afterId,
14 limit,
15 tags,
16 sso,
17 isCrawler,
18 includeUserInfo
19 );
20
21 console.log(response);
22})();
23

getFeedPostsStats Internal Link

Параметри

НазваTypeОбов'язковеОпис
tenantIdstringТак
postIdsArrayТак
ssostringНі

Відповідь

Повертає: GetFeedPostsStats200Response

Приклад

Приклад getFeedPostsStats
Copy Copy
1
2const tenantId: string = "tenant_98765";
3const postIds: string[] = ["post_a1b2c3", "post_d4e5f6"];
4const ssoToken: string = "sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";
5
6const statsWithoutSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds);
7const statsWithSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds, ssoToken);
8

getUserReactsPublic Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
postIdsArrayНі
ssostringНі

Response

Повертає: GetUserReactsPublic200Response

Приклад

Приклад getUserReactsPublic
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-4f2b9c';
3const postIds: Array<string> = ['post_7a1f9e', 'post_2b3c88'];
4const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1Njc4OSIsImlhdCI6MTYwOTQ0MDAwMH0.signature';
5
6const response: GetUserReactsPublic200Response = await getUserReactsPublic(tenantId, postIds, sso);
7

reactFeedPostPublic Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
postIdstringТак
reactBodyParamsReactBodyParamsТак
isUndobooleanНі
broadcastIdstringНі
ssostringНі

Відповідь

Повертає: ReactFeedPostPublic200Response

Приклад

Приклад reactFeedPostPublic
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const postId: string = 'feedpost_78901';
4const reactBodyParams: ReactBodyParams = { reaction: 'like', emoji: '👍' };
5const isUndo: boolean = false;
6const broadcastId: string = 'broadcast_2026_06_15_01';
7const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.signature';
8
9const response: ReactFeedPostPublic200Response = await reactFeedPostPublic(
10 tenantId,
11 postId,
12 reactBodyParams,
13 isUndo,
14 broadcastId,
15 sso
16);
17

updateFeedPost Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
feedPostFeedPostТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання updateFeedPost
Copy Copy
1
2const tenantId: string = "tenant_72f3b4c9";
3const id: string = "post_ba4f6e18-2d3c-4b7a-91f2-8c0e3a6b5d4f";
4
5const feedPost: FeedPost = {
6 title: "June feature rollout",
7 body: "Announcing performance improvements and moderation updates available to all sites.",
8 authorName: "Platform Team",
9 mediaItems: [
10 {
11 type: "image",
12 caption: "Release banner",
13 asset: { url: "https://cdn.fastcomments.com/assets/june-banner.jpg", mimeType: "image/jpeg", width: 1200, height: 600 }
14 }
15 ],
16 links: [{ title: "Release notes", url: "https://docs.fastcomments.com/releases/june-2026" }]
17} as FeedPost;
18
19const result: FlagCommentPublic200Response = await updateFeedPost(tenantId, id, feedPost);
20

updateFeedPostPublic Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
postIdstringТак
updateFeedPostParamsUpdateFeedPostParamsТак
broadcastIdstringНі
ssostringНі

Відповідь

Повертає: CreateFeedPostPublic200Response

Приклад

Приклад updateFeedPostPublic
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const postId: string = 'post_20260615_001';
4const updateFeedPostParams: UpdateFeedPostParams = {
5 title: 'Weekly Update: Product Launch',
6 content: 'We shipped the 2.0 release today — highlights and links below.',
7 media: [{ url: 'https://cdn.acme.com/releases/launch.jpg', type: 'image' }],
8 tags: ['release', 'product'],
9 isPublic: true
10};
11const broadcastId: string = 'broadcast_live_42';
12const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
13const result: CreateFeedPostPublic200Response = await updateFeedPostPublic(tenantId, postId, updateFeedPostParams, broadcastId, sso);
14

flagCommentPublic Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringТак
isFlaggedbooleanТак
ssostringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

flagCommentPublic Приклад
Copy Copy
1
2const tenantId: string = "tenant_4f1b2a9c";
3const commentId: string = "comment_8d3e6f12";
4const isFlagged: boolean = true;
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6const result: FlagCommentPublic200Response = await flagCommentPublic(tenantId, commentId, isFlagged, sso);
7

getGifLarge Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
largeInternalURLSanitizedstringТак

Відповідь

Повертає: GetGifLarge200Response

Приклад

Приклад getGifLarge
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c";
3const largeInternalURLSanitized: string = "https://cdn.fastcomments.com/gifs/07d3f6_large.gif";
4const preferWebP: boolean | undefined = true; // необов'язкова перевага
5const urlToUse: string = preferWebP ? largeInternalURLSanitized.replace(".gif", ".webp") : largeInternalURLSanitized;
6const response: GetGifLarge200Response = await getGifLarge(tenantId, urlToUse);
7

getGifsSearch Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
searchstringТак
localestringНі
ratingstringНі
pagenumberНі

Відповідь

Повертає: GetGifsSearch200Response

Приклад

getGifsSearch Приклад
Copy Copy
1
2const tenantId: string = "tenant_acme_9876";
3const search: string = "cat playing piano";
4const locale: string = "en-US";
5const rating: string = "pg";
6const page: number = 1;
7const result: GetGifsSearch200Response = await getGifsSearch(tenantId, search, locale, rating, page);
8

getGifsTrending Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringYes
localestringNo
ratingstringNo
pagenumberNo

Відповідь

Повертає: GetGifsTrending200Response

Приклад

Приклад getGifsTrending
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = 'tenant_8b3f2c';
4 const locale: string = 'en-US';
5 const rating: string = 'pg';
6 const page: number = 1;
7 const result: GetGifsTrending200Response = await getGifsTrending(tenantId, locale, rating, page);
8 console.log(result);
9}
10main();
11

addHashTag Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringНі
createHashTagBodyCreateHashTagBodyНі

Відповідь

Повертає: AddHashTag200Response

Приклад

Приклад addHashTag
Copy Copy
1
2const tenantId: string | undefined = "tenant_3c9f7b";
3const createHashTagBody: CreateHashTagBody = {
4 name: "support",
5 title: "Support",
6 description: "Questions about product usage, bugs, and account issues",
7 color: "#0066CC",
8 isActive: true,
9 aliases: ["help", "customer-service"]
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createHashTagBody);
12

addHashTagsBulk Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringНі
bulkCreateHashTagsBodyBulkCreateHashTagsBodyНі

Відповідь

Повертає: AddHashTagsBulk200Response

Приклад

Приклад addHashTagsBulk
Copy Copy
1
2const tenantId: string = "tenant_acme_corp_987";
3const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
4 tags: [
5 { name: "product-update", description: "Announcements about new product releases", visible: true },
6 { name: "customer-support", description: "Customer support related discussions", visible: false }
7 ],
8 createdBy: "moderator_jane"
9};
10const resultWithTenant: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
11const resultWithoutTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBody);
12

deleteHashTag Internal Link

Параметри

NameTypeRequiredDescription
tagstringТак
tenantIdstringНі
deleteHashTagRequestDeleteHashTagRequestНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

deleteHashTag Приклад
Copy Copy
1
2const tag: string = "breaking-news";
3const tenantId: string = "tenant_72a1";
4const deleteHashTagRequest: DeleteHashTagRequest = {
5 reason: "consolidate-duplicates",
6 requestedBy: "moderator@dailypress.com",
7 forceDelete: true
8};
9const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteHashTagRequest);
10

getHashTags Internal Link

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
pagenumberНі

Відповідь

Повертає: GetHashTags200Response

Приклад

Приклад getHashTags
Copy Copy
1
2const tenantId: string = 'tenant_7f4b2c3a';
3const tagsFirstPage: GetHashTags200Response = await getHashTags(tenantId);
4const tagsSecondPage: GetHashTags200Response = await getHashTags(tenantId, 2);
5console.log(tagsFirstPage, tagsSecondPage);
6

patchHashTag Internal Link

Параметри

NameTypeRequiredDescription
tagstringТак
tenantIdstringНі
updateHashTagBodyUpdateHashTagBodyНі

Відповідь

Повертає: PatchHashTag200Response

Приклад

Приклад patchHashTag
Copy Copy
1
2const tag: string = "feature-request";
3const tenantId: string = "tenant_8f7a3b2c";
4const updateHashTagBody: UpdateHashTagBody = {
5 displayName: "Feature Request",
6 description: "Use this tag for requests to add new features to the product",
7 enabled: true
8};
9const result: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
10

createModerator Internal Link


Параметри

NameTypeRequiredDescription
tenantIdstringТак
createModeratorBodyCreateModeratorBodyТак

Відповідь

Повертає: CreateModerator200Response

Приклад

createModerator Приклад
Copy Copy
1
2const tenantId: string = 'tenant_9f3b21';
3const createModeratorBody: CreateModeratorBody = {
4 moderator: {
5 name: 'Alex Rivera',
6 email: 'alex.rivera@fastcomments.io',
7 role: 'global_moderator',
8 enabled: true,
9 },
10 // продемонстровано необов'язкові параметри:
11 notifyUser: true,
12 permissions: ['delete_comment', 'edit_comment', 'ban_user'],
13 customConfig: { dashboardTheme: 'dark' } as unknown as CustomConfigParameters
14};
15const result: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
16

deleteModerator Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
sendEmailstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад deleteModerator
Copy Copy
1
2const tenantId: string = 'tenant_4f3b2c9a';
3const id: string = 'mod_9c2d1f7b';
4const sendEmail: string = 'true';
5const response: FlagCommentPublic200Response = await deleteModerator(tenantId, id, sendEmail);
6console.log(response);
7

getModerator Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetModerator200Response

Приклад

Приклад getModerator
Copy Copy
1
2const tenantId: string = 'acme-media-58';
3const id: string = 'mod-82f3b9c1';
4const moderatorResponse: GetModerator200Response = await getModerator(tenantId, id);
5

getModerators Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetModerators200Response

Приклад

Приклад getModerators
Copy Copy
1
2const tenantId: string = 'tenant_0a1b2c3d';
3const moderators: GetModerators200Response = await getModerators(tenantId);
4const skip: number = 20;
5const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, skip);
6

sendInvite Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
fromNamestringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання sendInvite
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_acme_42";
4 const id: string = "cmt_8f3b21";
5 const fromName: string = "Ava Thompson";
6 const inviteResult: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
7 console.log(inviteResult);
8})();
9

updateModerator Internal Link


Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
idstringТак
updateModeratorBodyUpdateModeratorBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateModerator
Copy Copy
1
2const tenantId: string = 'acme-tenant-81';
3const id: string = 'mod_7f3a2b';
4const updateModeratorBody: UpdateModeratorBody = {
5 email: 'j.reyes@acme-corp.com',
6 displayName: 'Jordan Reyes',
7 roles: ['moderator', 'content_reviewer'],
8 active: true,
9 notes: 'Promoted to senior moderator; monitor flagged content weekly'
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBody);
12

deleteNotificationCount Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

getCachedNotificationCount Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetCachedNotificationCount200Response

Приклад

Приклад getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-23';
3const id: string = 'user_987654';
4const cachedCount: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, id);
5
6const maybeId: string | undefined = Math.random() > 0.5 ? 'user_123456' : undefined;
7if (maybeId) {
8 const optionalCachedCount: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, maybeId);
9}
10

getNotificationCount Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
userIdstringНі
urlIdstringНі
fromCommentIdstringНі
viewedbooleanНі
typestringНі

Відповідь

Повертає: GetNotificationCount200Response

Приклад

Приклад getNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_82a3b9f';
3const userId: string = 'user_43721';
4const urlId: string = 'https://news.example.com/articles/2026/06/15/coverage-123';
5const fromCommentId: string = 'comment_98765';
6const viewed: boolean = false;
7const notificationType: string = 'mention';
8
9const result: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, fromCommentId, viewed, notificationType);
10

getNotifications Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
userIdstringНі
urlIdstringНі
fromCommentIdstringНі
viewedbooleanНі
typestringНі
skipnumberНі

Відповідь

Повертає: GetNotifications200Response

Приклад

Приклад використання getNotifications
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c6a';
3const userId: string = 'user_5a4b3c2d';
4const urlId: string = 'post_84f2a1b9';
5const fromCommentId: string = 'cmt_0a1b2c3d';
6const viewed: boolean = false;
7const type: string = 'reply';
8const skip: number = 0;
9
10const notifications: GetNotifications200Response = await getNotifications(
11 tenantId,
12 userId,
13 urlId,
14 fromCommentId,
15 viewed,
16 type,
17 skip
18);
19

updateNotification Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updateNotificationBodyUpdateNotificationBodyТак
userIdstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateNotification
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2c';
3const id: string = 'notification_4a1d2e';
4const updateNotificationBody: UpdateNotificationBody = {
5 enabled: true,
6 channels: ['email', 'push'],
7 frequency: 'immediate',
8 templateId: 'tmpl_77aa'
9} as UpdateNotificationBody;
10const userId: string = 'user_2468';
11const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
12

createV1PageReact Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
urlIdstringТак
titlestringНі

Відповідь

Повертає: CreateV1PageReact200Response

Приклад

Приклад createV1PageReact
Copy Copy
1
2(async () => {
3 const tenantId: string = 'b12f3c4d-5678-90ab-cdef-1234567890ab';
4 const urlId: string = 'https://www.news-site.com/world/2026/election-results';
5 const title: string = 'Election results: key takeaways and analysis';
6 const responseWithTitle: CreateV1PageReact200Response = await createV1PageReact(tenantId, urlId, title);
7 const responseWithoutTitle: CreateV1PageReact200Response = await createV1PageReact(tenantId, urlId);
8 console.log(responseWithTitle, responseWithoutTitle);
9})();
10

createV2PageReact Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
idstringТак
titlestringНі

Відповідь

Повертає: CreateV2PageReact200Response

Приклад

Приклад createV2PageReact
Copy Copy
1
2const tenantId: string = "fastcomments-tenant-72";
3const urlId: string = "articles/2026/06/15/product-update";
4const id: string = "page-8f3b2a";
5const title: string = "Product Update: June 15, 2026";
6
7(async function run(): Promise<void> {
8 const response: CreateV2PageReact200Response = await createV2PageReact(tenantId, urlId, id, title);
9 console.log(response);
10})();
11

deleteV1PageReact Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак

Відповідь

Повертає: DeleteV1PageReact200Response

Приклад

Приклад deleteV1PageReact
Copy Copy
1
2const tenantId: string = process.env.TENANT_ID ?? 'd3b07384-9f6a-4c2b-8c3e-0a1b2c3d4e5f';
3const urlId: string = 'https://acme.com/articles/2026/06/fastcomments-integration';
4const result: DeleteV1PageReact200Response = await deleteV1PageReact(tenantId, urlId);
5

deleteV2PageReact Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
urlIdstringYes
idstringYes

Відповідь

Повертає: DeleteV2PageReact200Response

Приклад

Приклад deleteV2PageReact
Copy Copy
1
2const tenantId: string = "tenant_79021";
3const urlId: string = "blog/my-first-post";
4const id: string = "reaction_9f8b7c";
5let includeHistory: boolean | undefined = undefined; // необов'язковий прапорець, використовується в деяких викликах
6
7const result: DeleteV2PageReact200Response = await deleteV2PageReact(tenantId, urlId, id);
8console.log(result);
9

getV1PageLikes Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак

Відповідь

Повертає: GetV1PageLikes200Response

Приклад

Приклад getV1PageLikes
Copy Copy
1
2const tenantId: string = 'fastcomments-742';
3const urlId: string = 'sports/2026/06/15/world-cup-preview';
4const pageLikes: GetV1PageLikes200Response = await getV1PageLikes(tenantId, urlId);
5

getV2PageReacts Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак

Відповідь

Повертає: GetV2PageReacts200Response

Приклад

Приклад getV2PageReacts
Copy Copy
1
2const tenantId: string = "tenant_82f4b3a9";
3const urlId: string = "https://news.site.com/articles/2026/06/15/product-launch";
4const response: GetV2PageReacts200Response = await getV2PageReacts(tenantId, urlId);
5console.log(response);
6

getV2PageReactUsers Internal Link

Параметри

Ім'яТипОбов'язковийОпис
tenantIdstringYes
urlIdstringYes
idstringYes

Відповідь

Повертає: GetV2PageReactUsers200Response

Приклад

Приклад getV2PageReactUsers
Copy Copy
1
2const tenantId: string = "7421";
3const urlId: string = "sports/london-marathon";
4const id: string = "reactUser-3fa85f64-5717-4562-b3fc-2c963f66afa6";
5const includeDeleted: boolean | undefined = undefined; // необов'язковий прапорець (демонстрація)
6
7const result: GetV2PageReactUsers200Response = await getV2PageReactUsers(tenantId, urlId, id);
8

addPage Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createAPIPageDataCreateAPIPageDataТак

Відповідь

Повертає: AddPageAPIResponse


deletePage Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: DeletePageAPIResponse


getOfflineUsers Internal Link


Минулі коментатори на сторінці, які НЕ зараз онлайн. Відсортовано за displayName. Використовуйте це після вичерпання /users/online, щоб відобразити розділ "Учасники". Курсорна пагінація по commenterName: сервер проходить по частковому {tenantId, urlId, commenterName} індексу від afterName вперед через $gt, без витрат на $skip.

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
urlIdstringYes
afterNamestringNo
afterUserIdstringNo

Відповідь

Повертає: GetOfflineUsers200Response

Приклад

Приклад getOfflineUsers
Copy Copy
1
2const tenantId: string = 'tenant_prod_001';
3const urlId: string = 'article-2026-06-15-how-ai-impacts';
4const afterName: string = 'michael.smith';
5const afterUserId: string = 'user_72b9';
6
7const response: GetOfflineUsers200Response = await getOfflineUsers(tenantId, urlId, afterName, afterUserId);
8

getOnlineUsers Internal Link

Користувачі, які наразі онлайн на сторінці: люди, чиї websocket-сесії зараз підписані на цю сторінку. Повертає anonCount + totalCount (підписники в межах кімнати, включно з анонімними переглядачами, яких ми не перераховуємо).

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
afterNamestringНі
afterUserIdstringНі

Відповідь

Повертає: GetOnlineUsers200Response

Приклад

Приклад getOnlineUsers
Copy Copy
1
2const tenantId: string = 'tenant_14f9c3';
3const urlId: string = 'article_20250615';
4const afterName: string = 'marie.curie';
5const afterUserId: string = 'u_92b7';
6const result: GetOnlineUsers200Response = await getOnlineUsers(tenantId, urlId, afterName, afterUserId);
7

getPageByURLId Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак

Відповідь

Повертає: GetPageByURLIdAPIResponse


getPages Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак

Відповідь

Повертає: GetPagesAPIResponse

getPagesPublic Internal Link

Перелік сторінок для орендаря. Використовується десктоп-клієнтом FChat для заповнення його списку кімнат. Вимагає, щоб enableFChat було встановлено в true у вирішеній кастомній конфігурації для кожної сторінки. Сторінки, які вимагають SSO, фільтруються відповідно до групового доступу користувача, що виконує запит.

Параметри

NameTypeRequiredDescription
tenantIdstringТак
cursorstringНі
limitnumberНі
qstringНі
sortByPagesSortByНі
hasCommentsbooleanНі

Відповідь

Повертає: GetPagesPublic200Response

Приклад

Приклад getPagesPublic
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2c';
3const cursor: string = 'eyJwYWdlIjoiMTIwIn0';
4const limit: number = 25;
5const q: string = 'homepage hero';
6const hasComments: boolean = true;
7
8const response: GetPagesPublic200Response = await getPagesPublic(
9 tenantId,
10 cursor,
11 limit,
12 q,
13 undefined,
14 hasComments
15);
16

getUsersInfo Internal Link


Зведена інформація про користувачів для tenant. За заданими userIds повертає відображувану інформацію з User / SSOUser. Використовується віджетом коментарів для збагачення користувачів, які щойно з'явилися через подію присутності. Без контексту сторінки: конфіденційність застосовується однаково (приватні профілі замасковані).

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idsstringТак

Відповідь

Повертає: GetUsersInfo200Response

Приклад

Приклад getUsersInfo
Copy Copy
1
2const tenantId: string = 'acme-tenant-007';
3const userIdsList: string[] = ['user_12a', 'user_34b', 'user_56c'];
4const separator: string | undefined = undefined; // необов'язково; якщо undefined, за замовчуванням використовується кома
5const ids: string = userIdsList.join(separator ?? ',');
6const usersInfo: GetUsersInfo200Response = await getUsersInfo(tenantId, ids);
7

patchPage Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updateAPIPageDataUpdateAPIPageDataТак

Відповідь

Повертає: PatchPageAPIResponse


deletePendingWebhookEvent Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад deletePendingWebhookEvent
Copy Copy
1
2const tenantId: string = "tenant_5f8d7a34";
3const id: string = "webhook_evt_987654321";
4const requestNote: string | undefined = undefined;
5const response: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, id);
6

getPendingWebhookEventCount Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringНі
externalIdstringНі
eventTypestringНі
typestringНі
domainstringНі
attemptCountGTnumberНі

Відповідь

Повертає: GetPendingWebhookEventCount200Response

Приклад

Приклад використання getPendingWebhookEventCount
Copy Copy
1
2const tenantId: string = 'tenant_9f8b3b';
3const commentId: string = 'cmt_1a2b3c';
4const eventType: string = 'comment.created';
5const domain: string = 'news-site.com';
6const attemptCountGT: number = 2;
7
8const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
9 tenantId,
10 commentId,
11 undefined, // externalId omitted
12 eventType,
13 undefined, // type omitted
14 domain,
15 attemptCountGT
16);
17

getPendingWebhookEvents Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
commentIdstringНі
externalIdstringНі
eventTypestringНі
typestringНі
domainstringНі
attemptCountGTnumberНі
skipnumberНі

Відповідь

Повертає: GetPendingWebhookEvents200Response

Приклад

Приклад getPendingWebhookEvents
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a';
3const commentId: string = 'cmt_8a7d1';
4const eventType: string = 'comment.created';
5const domain: string = 'reviews.myshop.com';
6const attemptCountGT: number = 1;
7const skip: number = 0;
8
9const result: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
10 tenantId,
11 commentId,
12 undefined,
13 eventType,
14 undefined,
15 domain,
16 attemptCountGT,
17 skip
18);
19

createQuestionConfig Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createQuestionConfigBodyCreateQuestionConfigBodyТак

Відповідь

Повертає: CreateQuestionConfig200Response

Приклад

Приклад createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_9f3b1c2a";
3
4const createQuestionConfigBody: CreateQuestionConfigBody = {
5 name: "Product feedback",
6 key: "product_quality",
7 description: "Short survey question shown after posting a comment",
8 required: true,
9 renderingType: "singleChoice",
10 customOptions: [
11 { label: "Excellent", value: "5" },
12 { label: "Good", value: "4" },
13 { label: "Fair", value: "3" }
14 ] as QuestionConfigCustomOptionsInner[],
15 notifyModerators: false // необов'язковий параметр (продемонстровано)
16};
17
18const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
19

deleteQuestionConfig Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад deleteQuestionConfig
Copy Copy
1
2const tenantId: string = 'acme-corp-47a9';
3const id: string = 'qcfg_20260615_001';
4const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5

getQuestionConfig Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetQuestionConfig200Response

Приклад

Приклад getQuestionConfig
Copy Copy
1
2const tenantId: string = "acme-corp-47";
3const questionId: string = "q-4f2b9a";
4const includeDrafts: boolean | undefined = undefined; // заповнювач для необов'язкового параметра
5const result: GetQuestionConfig200Response = await getQuestionConfig(tenantId, questionId);
6console.log(result);
7

getQuestionConfigs Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetQuestionConfigs200Response

Приклад

Приклад getQuestionConfigs
Copy Copy
1
2const tenantId: string = "tenant_4c9f2b";
3const responseWithoutSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const skip: number = 50;
5const responseWithSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, skip);
6

updateQuestionConfig Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак
updateQuestionConfigBodyUpdateQuestionConfigBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_9f3b8a2e-4c6d-4b4f-a1b2-9e8f7d6c5b3a";
3const id: string = "q_7c2e1b4a-5d6f-4a8b-9c3d-2e1f0b9a4c5d";
4const options: QuestionConfigCustomOptionsInner[] = [
5 { value: "1", label: "Very dissatisfied" },
6 { value: "2", label: "Dissatisfied" },
7 { value: "3", label: "Neutral" },
8 { value: "4", label: "Satisfied" },
9 { value: "5", label: "Very satisfied" }
10];
11const updateQuestionConfigBody: UpdateQuestionConfigBody = {
12 label: "How satisfied are you with the article?",
13 enabled: true,
14 required: false, // приклад необов'язкового параметра
15 options
16};
17const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
18

createQuestionResult Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createQuestionResultBodyCreateQuestionResultBodyТак

Відповідь

Повертає: CreateQuestionResult200Response

Приклад

Приклад createQuestionResult
Copy Copy
1
2const tenantId: string = 'fc-tenant-512';
3const meta: MetaItem[] = [{ key: 'source', value: 'article' }];
4const body: CreateQuestionResultBody = {
5 questionId: 'q-94',
6 userId: 'user_332',
7 answers: [{ optionId: 'opt_a', score: 1 }],
8 meta, // необов'язкові метадані
9} as CreateQuestionResultBody;
10const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, body);
11

deleteQuestionResult Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

deleteQuestionResult Example
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-01";
3const id: string = "qres_9f8b7c3a";
4const response: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, id);
5const optionalResponse: FlagCommentPublic200Response | undefined = response;
6

getQuestionResult Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetQuestionResult200Response

Приклад

getQuestionResult Приклад
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a7c9';
3const questionId: string = 'q_8d4f1b2c3a';
4const options: { includeMeta?: boolean } = { includeMeta: true }; // демонстрація необов'язкового параметра
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, questionId);
6const apiStatus: APIStatus | undefined = (result as unknown as { apiStatus?: APIStatus }).apiStatus;
7const question: QuestionResult | undefined = (result as unknown as { question?: QuestionResult }).question;
8

getQuestionResults Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
urlIdstringНі
userIdstringНі
startDatestringНі
questionIdstringНі
questionIdsstringНі
skipnumberНі

Відповідь

Повертає: GetQuestionResults200Response

Приклад

Приклад getQuestionResults
Copy Copy
1
2const tenantId: string = 'fc-tenant-7a9c';
3const urlId: string = 'news/article-2026-06-15';
4const userId: string = 'user-8421';
5const startDate: string = '2026-05-01T00:00:00Z';
6const questionId: string = 'q-13';
7const questionIds: string = 'q-13,q-14';
8const skip: number = 20;
9const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, questionId, questionIds, skip);
10

updateQuestionResult Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updateQuestionResultBodyUpdateQuestionResultBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateQuestionResult
Copy Copy
1
2const tenantId: string = "tenant_prod_84b2";
3const id: string = "question_9f3a";
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 outcome: "accepted",
6 confidence: 0.88,
7 moderatorId: "moderator_17",
8 notes: "Validated by automated review" // необов'язкове поле включено
9};
10const result: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
11

aggregateQuestionResults Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
questionIdstringНі
questionIdsArrayНі
urlIdstringНі
timeBucketAggregateTimeBucketНі
startDateDateНі
forceRecalculatebooleanНі

Відповідь

Повертає: AggregateQuestionResults200Response

Приклад

Приклад aggregateQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_6f2b3c';
3const questionIds: Array<string> = ['q-7a1b2c', 'q-8d3e4f'];
4const urlId: string = 'url_9f8e7d';
5const startDate: Date = new Date('2025-01-01T00:00:00Z');
6const result: AggregateQuestionResults200Response = await aggregateQuestionResults(tenantId, undefined, questionIds, urlId, undefined, startDate, true);
7

bulkAggregateQuestionResults Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequestТак
forceRecalculatebooleanНі

Відповідь

Повертає: BulkAggregateQuestionResults200Response

Приклад

Приклад bulkAggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_0012";
3const bulkAggregateQuestionResultsRequest: BulkAggregateQuestionResultsRequest = {
4 items: [
5 {
6 questionId: "quality_score",
7 startTime: "2026-06-01T00:00:00Z",
8 endTime: "2026-06-14T00:00:00Z",
9 timeBucket: "day",
10 dimensions: ["threadId"]
11 }
12 ],
13 includeTotals: true
14};
15const forceRecalculate: boolean = false;
16const result: BulkAggregateQuestionResults200Response = await bulkAggregateQuestionResults(tenantId, bulkAggregateQuestionResultsRequest, forceRecalculate);
17

combineCommentsWithQuestionResults Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
startDateDateNo
forceRecalculatebooleanNo
minValuenumberNo
maxValuenumberNo
limitnumberNo

Відповідь

Повертає: CombineCommentsWithQuestionResults200Response

Приклад

Приклад combineCommentsWithQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_12345';
3const questionId: string = 'q_98765';
4const questionIds: string[] = ['q_98765', 'q_12345'];
5const urlId: string = 'url_abc123';
6const startDate: Date = new Date('2026-01-01T00:00:00Z');
7const forceRecalculate: boolean = true;
8const minValue: number = 0;
9const maxValue: number = 5;
10const limit: number = 50;
11const result: CombineCommentsWithQuestionResults200Response = await combineCommentsWithQuestionResults(
12 tenantId,
13 questionId,
14 questionIds,
15 urlId,
16 startDate,
17 forceRecalculate,
18 minValue,
19 maxValue,
20 limit
21);
22

addSSOUser Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createAPISSOUserDataCreateAPISSOUserDataТак

Відповідь

Повертає: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Параметри

НазваTypeОбов'язковоОпис
tenantIdstringТак
idstringТак
deleteCommentsbooleanНі
commentDeleteModestringНі

Відповідь

Повертає: DeleteSSOUserAPIResponse


getSSOUserByEmail Internal Link


Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
emailstringТак

Відповідь

Повертає: GetSSOUserByEmailAPIResponse


getSSOUserById Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetSSOUserByIdAPIResponse

getSSOUsers Internal Link


Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetSSOUsers200Response


patchSSOUser Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
updateAPISSOUserDataUpdateAPISSOUserDataТак
updateCommentsbooleanНі

Відповідь

Повертає: PatchSSOUserAPIResponse


putSSOUser Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
updateAPISSOUserDataUpdateAPISSOUserDataТак
updateCommentsbooleanНі

Відповідь

Повертає: PutSSOUserAPIResponse

Приклад

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

createSubscription Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createAPIUserSubscriptionDataCreateAPIUserSubscriptionDataТак

Відповідь

Повертає: CreateSubscriptionAPIResponse

Приклад

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

deleteSubscription Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак
userIdstringНі

Відповідь

Повертає: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
userIdstringНі

Відповідь

Повертає: GetSubscriptionsAPIResponse

Приклад

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

updateSubscription Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionDataТак
userIdstringНі

Відповідь

Повертає: UpdateSubscriptionAPIResponse

Приклад

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

getTenantDailyUsages Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
yearNumbernumberНі
monthNumbernumberНі
dayNumbernumberНі
skipnumberНі

Відповідь

Повертає: GetTenantDailyUsages200Response

Приклад

Приклад getTenantDailyUsages
Copy Copy
1
2const tenantId: string = 'tenant_7a3c2e';
3const dailyUsages: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, 2026, 6, undefined, 0);
4

createTenantPackage Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createTenantPackageBodyCreateTenantPackageBodyТак

Відповідь

Повертає: CreateTenantPackage200Response

Приклад

Приклад createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_7890";
3const createTenantPackageBody: CreateTenantPackageBody = {
4 packageName: "Growth Plan",
5 maxSeats: 2500,
6 features: {
7 moderation: true,
8 analytics: true,
9 sso: { enabled: true, provider: "saml" }
10 },
11 billing: { interval: "monthly", priceCents: 19900 },
12 // продемонстровано необов'язковий параметр: notes не є обов'язковим, але вказано
13 notes: "Onboarding bundle with priority support"
14};
15const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
16

deleteTenantPackage Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const packageId: string = 'pkg-2026-06-15-001';
4const dryRun: boolean | undefined = undefined; // приклад необов'язкового прапорця (не потрібен для виконання функції)
5const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
6

getTenantPackage Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetTenantPackage200Response

Приклад

Приклад getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_4b8c2a9f';
3const packageId: string = 'pkg_7d3e1b5c';
4const includeMetadata: boolean | undefined = true;
5const packageResponse: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
6

getTenantPackages Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
skipnumberНі

Response

Повертає: GetTenantPackages200Response

Приклад

getTenantPackages Приклад
Copy Copy
1
2const tenantId: string = 'tenant_8421';
3const packagesWithSkip: GetTenantPackages200Response = await getTenantPackages(tenantId, 25);
4const packagesWithoutSkip: GetTenantPackages200Response = await getTenantPackages(tenantId);
5

replaceTenantPackage Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
replaceTenantPackageBodyReplaceTenantPackageBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад replaceTenantPackage
Copy Copy
1
2const tenantId: string = "fastcomments-tenant-114";
3const id: string = "pkg-enterprise-2026-06";
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 name: "EnterpriseModeration",
6 version: "2.4.7",
7 enabled: true,
8 apiStatus: { state: "active", lastUpdated: "2026-06-10T12:00:00Z" },
9 customConfigParameters: { maxCommentLength: 1200, allowImages: true }, // необов'язкові параметри налаштувань включені
10 voteStyle: { style: "updown" }
11};
12const result: FlagCommentPublic200Response = await replaceTenantPackage(tenantId, id, replaceTenantPackageBody);
13

updateTenantPackage Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
updateTenantPackageBodyUpdateTenantPackageBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a';
3const id: string = 'pkg_pro_2026';
4const updateTenantPackageBody: UpdateTenantPackageBody = {
5 name: 'Pro Plan',
6 monthlyPriceUsd: 49,
7 isActive: true,
8 features: ['moderation', 'analytics', 'sso'],
9 trialDays: 14 // необов'язковий параметр (демонстрація)
10};
11const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
12

createTenantUser Internal Link

Параметри

Ім'яТипОбов'язковоОпис
tenantIdstringТак
createTenantUserBodyCreateTenantUserBodyТак

Відповідь

Повертає: CreateTenantUser200Response

Приклад

Приклад createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_7f4a2b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "jane.doe@example.com",
5 firstName: "Jane",
6 lastName: "Doe",
7 role: "commenter",
8 approved: true,
9 displayName: "Jane D." // необов'язково: вказати зручне ім'я
10};
11const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
12console.log(result);
13

deleteTenantUser Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак
deleteCommentsstringНі
commentDeleteModestringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання deleteTenantUser
Copy Copy
1
2const tenantId: string = "tenant_8f3a2b1c4d";
3const id: string = "user_62a4f9e0b7";
4const deleteComments: string = "true";
5const commentDeleteMode: string = "permanent";
6const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
7

getTenantUser Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetTenantUser200Response

Приклад

Приклад getTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_ab12c3';
3const id: string = 'user_9f8e7d';
4const response: GetTenantUser200Response = await getTenantUser(tenantId, id);
5console.log(response);
6

getTenantUsers Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetTenantUsers200Response

Приклад

Приклад getTenantUsers
Copy Copy
1
2const tenantId: string = 'tenant_7b8f3a2c-9e4d-4f1a';
3const skip: number = 50;
4const usersResponseDefault: GetTenantUsers200Response = await getTenantUsers(tenantId);
5const usersResponsePaged: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
6

replaceTenantUser Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
replaceTenantUserBodyReplaceTenantUserBodyТак
updateCommentsstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад replaceTenantUser
Copy Copy
1
2const tenantId: string = "f3b9a2d1-8b4e-4c6a-9f2b-1d5c4e6a7b8c";
3const id: string = "user_92f7c3b1";
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 externalId: "auth0|1234567890",
6 email: "jane.doe@company.com",
7 displayName: "Jane Doe",
8 roles: ["moderator"],
9 metadata: { department: "support" }
10};
11const updateComments: string = "reassign-comments-to-new-user";
12const response: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
13

Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
idstringТак
redirectURLstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад sendLoginLink
Copy Copy
1
2const tenantId: string = "tenant_0a1b2c3d";
3const id: string = "user_984321";
4const redirectURL: string = "https://app.acme-corp.com/welcome";
5const responseWithRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
6const responseWithoutRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id);
7

updateTenantUser Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updateTenantUserBodyUpdateTenantUserBodyТак
updateCommentsstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateTenantUser
Copy Copy
1
2const tenantId: string = 'acme-corp';
3const userId: string = 'u_72b9f4';
4const updateTenantUserBody: UpdateTenantUserBody = {
5 email: 'jane.doe@acme.com',
6 displayName: 'Jane Doe',
7 roles: ['moderator'],
8 suspended: false
9};
10const updateComments: string = 'Promoted to moderator after review of activity and community feedback';
11const result: FlagCommentPublic200Response = await updateTenantUser(tenantId, userId, updateTenantUserBody, updateComments);
12

createTenant Internal Link


Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
createTenantBodyCreateTenantBodyТак

Відповідь

Повертає: CreateTenant200Response

Приклад

Приклад createTenant
Copy Copy
1
2const tenantId: string = 'acme-news-01';
3const createTenantBody: CreateTenantBody = {
4 name: 'Acme News',
5 domainConfiguration: { primaryDomain: 'news.acme.com', redirectHttps: true } as APIDomainConfiguration,
6 importedSites: [{ siteId: 'site-92', url: 'https://news.acme.com' }] as ImportedSiteType[],
7 billingInfo: { planId: 'business_monthly', contactEmail: 'billing@acme.com' } as BillingInfo
8};
9const result: CreateTenant200Response = await createTenant(tenantId, createTenantBody);
10

deleteTenant Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
surestringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання deleteTenant
Copy Copy
1
2const tenantId: string = 'tenant_742b9c';
3const flagId: string = 'flag_1a2b3c';
4const resultWithoutSure: FlagCommentPublic200Response = await deleteTenant(tenantId, flagId);
5const sureConfirmation: string = 'confirmed';
6const resultWithSure: FlagCommentPublic200Response = await deleteTenant(tenantId, flagId, sureConfirmation);
7

getTenant Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetTenant200Response

Приклад

Приклад getTenant
Copy Copy
1
2const tenantId: string = 'fc_tenant_6b3e2a';
3const id: string = 'site_42f1';
4const tenantResponse: GetTenant200Response = await getTenant(tenantId, id);
5const tenant: APITenant | undefined = tenantResponse.tenant;
6const primaryDomain: APIDomainConfiguration | undefined = tenant?.domainConfiguration?.[0];
7

getTenants Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
metastringНі
skipnumberНі

Відповідь

Повертає: GetTenants200Response

Приклад

Приклад getTenants
Copy Copy
1
2const tenantId: string = "fcom-tenant-8b4f2a1c";
3const meta: string = "include=domains,billing&status=active";
4const skip: number = 20;
5const response: GetTenants200Response = await getTenants(tenantId, meta, skip);
6console.log(response);
7

updateTenant Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
updateTenantBodyUpdateTenantBodyТак

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад updateTenant
Copy Copy
1
2const tenantId: string = 'tenant_84f12';
3const id: string = 'flag_192b';
4const updateTenantBody: UpdateTenantBody = {
5 name: 'Acme Media',
6 billingInfo: { plan: 'enterprise', seats: 25, nextBillingDate: '2026-07-01' },
7 apiDomainConfiguration: { primaryDomain: 'comments.acme.com', additionalDomains: ['acme.com'] },
8 importedSites: [{ siteUrl: 'https://blog.acme.com', archived: false }], // необов'язково
9 commentSettings: { htmlRenderingMode: 'sanitized', deletionMode: 'soft' } // необов'язково
10} as UpdateTenantBody;
11const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
12

changeTicketState Internal Link


Параметри

NameTypeRequiredDescription
tenantIdstringТак
userIdstringТак
idstringТак
changeTicketStateBodyChangeTicketStateBodyТак

Відповідь

Повертає: ChangeTicketState200Response

Приклад

Приклад changeTicketState
Copy Copy
1
2const tenantId: string = 'tenant_8a7d3f4b';
3const userId: string = 'user_5d1a9b2c';
4const id: string = 'ticket_1024';
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: 'closed',
7 notifyParticipants: true, // продемонстровано необов'язковий параметр
8 comment: 'Resolved by support — follow-up not required.'
9};
10const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
11

createTicket Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
userIdstringТак
createTicketBodyCreateTicketBodyТак

Відповідь

Повертає: CreateTicket200Response

Приклад

Приклад createTicket
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp';
3const userId: string = 'moderator_jane';
4const createTicketBody: CreateTicketBody = {
5 subject: 'Mass spam reports on article 789',
6 description: 'Multiple identical spam comments posted under article 789. Needs moderation and bulk removal.',
7 priority: 'high',
8 contactEmail: 'jane@acme-corp.com',
9 metadata: { articleId: '789', reportedCount: 12 } // наведено необов'язкові метадані
10};
11const ticket: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
12

getTicket Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
userIdstringНі

Відповідь

Повертає: GetTicket200Response

Приклад

Приклад getTicket
Copy Copy
1
2const tenantId: string = 'acme-corp';
3const ticketId: string = 'TCKT-20250615-42';
4const userId: string = 'user_84b2';
5
6const ticketWithUser: GetTicket200Response = await getTicket(tenantId, ticketId, userId);
7const ticketWithoutUser: GetTicket200Response = await getTicket(tenantId, ticketId);
8
9console.log(ticketWithUser.id, ticketWithoutUser.id);
10

getTickets Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
userIdstringНі
statenumberНі
skipnumberНі
limitnumberНі

Відповідь

Повертає: GetTickets200Response

Приклад

Приклад getTickets
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const userId: string = 'user_87b3';
4const state: number = 2;
5const skip: number = 0;
6const limit: number = 50;
7
8const tickets: GetTickets200Response = await getTickets(tenantId, userId, state, skip, limit);
9

getTranslations Internal Link


Параметри

НазваТипОбов'язковеОпис
namespacestringТак
componentstringТак
localestringНі
useFullTranslationIdsbooleanНі

Відповідь

Повертає: GetTranslations200Response

Приклад

Приклад використання getTranslations
Copy Copy
1
2const namespaceName: string = 'site-ui';
3const componentName: string = 'comment-widget';
4const locale: string = 'fr-FR';
5const useFullTranslationIds: boolean = true;
6const translationsWithLocale: GetTranslations200Response = await getTranslations(namespaceName, componentName, locale, useFullTranslationIds);
7const translationsDefault: GetTranslations200Response = await getTranslations(namespaceName, componentName);
8

uploadImage Internal Link


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

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
fileBlobТак
sizePresetSizePresetНі
urlIdstringНі

Відповідь

Повертає: UploadImageResponse


getUserBadgeProgressById Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetUserBadgeProgressById200Response

Приклад

Приклад getUserBadgeProgressById
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-241';
3const badgeId: string = 'user-78b3d-badge-3';
4const response: GetUserBadgeProgressById200Response = await getUserBadgeProgressById(tenantId, badgeId);
5const progress: UserBadgeProgress | undefined = (response as unknown as { progress?: UserBadgeProgress }).progress;
6const percentComplete: number | undefined = progress?.percentage;
7console.log('Badge progress percent complete:', percentComplete);
8

getUserBadgeProgressByUserId Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
userIdstringТак

Відповідь

Повертає: GetUserBadgeProgressById200Response

Приклад

Приклад getUserBadgeProgressByUserId
Copy Copy
1
2const tenantId: string = 'acme-inc-tenant-01';
3const userId: string = 'user_73c9b2';
4const progress: GetUserBadgeProgressById200Response = await getUserBadgeProgressByUserId(tenantId, userId);
5
6async function maybeFetchProgress(tenant: string, user?: string): Promise<GetUserBadgeProgressById200Response | null> {
7 if (!user) return null;
8 return await getUserBadgeProgressByUserId(tenant, user);
9}
10
11const optionalResult: GetUserBadgeProgressById200Response | null = await maybeFetchProgress(tenantId, userId);
12

getUserBadgeProgressList Internal Link


Параметри

НазваТипОбов'язковеОпис
tenantIdstringТак
userIdstringНі
limitnumberНі
skipnumberНі

Відповідь

Повертає: GetUserBadgeProgressList200Response

Приклад

Приклад getUserBadgeProgressList
Copy Copy
1
2const tenantId: string = 'tenant_4f3a2b9c';
3const userId: string = 'user_7721d';
4const limit: number = 20;
5const skip: number = 0;
6const result: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId, userId, limit, skip);
7

createUserBadge Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
createUserBadgeParamsCreateUserBadgeParamsТак

Відповідь

Повертає: CreateUserBadge200Response

Приклад

Приклад використання createUserBadge
Copy Copy
1
2const tenantId: string = "tenant_7f4b2a";
3const createUserBadgeParams: CreateUserBadgeParams = {
4 code: "top_contributor",
5 title: "Top Contributor",
6 description: "Awarded for 100 high-quality comments",
7 iconUrl: "https://cdn.fastcomments.com/badges/top_contributor.svg",
8 isActive: true,
9 criteria: { commentsRequired: 100 },
10 customConfig: { displayOnProfile: true } // демонструється необов'язковий параметр
11};
12const result: CreateUserBadge200Response = await createUserBadge(tenantId, createUserBadgeParams);
13

deleteUserBadge Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: UpdateUserBadge200Response

Приклад

Приклад deleteUserBadge
Copy Copy
1
2const tenantId: string = "tenant_8b3f2c7a";
3const badgeIdOptional: string | undefined = Math.random() > 0.5 ? "badge_4f9a21" : undefined;
4const id: string = badgeIdOptional ?? "badge_backup_01";
5const result: UpdateUserBadge200Response = await deleteUserBadge(tenantId, id);
6

getUserBadge Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetUserBadge200Response

Приклад

Приклад getUserBadge
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_6b8f2a1c';
4 const id: string = 'badge_9f3d4b2a';
5 const response: GetUserBadge200Response = await getUserBadge(tenantId, id);
6 const badge: UserBadge | undefined = response.userBadge;
7 const badgeName: string | undefined = badge?.name;
8 console.log('Retrieved badge name:', badgeName);
9})();
10

getUserBadges Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
userIdstringNo
badgeIdstringNo
typenumberNo
displayedOnCommentsbooleanNo
limitnumberNo
skipnumberNo

Відповідь

Повертає: GetUserBadges200Response

Приклад

Приклад getUserBadges
Copy Copy
1
2const tenantId: string = 'tenant_7f9a12';
3const userId: string = 'user_42b7';
4const badgeId: string = 'badge_top_contributor';
5const type: number = 2;
6const displayedOnComments: boolean = true;
7const limit: number = 25;
8const skip: number = 0;
9const badges: GetUserBadges200Response = await getUserBadges(tenantId, userId, badgeId, type, displayedOnComments, limit, skip);
10

updateUserBadge Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
idstringТак
updateUserBadgeParamsUpdateUserBadgeParamsТак

Відповідь

Повертає: UpdateUserBadge200Response

Приклад

updateUserBadge Приклад
Copy Copy
1
2const tenantId: string = "tenant_9a8b7c";
3const id: string = "badge_a1b2c3";
4const updateUserBadgeParams: UpdateUserBadgeParams = {
5 title: "Community Helper",
6 description: "Awarded for providing 50 helpful answers",
7 iconUrl: "https://cdn.fastcomments.com/badges/community-helper.png",
8 isActive: true,
9 expiryDate: undefined
10};
11const result: UpdateUserBadge200Response = await updateUserBadge(tenantId, id, updateUserBadgeParams);
12

getUserNotificationCount Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
ssostringНі

Відповідь

Повертає: GetUserNotificationCount200Response

Приклад

Приклад getUserNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_payload.signature';
4const notificationCountNoSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId);
5const notificationCountWithSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId, ssoToken);
6

getUserNotifications Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
urlIdstringNo
pageSizenumberNo
afterIdstringNo
includeContextbooleanNo
afterCreatedAtnumberNo
unreadOnlybooleanNo
dmOnlybooleanNo
noDmbooleanNo
includeTranslationsbooleanNo
includeTenantNotificationsbooleanNo
ssostringNo

Відповідь

Повертає: GetUserNotifications200Response

Приклад

Приклад getUserNotifications
Copy Copy
1
2const tenantId: string = "tenant_8271";
3const urlId: string = "https://www.news-site.com/articles/2026/06/15/ai-updates";
4const pageSize: number = 25;
5const afterId: string = "notif_abc123";
6const includeContext: boolean = true;
7const afterCreatedAt: number = Date.now() - 86_400_000;
8const unreadOnly: boolean = true;
9const dmOnly: boolean = false;
10const noDm: boolean = false;
11const includeTranslations: boolean = true;
12const includeTenantNotifications: boolean = true;
13const sso: string = "sso_token_xyz_987";
14
15const notifications: GetUserNotifications200Response = await getUserNotifications(
16 tenantId,
17 urlId,
18 pageSize,
19 afterId,
20 includeContext,
21 afterCreatedAt,
22 unreadOnly,
23 dmOnly,
24 noDm,
25 includeTranslations,
26 includeTenantNotifications,
27 sso
28);
29

resetUserNotificationCount Internal Link

Параметри

Ім'яТипОбов'язковоОпис
tenantIdstringТак
ssostringНі

Відповідь

Повертає: ResetUserNotifications200Response

Приклад

Приклад resetUserNotificationCount
Copy Copy
1
2const tenantId: string = "tenant_8a3f2b6c";
3const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyX2QxMjM0IiwiaWF0IjoxNjI1MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
4const resetResponseWithSso: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId, ssoToken);
5const resetResponseWithoutSso: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId);
6

resetUserNotifications Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringYes
afterIdstringNo
afterCreatedAtnumberNo
unreadOnlybooleanNo
dmOnlybooleanNo
noDmbooleanNo
ssostringNo

Відповідь

Повертає: ResetUserNotifications200Response

Приклад

Приклад resetUserNotifications
Copy Copy
1
2const tenantId: string = "tenant_9b1f2";
3const afterId: string = "notification_0001";
4const afterCreatedAt: number = Date.now() - 60 * 60 * 1000; // годину тому
5const unreadOnly: boolean = true;
6const dmOnly: boolean = false;
7const noDm: boolean = false;
8const sso: string = "sso_session_7f2d";
9const result: ResetUserNotifications200Response = await resetUserNotifications(
10 tenantId,
11 afterId,
12 afterCreatedAt,
13 unreadOnly,
14 dmOnly,
15 noDm,
16 sso
17);
18

updateUserNotificationCommentSubscriptionStatus Internal Link


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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
notificationIdstringТак
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumТак
commentIdstringТак
ssostringНі

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

updateUserNotificationCommentSubscriptionStatus Приклад
Copy Copy
1
2const tenantId: string = 'f3a9c8b0-4d2e-4f8a-9c3b-1234567890ab';
3const notificationId: string = '62a1f4d2-8c7b-4e1a-aaa1-abcdef123456';
4const commentId: string = '7e4a2b1c-1234-5678-90ab-cdef12345678';
5const optedInOrOut: UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum = UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum.OptedIn;
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ssoPayload.signature';
7const response: UpdateUserNotificationStatus200Response = await updateUserNotificationCommentSubscriptionStatus(tenantId, notificationId, optedInOrOut, commentId, sso);
8

updateUserNotificationPageSubscriptionStatus Internal Link


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

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
urlstringТак
pageTitlestringТак
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnumТак
ssostringНі

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

Приклад updateUserNotificationPageSubscriptionStatus
Copy Copy
1
2const tenantId: string = 'tenant_7f3b2';
3const urlId: string = 'article_987';
4const url: string = 'https://www.news-site.com/articles/2026/pasta-guide';
5const pageTitle: string = 'The Definitive Guide to Cooking Pasta';
6const subscribedOrUnsubscribed: UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum = UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum.Subscribed;
7const sso: string = 'sso-token-62b9f1';
8const result: UpdateUserNotificationStatus200Response = await updateUserNotificationPageSubscriptionStatus(tenantId, urlId, url, pageTitle, subscribedOrUnsubscribed, sso);
9

updateUserNotificationStatus Internal Link

Параметри

NameTypeОбов'язковоОпис
tenantIdstringТак
notificationIdstringТак
newStatusUpdateUserNotificationStatusNewStatusEnumТак
ssostringНі

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

Приклад updateUserNotificationStatus
Copy Copy
1
2const tenantId: string = 'tenant_5f2a8b9c';
3const notificationId: string = 'notif_987654321';
4const newStatus: UpdateUserNotificationStatusNewStatusEnum = UpdateUserNotificationStatusNewStatusEnum.Read;
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.payload.signature';
6const result: UpdateUserNotificationStatus200Response = await updateUserNotificationStatus(tenantId, notificationId, newStatus, sso);
7

getUserPresenceStatuses Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdWSstringТак
userIdsstringТак

Відповідь

Повертає: GetUserPresenceStatuses200Response

Приклад

Приклад getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlIdWS: string = 'wss://comments.fastsite.com/ws/tenant_42';
4const userIds: string = 'user_9012,user_3478';
5const includePresenceMetadata: boolean | undefined = true; // приклад необов'язкового параметра
6const presenceStatuses: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

searchUsers Internal Link

Параметри

Ім'яТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак
usernameStartsWithstringНі
mentionGroupIdsArrayНі
ssostringНі
searchSectionSearchUsersSearchSectionEnumНі

Відповідь

Повертає: SearchUsers200Response

Приклад

Приклад searchUsers
Copy Copy
1
2const tenantId: string = 'tenant_7890';
3const urlId: string = 'news/2026-06-15-world-cup-final';
4const usernameStartsWith: string = 'mar';
5const mentionGroupIds: string[] = ['staff', 'trusted-commenters'];
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI0NTY3OCJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
7const searchSection: SearchUsersSearchSectionEnum = SearchUsersSearchSectionEnum.Commenters;
8const response: SearchUsers200Response = await searchUsers(tenantId, urlId, usernameStartsWith, mentionGroupIds, sso, searchSection);
9

getUser Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetUser200Response

Приклад

Приклад getUser
Copy Copy
1
2const tenantId: string = 'fastcomments_corp';
3const id: string = 'user_9f8b7c6d-5e4a-3b2c-1f0e-123456789abc';
4const response: GetUser200Response = await getUser(tenantId, id);
5const userEmail: string | undefined = response.user?.email;
6const displayName: string | undefined = response.user?.displayName
7

createVote Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
commentIdstringТак
directionCreateVoteDirectionEnumТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: VoteComment200Response

Приклад

Приклад createVote
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-001';
3const commentId: string = 'cmt_8f3b2a9d';
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.Up;
5const userId: string = 'user_5021';
6const anonUserId: string = 'anon_7a9c';
7
8const voteResponse: VoteComment200Response = await createVote(tenantId, commentId, direction, userId, anonUserId);
9

deleteVote Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
idstringТак
editKeystringНі

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

Приклад deleteVote
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_8421';
4 const id: string = 'vote_3f9b7c2a';
5 const editKey: string = 'edit_7Xk9LpQ';
6 const responseWithoutEdit: DeleteCommentVote200Response = await deleteVote(tenantId, id);
7 const responseWithEdit: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
8 console.log(responseWithoutEdit, responseWithEdit);
9})();
10

getVotes Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringТак
urlIdstringТак

Відповідь

Повертає: GetVotes200Response

Приклад

Приклад getVotes
Copy Copy
1
2const tenantId: string = 'tenant_7f8e91c2';
3const urlId: string = 'https://www.sportsdaily.com/news/2026/06/15/championship-game-recap';
4const votes: GetVotes200Response = await getVotes(tenantId, urlId);
5console.log(votes);
6

getVotesForUser Internal Link

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
urlIdstringТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: GetVotesForUser200Response

Приклад

Приклад getVotesForUser
Copy Copy
1
2const tenantId: string = 'tenant_9b8f7c6d';
3const urlId: string = 'articles/product-update-2026';
4const userId: string = 'user_c12345';
5const anonUserId: string = 'anon_7f4e2a';
6const votes: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId, anonUserId);
7


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

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

Внесок

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