FastComments.com

FastComments SDK для JavaScript/TypeScript


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

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

Репозиторій

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


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

npm

npm install fastcomments-sdk

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


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

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


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

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

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


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

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

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

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

const publicApi = new PublicApi();

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

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

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

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

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

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

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

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

Прості SSO-токени мають генеруватися на сервері та передаватися клієнту:

// Серверний код (Node.js/бекенд)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

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

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

const ssoToken = sso.createToken();

// Відправте ssoToken у ваш клієнтський код
// Клієнтський код потім може використати цей токен з браузерним SDK

Безпечне SSO (серверна сторона, рекомендовано)

Безпечне SSO слід реалізовувати на сервері — воно забезпечує кращий рівень безпеки:

// Серверний код (Node.js/бекенд)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

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

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

const ssoConfig = sso.prepareToSend();

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

// Або відправте ssoConfig клієнту для використання в браузері

Використання SSO з браузера (з токеном, згенерованим на сервері)

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

// Отримати SSO токен з вашого серверного endpoint
const ssoToken = await fetch('/api/sso-token').then(r => r.json());

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

SSO зі створенням коментаря

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

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

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

Типові сценарії використання Internal Link

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Підписатися на живі події для сторінки
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (отримайте це з відповіді getComments)
  (event: LiveEvent) => {
    console.log('Live event received:', event);
    
    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Оновіть ваш інтерфейс користувача новим коментарем
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Оновіть підрахунок голосів у вашому інтерфейсі
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }
    
    return true; // Поверніть true, якщо подію оброблено
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

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

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

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

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

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

// Підписка на персональну стрічку користувача
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);
    
    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Показати сповіщення у вашому інтерфейсі
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }
    
    return true;
  },
  (isConnected: boolean) => {
    console.log('User feed connection:', isConnected ? 'Connected' : 'Disconnected');
  }
);

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

Отримання userIdWS

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

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

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

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

Ідентифікатори трансляцій 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 тощо).

Параметри

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

Відповідь

Повертає: AggregationResponse

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

Параметри

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

Відповідь

Повертає: GetAuditLogs200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: BlockFromCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: UnBlockCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CheckedCommentsForBlocked200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: BlockFromCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: DeleteComment200Response

Приклад

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

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

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
editKeystringNo
ssostringNo

Відповідь

Повертає: 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

Параметри

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

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetComments200Response

Приклад

Приклад getComments
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // 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

Параметри

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

Відповідь

Повертає: GetCommentsPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetCommentText200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetCommentVoteUserNames200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: LockComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: PinComment200Response

Приклад

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

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


Параметри

NameTypeRequiredDescription
tenantIdstringТак
createCommentParamsCreateCommentParamsТак
isLivebooleanНі
doSpamCheckbooleanНі
sendEmailsbooleanНі
populateNotificationsbooleanНі

Відповідь

Повертає: SaveComment200Response

Приклад

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

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


Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
createCommentParamsArrayYes
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

Відповідь

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

Приклад

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

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

Параметри

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

Відповідь

Повертає: SetCommentText200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: UnBlockCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: LockComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: PinComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: VoteComment200Response

Приклад

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

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


Параметри

НазваТипОбов'язковоОпис
userIdstringНі
tenantIdstringНі
urlIdstringНі
pagenumberНі
directionSortDirectionsНі
lastGenDatenumberНі
repliesToUserIdstringНі
fetchPageForCommentIdstringНі
includei10nbooleanНі
useFullTranslationIdsbooleanНі
localestringНі
includeConfigbooleanНі
includeNotificationCountbooleanНі
countAllbooleanНі
ssostringНі

Відповідь

Повертає: GetCommentsForUserResponse

Приклад

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

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


Параметри

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

Відповідь

Повертає: AddDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: DeleteDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: GetDomainConfig200Response

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

Параметри

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

Відповідь

Повертає: GetDomainConfigs200Response

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


Параметри

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

Відповідь

Повертає: GetDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: GetDomainConfig200Response


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

Параметри

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

Відповідь

Повертає: CreateEmailTemplate200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetEmailTemplate200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetEmailTemplateDefinitions200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetEmailTemplateRenderErrors200Response

Приклад

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

Отримати шаблони електронної пошти Internal Link

Параметри

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

Відповідь

Повертає: 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

Параметри

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

Відповідь

Повертає: RenderEmailTemplate200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

req tenantId urlId userIdWS

Параметри

NameTypeRequiredDescription
tenantIdstringТак
urlIdstringТак
userIdWSstringТак
startTimenumberТак
endTimenumberТак

Відповідь

Повертає: GetEventLog200Response

Приклад

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

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

req tenantId urlId userIdWS

Параметри

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

Відповідь

Повертає: GetEventLog200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateFeedPost200Response

Приклад

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

Створити публічний допис у стрічці Internal Link

Параметри

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

Відповідь

Повертає: CreateFeedPostPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: DeleteFeedPostPublic200Response

Приклад

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

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

req tenantId afterId

Параметри

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

Відповідь

Повертає: GetFeedPosts200Response

Приклад

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

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

req tenantId afterId

Параметри

NameTypeRequiredDescription
tenantIdstringТак
afterIdstringНі
limitnumberНі
tagsArrayНі
ssostringНі
isCrawlerbooleanНі
includeUserInfobooleanНі

Відповідь

Повертає: GetFeedPostsPublic200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
postIdsArrayТак
ssostringНі

Відповідь

Повертає: GetFeedPostsStats200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetUserReactsPublic200Response

Приклад

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

Реагувати на публічний допис стрічки Internal Link

Параметри

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

Відповідь

Повертає: ReactFeedPostPublic200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: 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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
postIdstringТак
updateFeedPostParamsUpdateFeedPostParamsТак
broadcastIdstringНі
ssostringНі

Відповідь

Повертає: CreateFeedPostPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Отримати великий GIF Internal Link

Параметри

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

Відповідь

Повертає: GifGetLargeResponse

Приклад

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

Пошук GIF Internal Link

Параметри

НазваТипОбов'язковоОпис
tenantIdstringYes
searchstringYes
localestringNo
ratingstringNo
pagenumberNo

Відповідь

Повертає: GifSearchResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: GifSearchResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: AddHashTag200Response

Приклад

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

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

Параметри

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

Відповідь

Повертається: AddHashTagsBulk200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetHashTags200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: PatchHashTag200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateModerator200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: GetModerator200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetModerators200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetCachedNotificationCount200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
userIdstringНі
urlIdstringНі
fromCommentIdstringНі
viewedbooleanНі
typestringНі

Відповідь

Повертає: GetNotificationCount200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetNotifications200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: AddPageAPIResponse


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


Параметри

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

Відповідь

Повертає: DeletePageAPIResponse


Отримати сторінку за URL-ідентифікатором Internal Link

Параметри

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

Відповідь

Повертає: GetPageByURLIdAPIResponse


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

Параметри

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

Відповідь

Повертає: GetPagesAPIResponse

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


Параметри

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

Відповідь

Повертає: PatchPageAPIResponse


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


Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringNo
externalIdstringNo
eventTypestringNo
typestringNo
domainstringNo
attemptCountGTnumberNo

Відповідь

Повертає: 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

Параметри

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

Відповідь

Повертає: GetPendingWebhookEvents200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: CreateQuestionConfig200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetQuestionConfig200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: GetQuestionConfigs200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateQuestionResult200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetQuestionResult200Response

Приклад

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

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

Параметри

NameTypeОбов'язковийОпис
tenantIdstringТак
urlIdstringНі
userIdstringНі
startDatestringНі
questionIdstringНі
questionIdsstringНі
skipnumberНі

Відповідь

Повертає: GetQuestionResults200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: AggregateQuestionResults200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: BulkAggregateQuestionResults200Response

Приклад

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

Поєднати коментарі з результатами запитань Internal Link

Параметри

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

Відповідь

Повертає: CombineCommentsWithQuestionResults200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: AddSSOUserAPIResponse


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

Параметри

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

Відповідь

Повертає: DeleteSSOUserAPIResponse


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


Параметри

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

Відповідь

Повертає: GetSSOUserByEmailAPIResponse


Отримати SSO-користувача за ідентифікатором Internal Link

Параметри

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

Відповідь

Повертає: GetSSOUserByIdAPIResponse

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


Параметри

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

Відповідь

Повертає: GetSSOUsers200Response


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

Параметри

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

Відповідь

Повертає: PatchSSOUserAPIResponse


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

Параметри

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

Відповідь

Повертає: PutSSOUserAPIResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateSubscriptionAPIResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: DeleteSubscriptionAPIResponse


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


Параметри

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

Відповідь

Повертає: GetSubscriptionsAPIResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: UpdateSubscriptionAPIResponse

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTenantDailyUsages200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateTenantPackage200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTenantPackage200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
skipnumberНі

Відповідь

Повертає: GetTenantPackages200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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


Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringYes
createTenantUserBodyCreateTenantUserBodyYes

Відповідь

Повертає: CreateTenantUser200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTenantUser200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTenantUsers200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
redirectURLstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак
updateTenantUserBodyUpdateTenantUserBodyТак
updateCommentsstringНі

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
createTenantBodyCreateTenantBodyТак

Відповідь

Повертає: CreateTenant200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

Приклад використання deleteTenant
Copy Copy
1
2const tenantId: string = 'tenant_42c9f1';
3const id: string = 'flag_9a7b3c';
4const sure: string = 'confirm-delete';
5const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
6

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

Параметри

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

Відповідь

Повертає: GetTenant200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTenants200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: FlagCommentPublic200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: ChangeTicketState200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: CreateTicket200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTicket200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetTickets200Response

Приклад

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

Отримати переклади Internal Link

Параметри

NameTypeRequiredDescription
namespacestringТак
componentstringТак
localestringНі
useFullTranslationIdsbooleanНі

Відповідь

Повертає: GetTranslationsResponse

Приклад

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

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


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

Параметри

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

Відповідь

Повертає: UploadImageResponse


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

Параметри

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

Відповідь

Повертає: GetUserBadgeProgressById200Response

Приклад

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

Отримати прогрес значка користувача за ID користувача Internal Link

Параметри

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

Відповідь

Повертає: GetUserBadgeProgressById200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetUserBadgeProgressList200Response

Приклад

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

Створити значок користувача Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringТак
createUserBadgeParamsCreateUserBadgeParamsТак

Відповідь

Повертає: CreateUserBadge200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак

Відповідь

Повертає: UpdateUserBadge200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetUserBadge200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
userIdstringНі
badgeIdstringНі
typenumberНі
displayedOnCommentsbooleanНі
limitnumberНі
skipnumberНі

Відповідь

Повертає: GetUserBadges200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: UpdateUserBadge200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetUserNotificationCount200Response

Приклад

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

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

Параметри

НазваТипОбов'язковийОпис
tenantIdstringТак
pageSizenumberНі
afterIdstringНі
includeContextbooleanНі
afterCreatedAtnumberНі
unreadOnlybooleanНі
dmOnlybooleanНі
noDmbooleanНі
includeTranslationsbooleanНі
ssostringНі

Відповідь

Повертає: GetUserNotifications200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: ResetUserNotifications200Response

Приклад

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

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
afterIdstringНі
afterCreatedAtnumberНі
unreadOnlybooleanНі
dmOnlybooleanНі
noDmbooleanНі
ssostringНі

Відповідь

Повертає: ResetUserNotifications200Response

Приклад

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

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


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

Параметри

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

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

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

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

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

Параметри

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

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: UpdateUserNotificationStatus200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetUserPresenceStatuses200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: SearchUsers200Response

Приклад

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

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


Параметри

NameTypeRequiredDescription
tenantIdstringТак
idstringТак

Відповідь

Повертає: GetUser200Response

Приклад

Приклад getUser
Copy Copy
1
2const idSuffix: string | undefined = undefined;
3const tenantId: string = "acme-enterprises";
4const id: string = idSuffix ?? "user_98765";
5const response: GetUser200Response = await getUser({ tenantId, id });
6

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

Параметри

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

Відповідь

Повертає: VoteComment200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: DeleteCommentVote200Response

Приклад

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

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

Параметри

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

Відповідь

Повертає: GetVotes200Response

Приклад

Приклад getVotes
Copy Copy
1
2const tenantId: string = 'tenant-42c-eu';
3const urlId: string = 'article-7f9b';
4const includeMetadata: boolean | undefined = true;
5const votes: GetVotes200Response = await getVotes(tenantId, urlId);
6

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

Параметри

NameTypeRequiredDescription
tenantIdstringТак
urlIdstringТак
userIdstringНі
anonUserIdstringНі

Відповідь

Повертає: GetVotesForUser200Response

Приклад

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


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

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

Внесок

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