FastComments.com

FastComments JavaScript/TypeScript SDK

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

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

Репозиторій

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


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

npm install fastcomments-sdk

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


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

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


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

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

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


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

ID трансляцій 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);
  }
}

Агрегувати Internal Link

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

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
aggregationRequest AggregationRequest Так
parentTenantId string Ні
includeStats boolean Ні

Відповідь

Повертає: AggregationResponse

Отримати журнали аудиту Internal Link

Параметри

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

Відповідь

Повертає: GetAuditLogs200Response

Приклад

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

Заблокувати через публічний коментар Internal Link

Параметри

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

Відповідь

Повертає: BlockFromCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: UnBlockCommentPublic200Response

Приклад

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

Перевірені коментарі на блокування Internal Link

Параметри

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

Відповідь

Повертає: CheckedCommentsForBlocked200Response

Приклад

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

Заблокувати користувача через коментар Internal Link

Параметри

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

Відповідь

Повертає: BlockFromCommentPublic200Response

Приклад

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

Створити публічний коментар Internal Link

Параметри

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

Відповідь

Повертає: CreateCommentPublic200Response

Приклад

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

Видалити коментар Internal Link

Параметри

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

Відповідь

Повертає: DeleteComment200Response

Приклад

Приклад deleteComment
Copy Copy
1
2const tenantId: string = 'tenant_7b3f2a';
3const commentId: string = 'cmt_8a1f4d2b';
4const contextUserId: string = 'user_102';
5const isLive: boolean = true;
6const result: DeleteComment200Response = await deleteComment(tenantId, commentId, contextUserId, isLive);
7

Видалити публічний коментар Internal Link

Параметри

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

Відповідь

Повертає: DeleteCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

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

Позначити коментар Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: FlagComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetComment200Response

Приклад

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

Отримати коментарі Internal Link

Параметри

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

Відповідь

Повертає: GetComments200Response

Приклад

Приклад getComments
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // page
6 20, // limit
7 0, // skip
8 true, // asTree
9 1, // skipChildren
10 3, // limitChildren
11 4, // maxTreeDepth
12 'articles/2026/new-product-launch', // urlId
13 'user_7890', // userId
14 'anon_4f3b2', // anonUserId
15 undefined, // contextUserId
16 '#launch', // hashTag
17 undefined // parentId
18);
19

Отримати публічні коментарі Internal Link

req tenantId urlId

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
urlId string Так
page number Ні
direction SortDirections Ні
sso string Ні
skip number Ні
skipChildren number Ні
limit number Ні
limitChildren number Ні
countChildren boolean Ні
fetchPageForCommentId string Ні
includeConfig boolean Ні
countAll boolean Ні
includei10n boolean Ні
locale string Ні
modules string Ні
isCrawler boolean Ні
includeNotificationCount boolean Ні
asTree boolean Ні
maxTreeDepth number Ні
useFullTranslationIds boolean Ні
parentId string Ні
searchText string Ні
hashTags Array Ні
userId string Ні
customConfigStr string Ні
afterCommentId string Ні
beforeCommentId string Ні

Відповідь

Повертає: GetCommentsPublic200Response

Приклад

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

Отримати текст коментаря Internal Link

Параметри

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

Відповідь

Повертає: GetCommentText200Response

Приклад

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

Отримати імена користувачів, що голосували за коментар Internal Link

Параметри

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

Відповідь

Повертає: GetCommentVoteUserNames200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: LockComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: PinComment200Response

Приклад

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

Зберегти коментар Internal Link


Параметри

Name Type Required Description
tenantId string Так
createCommentParams CreateCommentParams Так
isLive boolean Ні
doSpamCheck boolean Ні
sendEmails boolean Ні
populateNotifications boolean Ні

Відповідь

Повертає: SaveComment200Response

Приклад

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

Масове збереження коментарів Internal Link


Параметри

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

Відповідь

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

Приклад

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

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

Параметри

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

Відповідь

Повертає: SetCommentText200Response

Приклад

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

Розблокувати користувача через коментар Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так
unBlockFromCommentParams UnBlockFromCommentParams Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: UnBlockCommentPublic200Response

Приклад

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

Зняти позначку з коментаря Internal Link

Параметри

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

Відповідь

Повертає: FlagComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: LockComment200Response

Приклад

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

Відкріпити коментар Internal Link

Параметри

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

Відповідь

Повертає: PinComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: VoteComment200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: AddDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: DeleteDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: GetDomainConfig200Response

Отримати конфігурації доменів Internal Link

Параметри

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

Відповідь

Повертає: GetDomainConfigs200Response

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


Параметри

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

Відповідь

Повертає: GetDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: GetDomainConfig200Response


Створити шаблон електронного листа Internal Link

Параметри

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

Відповідь

Повертає: CreateEmailTemplate200Response

Приклад

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

Видалити шаблон електронного листа Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Видалити помилку рендерингу шаблону листа Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати шаблон електронного листа Internal Link

Параметри

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

Відповідь

Повертає: GetEmailTemplate200Response

Приклад

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

Отримати визначення шаблонів листів Internal Link

Параметри

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

Відповідь

Повертає: GetEmailTemplateDefinitions200Response

Приклад

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

Отримати помилки рендерингу шаблонів листів Internal Link

Параметри

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

Відповідь

Повертає: GetEmailTemplateRenderErrors200Response

Приклад

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

Отримати шаблони електронних листів Internal Link

Параметри

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

Відповідь

Повертає: GetEmailTemplates200Response

Приклад

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

Згенерувати шаблон електронного листа Internal Link

Параметри

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

Відповідь

Повертає: RenderEmailTemplate200Response

Приклад

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

Оновити шаблон електронного листа Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати журнал подій Internal Link

req tenantId urlId userIdWS

Параметри

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

Відповідь

Повертає: GetEventLog200Response

Приклад

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

Отримати глобальний журнал подій Internal Link

req tenantId urlId userIdWS

Параметри

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

Відповідь

Повертає: GetEventLog200Response

Приклад

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

Створити запис стрічки Internal Link

Параметри

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

Відповідь

Повертає: CreateFeedPost200Response

Приклад

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

Створити публічний запис стрічки Internal Link

Параметри

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

Відповідь

Повертає: CreateFeedPostPublic200Response

Приклад

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

Видалити публічний запис стрічки Internal Link

Параметри

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

Відповідь

Повертає: DeleteFeedPostPublic200Response

Приклад

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

Отримати записи стрічки Internal Link

req tenantId afterId

Параметри

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

Відповідь

Повертає: GetFeedPosts200Response

Приклад

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

Отримати публічні записи стрічки Internal Link

req tenantId afterId

Параметри

Name Type Required Description
tenantId string Так
afterId string Ні
limit number Ні
tags Array Ні
sso string Ні
isCrawler boolean Ні
includeUserInfo boolean Ні

Відповідь

Повертає: GetFeedPostsPublic200Response

Приклад

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

Отримати статистику записів стрічки Internal Link

Параметри

Name Type Required Description
tenantId string Так
postIds Array Так
sso string Ні

Відповідь

Повертає: GetFeedPostsStats200Response

Приклад

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

Отримати публічні реакції користувачів Internal Link

Параметри

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

Відповідь

Повертає: GetUserReactsPublic200Response

Приклад

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

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

Параметри

Name Type Required Description
tenantId string Так
postId string Так
reactBodyParams ReactBodyParams Так
isUndo boolean Ні
broadcastId string Ні
sso string Ні

Відповідь

Повертає: ReactFeedPostPublic200Response

Приклад

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

Оновити запис стрічки Internal Link


Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Оновити публічний запис стрічки Internal Link

Параметри

Name Type Required Description
tenantId string Так
postId string Так
updateFeedPostParams UpdateFeedPostParams Так
broadcastId string Ні
sso string Ні

Відповідь

Повертає: CreateFeedPostPublic200Response

Приклад

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

Позначити публічний коментар Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Додати хештег Internal Link

Параметри

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

Відповідь

Повертає: AddHashTag200Response

Приклад

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

Масове додавання хештегів Internal Link

Параметри

Name Type Required Description
tenantId string Ні
bulkCreateHashTagsBody BulkCreateHashTagsBody Ні

Відповідь

Повертає: AddHashTagsBulk200Response

Приклад

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

Видалити хештег Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати хештеги Internal Link

Параметри

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

Відповідь

Повертає: GetHashTags200Response

Приклад

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

Частково оновити хештег Internal Link

Параметри

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

Відповідь

Повертає: PatchHashTag200Response

Приклад

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

Створити модератора Internal Link

Параметри

Name Type Required Description
tenantId string Так
createModeratorBody CreateModeratorBody Так

Відповідь

Повертає: CreateModerator200Response

Приклад

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

Видалити модератора Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати модератора Internal Link


Параметри

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

Відповідь

Повертає: GetModerator200Response

Приклад

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

Отримати модераторів Internal Link

Параметри

Name Type Required Description
tenantId string Так
skip number Ні

Відповідь

Повертає: GetModerators200Response

Приклад

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

Надіслати запрошення Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Видалити лічильник сповіщень Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати кешований лічильник сповіщень Internal Link

Параметри

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

Відповідь

Повертає: GetCachedNotificationCount200Response

Приклад

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

Отримати лічильник сповіщень Internal Link

Параметри

Name Type Required Description
tenantId string Так
userId string Ні
urlId string Ні
fromCommentId string Ні
viewed boolean Ні
type string Ні

Відповідь

Повертає: GetNotificationCount200Response

Приклад

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

Отримати сповіщення Internal Link

Параметри

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

Відповідь

Повертає: GetNotifications200Response

Приклад

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

Оновити сповіщення Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Додати сторінку Internal Link

Параметри

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

Відповідь

Повертає: AddPageAPIResponse


Видалити сторінку Internal Link


Параметри

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

Відповідь

Повертає: DeletePageAPIResponse


Отримати сторінку за URL ID Internal Link

Параметри

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

Відповідь

Повертає: GetPageByURLIdAPIResponse


Отримати сторінки Internal Link

Параметри

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

Відповідь

Повертає: GetPagesAPIResponse

Частково оновити сторінку Internal Link


Параметри

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

Відповідь

Повертає: PatchPageAPIResponse


Видалити невиконану подію вебхука Internal Link

Параметри

Назва Type Required Опис
tenantId string Так
id string Так

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetPendingWebhookEventCount200Response

Приклад

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

Отримати невиконані події вебхука Internal Link

Параметри

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

Відповідь

Повертає: GetPendingWebhookEvents200Response

Приклад

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

Створити конфігурацію запитання Internal Link

Параметри

Назва Type Required Опис
tenantId string Так
createQuestionConfigBody CreateQuestionConfigBody Так

Відповідь

Повертає: CreateQuestionConfig200Response

Приклад

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

Видалити конфігурацію запитання Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати конфігурацію запитання Internal Link

Параметри

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

Відповідь

Повертає: GetQuestionConfig200Response

Приклад

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

Отримати конфігурації запитань Internal Link


Параметри

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

Відповідь

Повертає: GetQuestionConfigs200Response

Приклад

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

Оновити конфігурацію запитання Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateQuestionResult200Response

Приклад

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

Видалити результат запитання Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати результат запитання Internal Link

Параметри

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

Відповідь

Повертає: GetQuestionResult200Response

Приклад

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

Отримати результати запитань Internal Link

Параметри

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

Відповідь

Повертає: GetQuestionResults200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Агрегувати результати запитань Internal Link

Параметри

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

Відповідь

Повертає: AggregateQuestionResults200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: BulkAggregateQuestionResults200Response

Приклад

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

Комбінувати коментарі з результатами запитань Internal Link

Параметри

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

Відповідь

Повертає: CombineCommentsWithQuestionResults200Response

Приклад

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

Додати користувача SSO Internal Link

Параметри

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

Відповідь

Повертає: AddSSOUserAPIResponse


Видалити користувача SSO Internal Link

Параметри

Назва Type Обов'язково Опис
tenantId string Так
id string Так
deleteComments boolean Ні
commentDeleteMode string Ні

Відповідь

Повертає: DeleteSSOUserAPIResponse


Отримати користувача SSO за електронною поштою Internal Link


Параметри

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

Відповідь

Повертає: GetSSOUserByEmailAPIResponse


Отримати користувача SSO за ID Internal Link

Параметри

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

Відповідь

Повертає: GetSSOUserByIdAPIResponse

Отримати користувачів SSO Internal Link


Параметри

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

Відповідь

Повертає: GetSSOUsers200Response


Частково оновити користувача SSO Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так
updateAPISSOUserData UpdateAPISSOUserData Так
updateComments boolean Ні

Відповідь

Повертає: PatchSSOUserAPIResponse


Замінити користувача SSO Internal Link

Параметри

Назва Тип Обов'язково Опис
tenantId string Так
id string Так
updateAPISSOUserData UpdateAPISSOUserData Так
updateComments boolean Ні

Відповідь

Повертає: PutSSOUserAPIResponse


Створити підписку Internal Link

Параметри

Name Type Required Description
tenantId string Так
createAPIUserSubscriptionData CreateAPIUserSubscriptionData Так

Відповідь

Повертає: CreateSubscriptionAPIResponse

Приклад

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

Видалити підписку Internal Link

Параметри

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

Відповідь

Повертає: DeleteSubscriptionAPIResponse


Отримати підписки Internal Link

Параметри

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

Відповідь

Повертає: GetSubscriptionsAPIResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: UpdateSubscriptionAPIResponse

Приклад

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

Отримати щоденне використання орендаря Internal Link

Параметри

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

Відповідь

Повертає: GetTenantDailyUsages200Response

Приклад

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

Створити пакет орендаря Internal Link

Параметри

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

Відповідь

Повертає: CreateTenantPackage200Response

Приклад

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

Видалити пакет орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати пакет орендаря Internal Link

Параметри

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

Відповідь

Повертає: GetTenantPackage200Response

Приклад

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

Отримати пакети орендаря Internal Link

Параметри

Name Type Required Description
tenantId string Так
skip number Ні

Відповідь

Повертає: GetTenantPackages200Response

Приклад

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

Замінити пакет орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Оновити пакет орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Створити користувача орендаря Internal Link


Parameters

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

Відповідь

Повертає: CreateTenantUser200Response

Приклад

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

Видалити користувача орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати користувача орендаря Internal Link

Параметри

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

Відповідь

Повертає: GetTenantUser200Response

Приклад

Приклад getTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_fc5a9b2c';
3const userId: string = 'user_0a12b3';
4const result: GetTenantUser200Response = await getTenantUser(tenantId, userId);
5const user: User | undefined = (result as any).user; // accessing payload
6const userEmail: string | undefined = user?.email;
7console.log('Fetched user email:', userEmail);
8

Отримати користувачів орендаря Internal Link

Параметри

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

Відповідь

Повертає: GetTenantUsers200Response

Приклад

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

Замінити користувача орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Оновити користувача орендаря Internal Link

Параметри

Name Type Required Description
tenantId string Так
id string Так
updateTenantUserBody UpdateTenantUserBody Так
updateComments string Ні

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Створити орендаря Internal Link

Параметри

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

Відповідь

Повертає: CreateTenant200Response

Приклад

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

Видалити орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати орендаря Internal Link

Параметри

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

Відповідь

Повертає: GetTenant200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTenants200Response

Приклад

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

Оновити орендаря Internal Link

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Змінити стан тікету Internal Link

Параметри

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

Відповідь

Повертає: ChangeTicketState200Response

Приклад

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

Створити тікет Internal Link

Параметри

Name Type Required Description
tenantId string Yes
userId string Yes
createTicketBody CreateTicketBody Yes

Відповідь

Повертає: CreateTicket200Response

Приклад

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

Отримати тікет Internal Link

Параметри

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

Відповідь

Повертає: GetTicket200Response

Приклад

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

Отримати тікети Internal Link

Параметри

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

Відповідь

Повертає: GetTickets200Response

Приклад

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

Завантажити зображення Internal Link


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

Параметри

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

Відповідь

Повертає: UploadImageResponse


Отримати прогрес бейджа користувача за ID Internal Link

Параметри

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

Відповідь

Повертає: GetUserBadgeProgressById200Response

Приклад

Приклад getUserBadgeProgressById
Copy Copy
1
2const optionalTenantSuffix: string | undefined = undefined;
3const tenantId: string = `5f8d0d55-1234-4ab1-9e2a-3f2b5c6d7e8f${optionalTenantSuffix ?? ''}`;
4const id: string = '3a2b1c4d-5678-4ef0-9abc-def123456789';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressById(tenantId, id);
6

Отримати прогрес бейджа за ID користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUserBadgeProgressById200Response

Приклад

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

Отримати список прогресу бейджів користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUserBadgeProgressList200Response

Приклад

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

Створити бейдж користувача Internal Link

Параметри

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

Відповідь

Повертає: CreateUserBadge200Response

Приклад

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

Видалити бейдж користувача Internal Link

Параметри

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

Відповідь

Повертає: UpdateUserBadge200Response

Приклад

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

Отримати бейдж користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUserBadge200Response

Приклад

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

Отримати бейджі користувача Internal Link

Параметри

Name Type Required Description
tenantId string Так
userId string Ні
badgeId string Ні
type number Ні
displayedOnComments boolean Ні
limit number Ні
skip number Ні

Відповідь

Повертає: GetUserBadges200Response

Приклад

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

Оновити бейдж користувача Internal Link

Параметри

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

Відповідь

Повертає: UpdateUserBadge200Response

Приклад

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

Отримати кількість сповіщень користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUserNotificationCount200Response

Приклад

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

Отримати сповіщення користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUserNotifications200Response

Приклад

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

Скинути лічильник сповіщень користувача Internal Link

Параметри

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

Відповідь

Повертає: ResetUserNotifications200Response

Приклад

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

Скинути сповіщення користувача Internal Link

Параметри

Name Type Required Description
tenantId string Так
afterId string Ні
afterCreatedAt number Ні
unreadOnly boolean Ні
dmOnly boolean Ні
noDm boolean Ні
sso string Ні

Відповідь

Повертає: ResetUserNotifications200Response

Приклад

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

Оновити статус підписки користувача на коментарі Internal Link


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

Параметри

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

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

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

Оновити статус підписки користувача на сторінки Internal Link

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

Параметри

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

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

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

Оновити статус сповіщення користувача Internal Link

Параметри

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

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

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

Отримати статуси присутності користувачів Internal Link

Параметри

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

Відповідь

Повертає: GetUserPresenceStatuses200Response

Приклад

Приклад getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_7f3a2b';
3const urlIdWS: string = 'articles/2026/03/25/fastcomments-integration';
4const maybeUserIds: string | undefined = 'user_123,user_456'; // optional source
5const userIds: string = maybeUserIds ?? 'user_123';
6const presence: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

Шукати користувачів Internal Link

Параметри

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

Відповідь

Повертає: SearchUsers200Response

Приклад

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

Отримати користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUser200Response

Приклад

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

Створити голос Internal Link

Параметри

Назва Тип Обов'язковий Опис
tenantId string Так
commentId string Так
direction CreateVoteDirectionEnum Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: VoteComment200Response

Приклад

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

Видалити голос Internal Link

Параметри

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

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

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

Отримати голоси Internal Link

Параметри

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

Відповідь

Повертає: GetVotes200Response

Приклад

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

Отримати голоси для користувача Internal Link

Параметри

Name Type Required Description
tenantId string Так
urlId string Так
userId string Ні
anonUserId string Ні

Відповідь

Повертає: GetVotesForUser200Response

Приклад

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


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

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

Внесок

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