FastComments.com

FastComments SDK за JavaScript/TypeScript

Това е официалното JavaScript/TypeScript SDK за 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.

Прост SSO (само от страна на сървъра)

Прост SSO трябва да се генерира от страна на сървъра и да се изпрати на клиента:

// Серверен код (Node.js/backend)
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 към клиентския код
// Клиентският код може да използва този токен с browser SDK

Сигурен SSO (от страна на сървъра, препоръчително)

Сигурният SSO трябва да се имплементира от страна на сървъра и предлага по-добра сигурност:

// Серверен код (Node.js/backend)
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');
  }
);

// Затворете абонамента, когато приключите
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 тук. Идентификаторът трябва да бъде достатъчно уникален, за да не се появи два пъти в рамките на една браузър сесия.

import { v4 as uuidv4 } from 'uuid';

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

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

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

aggregate Internal Link

Агрегира документи чрез групиране (ако е предоставен groupBy) и прилагане на множество операции. Поддържат се различни операции (например sum, countDistinct, avg и т.н.).

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
aggregationRequestAggregationRequestДа
parentTenantIdstringНе
includeStatsbooleanНе

Отговор

Връща: Aggregate200Response

Пример

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

getAuditLogs Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
limitnumberНе
skipnumberНе
orderSORTDIRНе
afternumberНе
beforenumberНе

Отговор

Връща: GetAuditLogs200Response

Пример

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

blockFromCommentPublic Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
publicBlockFromCommentParamsPublicBlockFromCommentParamsДа
ssostringНе

Отговор

Връща: BlockFromCommentPublic200Response

Пример

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

unBlockCommentPublic Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
publicBlockFromCommentParamsPublicBlockFromCommentParamsДа
ssostringНе

Отговор

Връща: UnBlockCommentPublic200Response

Пример

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

checkedCommentsForBlocked Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdsstringДа
ssostringНе

Отговор

Връща: CheckedCommentsForBlocked200Response

Пример

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

blockUserFromComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
blockFromCommentParamsBlockFromCommentParamsДа
userIdstringНе
anonUserIdstringНе

Отговор

Връща: BlockFromCommentPublic200Response

Пример

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

createCommentPublic Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
urlIdstringДа
broadcastIdstringДа
commentDataCommentDataДа
sessionIdstringНе
ssostringНе

Отговор

Връща: CreateCommentPublic200Response

Пример

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

deleteComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
contextUserIdstringНе
isLivebooleanНе

Отговор

Връща: DeleteComment200Response

Пример

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

deleteCommentPublic Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
editKeystringНе
ssostringНе

Отговор

Връща: DeleteCommentPublic200Response

Пример

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

deleteCommentVote Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
voteIdstringДа
urlIdstringДа
broadcastIdstringДа
editKeystringНе
ssostringНе

Отговор

Връща: DeleteCommentVote200Response

Пример

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

flagComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
userIdstringНе
anonUserIdstringНе

Отговор

Връща: FlagComment200Response

Пример

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

getComment Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetComment200Response

Пример

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

getComments Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
pagenumberНе
limitnumberНе
skipnumberНе
asTreebooleanНе
skipChildrennumberНе
limitChildrennumberНе
maxTreeDepthnumberНе
urlIdstringНе
userIdstringНе
anonUserIdstringНе
contextUserIdstringНе
hashTagstringНе
parentIdstringНе
directionSortDirectionsНе
fromDatenumberНе
toDatenumberНе

Отговор

Връща: GetComments200Response

Пример

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

getCommentsPublic Internal Link

задължителни tenantId urlId

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
pagenumberНе
directionSortDirectionsНе
ssostringНе
skipnumberНе
skipChildrennumberНе
limitnumberНе
limitChildrennumberНе
countChildrenbooleanНе
fetchPageForCommentIdstringНе
includeConfigbooleanНе
countAllbooleanНе
includei10nbooleanНе
localestringНе
modulesstringНе
isCrawlerbooleanНе
includeNotificationCountbooleanНе
asTreebooleanНе
maxTreeDepthnumberНе
useFullTranslationIdsbooleanНе
parentIdstringНе
searchTextstringНе
hashTagsArrayНе
userIdstringНе
customConfigStrstringНе
afterCommentIdstringНе
beforeCommentIdstringНе

Отговор

Връща: GetCommentsPublic200Response

Пример

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

getCommentText Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringДа
editKeystringНе
ssostringНе

Отговор

Връща: GetCommentText200Response

Пример

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

getCommentVoteUserNames Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
dirnumberДа
ssostringНе

Отговор

Връща: GetCommentVoteUserNames200Response

Пример

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

lockComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНе

Отговор

Връща: LockComment200Response

Пример

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

pinComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНе

Отговор

Връща: PinComment200Response

Пример

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

saveComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createCommentParamsCreateCommentParamsДа
isLivebooleanНе
doSpamCheckbooleanНе
sendEmailsbooleanНе
populateNotificationsbooleanНе

Отговор

Връща: SaveComment200Response

Пример

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

saveCommentsBulk Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createCommentParamsArrayДа
isLivebooleanНе
doSpamCheckbooleanНе
sendEmailsbooleanНе
populateNotificationsbooleanНе

Отговор

Връща: Array<SaveComment200Response

Пример

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

setCommentText Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
commentTextUpdateRequestCommentTextUpdateRequestДа
editKeystringНе
ssostringНе

Отговор

Връща: SetCommentText200Response

Пример

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

unBlockUserFromComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
unBlockFromCommentParamsUnBlockFromCommentParamsДа
userIdstringНе
anonUserIdstringНе

Отговор

Връща: UnBlockCommentPublic200Response

Пример

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

unFlagComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
userIdstringНе
anonUserIdstringНе

Отговор

Връща: FlagComment200Response

Пример

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

unLockComment Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНе

Отговор

Връща: LockComment200Response

Пример

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

unPinComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
broadcastIdstringДа
ssostringНе

Отговор

Връща: PinComment200Response

Пример

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

updateComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updatableCommentParamsUpdatableCommentParamsДа
contextUserIdstringНе
doSpamCheckbooleanНе
isLivebooleanНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

voteComment Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
urlIdstringДа
broadcastIdstringДа
voteBodyParamsVoteBodyParamsДа
sessionIdstringНе
ssostringНе

Отговор

Връща: VoteComment200Response

Пример

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

getCommentsForUser Internal Link


Параметри

NameTypeRequiredDescription
userIdstringНе
directionSortDirectionsНе
repliesToUserIdstringНе
pagenumberНе
includei10nbooleanНе
localestringНе
isCrawlerbooleanНе

Отговор

Връща: GetCommentsForUser200Response

Пример

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

addDomainConfig Internal Link


Parameters

ИмеТипЗадължителноОписание
tenantIdstringДа
addDomainConfigParamsAddDomainConfigParamsДа

Response

Връща: AddDomainConfig200Response


deleteDomainConfig Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
domainstringДа

Отговор

Връща: DeleteDomainConfig200Response


getDomainConfig Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
domainstringДа

Отговор

Връща: GetDomainConfig200Response


getDomainConfigs Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа

Отговор

Връща: GetDomainConfigs200Response


patchDomainConfig Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
domainToUpdatestringДа
patchDomainConfigParamsPatchDomainConfigParamsДа

Отговор

Връща: GetDomainConfig200Response

putDomainConfig Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
domainToUpdatestringДа
updateDomainConfigParamsUpdateDomainConfigParamsДа

Отговор

Връща: GetDomainConfig200Response

createEmailTemplate Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
createEmailTemplateBodyCreateEmailTemplateBodyДа

Отговор

Връща: CreateEmailTemplate200Response

Пример

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

deleteEmailTemplate Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

deleteEmailTemplateRenderError Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
errorIdstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getEmailTemplate Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetEmailTemplate200Response

Пример

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

getEmailTemplateDefinitions Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа

Отговор

Връща: GetEmailTemplateDefinitions200Response

Пример

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

getEmailTemplateRenderErrors Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
skipnumberНе

Отговор

Връща: GetEmailTemplateRenderErrors200Response

Пример

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

getEmailTemplates Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
skipnumberНе

Отговор

Връща: GetEmailTemplates200Response

Пример

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

renderEmailTemplate Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
renderEmailTemplateBodyRenderEmailTemplateBodyДа
localestringНе

Отговор

Връща: RenderEmailTemplate200Response

Пример

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

updateEmailTemplate Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateEmailTemplateBodyUpdateEmailTemplateBodyДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getEventLog Internal Link

req tenantId urlId userIdWS

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
userIdWSstringДа
startTimenumberДа
endTimenumberНе

Отговор

Връща: GetEventLog200Response

Пример

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

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
userIdWSstringДа
startTimenumberДа
endTimenumberНе

Отговор

Връща: GetEventLog200Response

Пример

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

createFeedPost Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createFeedPostParamsCreateFeedPostParamsДа
broadcastIdstringНе
isLivebooleanНе
doSpamCheckbooleanНе
skipDupCheckbooleanНе

Отговор

Връща: CreateFeedPost200Response

Пример

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

createFeedPostPublic Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createFeedPostParamsCreateFeedPostParamsДа
broadcastIdstringНе
ssostringНе

Отговор

Връща: CreateFeedPostPublic200Response

Пример

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

deleteFeedPostPublic Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
postIdstringДа
broadcastIdstringНе
ssostringНе

Отговор

Връща: DeleteFeedPostPublic200Response

Пример

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

getFeedPosts Internal Link

req tenantId afterId

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
afterIdstringНе
limitnumberНе
tagsArrayНе

Отговор

Връща: GetFeedPosts200Response

Пример

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

getFeedPostsPublic Internal Link

req tenantId afterId

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
afterIdstringНе
limitnumberНе
tagsArrayНе
ssostringНе
isCrawlerbooleanНе
includeUserInfobooleanНе

Отговор

Връща: GetFeedPostsPublic200Response

Пример

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

getFeedPostsStats Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
postIdsArrayДа
ssostringНе

Отговор

Връща: GetFeedPostsStats200Response

Пример

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

getUserReactsPublic Internal Link


Параметри

NameTypeRequiredDescription
tenantIdstringДа
postIdsArrayНе
ssostringНе

Отговор

Връща: GetUserReactsPublic200Response

Пример

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

reactFeedPostPublic Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
postIdstringДа
reactBodyParamsReactBodyParamsДа
isUndobooleanНе
broadcastIdstringНе
ssostringНе

Отговор

Връща: ReactFeedPostPublic200Response

Пример

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

updateFeedPost Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
feedPostFeedPostДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

updateFeedPostPublic Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
postIdstringДа
updateFeedPostParamsUpdateFeedPostParamsДа
broadcastIdstringНе
ssostringНе

Отговор

Връща: CreateFeedPostPublic200Response

Пример

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

flagCommentPublic Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
commentIdstringДа
isFlaggedbooleanДа
ssostringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getGifLarge Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
largeInternalURLSanitizedstringДа

Отговор

Връща: GetGifLarge200Response

Пример

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

getGifsSearch Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
searchstringДа
localestringНе
ratingstringНе
pagenumberНе

Отговор

Връща: GetGifsSearch200Response

Пример

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

getGifsTrending Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
localestringНе
ratingstringНе
pagenumberНе

Отговор

Връща: GetGifsTrending200Response

Пример

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

addHashTag Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringНе
createHashTagBodyCreateHashTagBodyНе

Отговор

Връща: AddHashTag200Response

Пример

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

addHashTagsBulk Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringНе
bulkCreateHashTagsBodyBulkCreateHashTagsBodyНе

Отговор

Връща: AddHashTagsBulk200Response

Пример

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

deleteHashTag Internal Link


Параметри

ИмеТипЗадължителноОписание
tagstringДа
tenantIdstringНе
deleteHashTagRequestDeleteHashTagRequestНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getHashTags Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
pagenumberНе

Отговор

Връща: GetHashTags200Response

Пример

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

patchHashTag Internal Link

Параметри

NameTypeЗадължителноОписание
tagstringДа
tenantIdstringНе
updateHashTagBodyUpdateHashTagBodyНе

Отговор

Връща: PatchHashTag200Response

Пример

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

createModerator Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createModeratorBodyCreateModeratorBodyДа

Отговор

Връща: CreateModerator200Response

Пример

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

deleteModerator Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
sendEmailstringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getModerator Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetModerator200Response

Пример

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

getModerators Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
skipnumberНе

Отговор

Връща: GetModerators200Response

Пример

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

sendInvite Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
fromNamestringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за sendInvite
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_acme_42";
4 const id: string = "cmt_8f3b21";
5 const fromName: string = "Ava Thompson";
6 const inviteResult: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
7 console.log(inviteResult);
8})();
9

updateModerator Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateModeratorBodyUpdateModeratorBodyДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

deleteNotificationCount Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getCachedNotificationCount Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetCachedNotificationCount200Response

Пример

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

getNotificationCount Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
userIdstringНе
urlIdstringНе
fromCommentIdstringНе
viewedbooleanНе
typestringНе

Отговор

Връща: GetNotificationCount200Response

Пример

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

getNotifications Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringНе
urlIdstringНе
fromCommentIdstringНе
viewedbooleanНе
typestringНе
skipnumberНе

Отговор

Връща: GetNotifications200Response

Пример

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

updateNotification Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateNotificationBodyUpdateNotificationBodyДа
userIdstringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createV1PageReact Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
titlestringНе

Отговор

Връща: CreateV1PageReact200Response

Пример

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

createV2PageReact Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
idstringДа
titlestringНе

Отговор

Връща: CreateV2PageReact200Response

Пример

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

deleteV1PageReact Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа

Отговор

Връща: DeleteV1PageReact200Response

Пример

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

deleteV2PageReact Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
idstringДа

Отговор

Връща: DeleteV2PageReact200Response

Пример

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

getV1PageLikes Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа

Отговор

Връща: GetV1PageLikes200Response

Пример

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

getV2PageReacts Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
urlIdstringДа

Отговор

Връща: GetV2PageReacts200Response

Пример

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

getV2PageReactUsers Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
urlIdstringДа
idstringДа

Отговор

Връща: GetV2PageReactUsers200Response

Пример

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

addPage Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createAPIPageDataCreateAPIPageDataДа

Отговор

Връща: AddPageAPIResponse


deletePage Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: DeletePageAPIResponse


getOfflineUsers Internal Link

Потребители, които са коментирали страницата, но в момента НЕ са онлайн. Подредени по displayName. Използвайте това след изчерпване на /users/online, за да визуализирате секция "Членове". Cursor pagination on commenterName: server walks the partial {tenantId, urlId, commenterName} index from afterName forward via $gt, no $skip cost.

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
afterNamestringНе
afterUserIdstringНе

Отговор

Връща: GetOfflineUsers200Response

Пример

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

getOnlineUsers Internal Link

В момента онлайн зрители на страница: хора, чиито websocket сесии са абонирани за страницата в момента. Връща anonCount + totalCount (абонати за цялата стая, включително anon зрители, които не изброяваме).

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
afterNamestringНе
afterUserIdstringНе

Отговор

Връща: GetOnlineUsers200Response

Пример

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

getPageByURLId Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа

Отговор

Връща: GetPageByURLIdAPIResponse


getPages Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа

Отговор

Връща: GetPagesAPIResponse

getPagesPublic Internal Link

Изброява страници за наемател. Използва се от настолния клиент FChat за попълване на списъка със стаи. Изисква enableFChat да е true в получения персонализиран конфиг за всяка страница. Страниците, които изискват SSO, се филтрират спрямо груповия достъп на потребителя, който прави заявката.

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
cursorstringНе
limitnumberНе
qstringНе
sortByPagesSortByНе
hasCommentsbooleanНе

Отговор

Връща: GetPagesPublic200Response

Пример

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

getUsersInfo Internal Link

Масова информация за потребители за наемател. При предоставени userIds връща информация за показване от User / SSOUser. Използва се от коментарния widget за обогатяване на потребители, които току-що се появиха чрез събитие за присъствие. Няма контекст на страница: поверителността се прилага еднакво (частните профили са маскирани).

Параметри

NameTypeRequiredDescription
tenantIdstringДа
idsstringДа

Отговор

Връща: GetUsersInfo200Response

Пример

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

patchPage Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateAPIPageDataUpdateAPIPageDataДа

Отговор

Връща: PatchPageAPIResponse


deletePendingWebhookEvent Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getPendingWebhookEventCount Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringНе
externalIdstringНе
eventTypestringНе
typestringНе
domainstringНе
attemptCountGTnumberНе

Отговор

Връща: GetPendingWebhookEventCount200Response

Пример

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

getPendingWebhookEvents Internal Link

Параметри

ИмеTypeЗадължителноОписание
tenantIdstringДа
commentIdstringНе
externalIdstringНе
eventTypestringНе
typestringНе
domainstringНе
attemptCountGTnumberНе
skipnumberНе

Отговор

Връща: GetPendingWebhookEvents200Response

Пример

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

createQuestionConfig Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createQuestionConfigBodyCreateQuestionConfigBodyДа

Отговор

Връща: CreateQuestionConfig200Response

Пример

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

deleteQuestionConfig Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getQuestionConfig Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetQuestionConfig200Response

Пример

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

getQuestionConfigs Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
skipnumberНе

Отговор

Връща: GetQuestionConfigs200Response

Пример

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

updateQuestionConfig Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
updateQuestionConfigBodyUpdateQuestionConfigBodyYes

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createQuestionResult Internal Link


Параметри

ИмеТипЗадължителенОписание
tenantIdstringДа
createQuestionResultBodyCreateQuestionResultBodyДа

Отговор

Връща: CreateQuestionResult200Response

Пример

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

deleteQuestionResult Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за deleteQuestionResult
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-01";
3const id: string = "qres_9f8b7c3a";
4const response: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, id);
5const optionalResponse: FlagCommentPublic200Response | undefined = response;
6

getQuestionResult Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetQuestionResult200Response

Пример

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

getQuestionResults Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringНе
userIdstringНе
startDatestringНе
questionIdstringНе
questionIdsstringНе
skipnumberНе

Отговор

Връща: GetQuestionResults200Response

Пример

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

updateQuestionResult Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateQuestionResultBodyUpdateQuestionResultBodyДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

aggregateQuestionResults Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
questionIdstringНе
questionIdsArrayНе
urlIdstringНе
timeBucketAggregateTimeBucketНе
startDateDateНе
forceRecalculatebooleanНе

Отговор

Връща: AggregateQuestionResults200Response

Пример

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

bulkAggregateQuestionResults Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequestДа
forceRecalculatebooleanНе

Отговор

Връща: BulkAggregateQuestionResults200Response

Пример

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

combineCommentsWithQuestionResults Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
questionIdstringНе
questionIdsArrayНе
urlIdstringНе
startDateDateНе
forceRecalculatebooleanНе
minValuenumberНе
maxValuenumberНе
limitnumberНе

Отговор

Връща: CombineCommentsWithQuestionResults200Response

Пример

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

addSSOUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createAPISSOUserDataCreateAPISSOUserDataДа

Отговор

Връща: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
deleteCommentsbooleanНе
commentDeleteModestringНе

Отговор

Връща: DeleteSSOUserAPIResponse


getSSOUserByEmail Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
emailstringДа

Отговор

Връща: GetSSOUserByEmailAPIResponse

getSSOUserById Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
skipnumberНе

Отговор

Връща: GetSSOUsers200Response


patchSSOUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateAPISSOUserDataUpdateAPISSOUserDataДа
updateCommentsbooleanНе

Отговор

Връща: PatchSSOUserAPIResponse


putSSOUser Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateAPISSOUserDataUpdateAPISSOUserDataДа
updateCommentsbooleanНе

Отговор

Връща: PutSSOUserAPIResponse

Пример

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

createSubscription Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createAPIUserSubscriptionDataCreateAPIUserSubscriptionDataДа

Отговор

Връща: CreateSubscriptionAPIResponse

Пример

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

deleteSubscription Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
userIdstringНе

Отговор

Връща: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link

Parameters

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringНе

Отговор

Връща: GetSubscriptionsAPIResponse

Пример

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

updateSubscription Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionDataДа
userIdstringНе

Отговор

Връща: UpdateSubscriptionAPIResponse

Пример

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

getTenantDailyUsages Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
yearNumbernumberНе
monthNumbernumberНе
dayNumbernumberНе
skipnumberНе

Отговор

Връща: GetTenantDailyUsages200Response

Пример

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

createTenantPackage Internal Link

Параметри

ИмеТипЗадължителенОписание
tenantIdstringДа
createTenantPackageBodyCreateTenantPackageBodyДа

Отговор

Връща: CreateTenantPackage200Response

Пример

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

deleteTenantPackage Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getTenantPackage Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetTenantPackage200Response

Пример

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

getTenantPackages Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
skipnumberНе

Отговор

Връща: GetTenantPackages200Response

Пример

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

replaceTenantPackage Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
replaceTenantPackageBodyReplaceTenantPackageBodyДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

updateTenantPackage Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateTenantPackageBodyUpdateTenantPackageBodyДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createTenantUser Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
createTenantUserBodyCreateTenantUserBodyДа

Отговор

Връща: CreateTenantUser200Response

Пример

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

deleteTenantUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
deleteCommentsstringНе
commentDeleteModestringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за deleteTenantUser
Copy Copy
1
2const tenantId: string = "tenant_8f3a2b1c4d";
3const id: string = "user_62a4f9e0b7";
4const deleteComments: string = "true";
5const commentDeleteMode: string = "permanent";
6const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
7

getTenantUser Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetTenantUser200Response

Пример

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

getTenantUsers Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
skipnumberНе

Отговор

Връща: GetTenantUsers200Response

Пример

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

replaceTenantUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
replaceTenantUserBodyReplaceTenantUserBodyДа
updateCommentsstringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
redirectURLstringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

updateTenantUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateTenantUserBodyUpdateTenantUserBodyДа
updateCommentsstringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createTenant Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createTenantBodyCreateTenantBodyДа

Отговор

Връща: CreateTenant200Response

Пример

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

deleteTenant Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
surestringНе

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за deleteTenant
Copy Copy
1
2const tenantId: string = 'tenant_742b9c';
3const flagId: string = 'flag_1a2b3c';
4const resultWithoutSure: FlagCommentPublic200Response = await deleteTenant(tenantId, flagId);
5const sureConfirmation: string = 'confirmed';
6const resultWithSure: FlagCommentPublic200Response = await deleteTenant(tenantId, flagId, sureConfirmation);
7

getTenant Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetTenant200Response

Пример

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

getTenants Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
metastringНе
skipnumberНе

Отговор

Връща: GetTenants200Response

Пример

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

updateTenant Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
updateTenantBodyUpdateTenantBodyДа

Отговор

Връща: FlagCommentPublic200Response

Пример

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

changeTicketState Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringДа
idstringДа
changeTicketStateBodyChangeTicketStateBodyДа

Отговор

Връща: ChangeTicketState200Response

Пример

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

createTicket Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringДа
createTicketBodyCreateTicketBodyДа

Отговор

Връща: CreateTicket200Response

Пример

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

getTicket Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа
userIdstringНе

Отговор

Връща: GetTicket200Response

Пример

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

getTickets Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringНе
statenumberНе
skipnumberНе
limitnumberНе

Отговор

Връща: GetTickets200Response

Пример

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

getTranslations Internal Link

Parameters

NameTypeRequiredDescription
namespacestringДа
componentstringДа
localestringНе
useFullTranslationIdsbooleanНе

Response

Връща: GetTranslations200Response

Example

Пример за getTranslations
Copy Copy
1
2const namespaceName: string = 'site-ui';
3const componentName: string = 'comment-widget';
4const locale: string = 'fr-FR';
5const useFullTranslationIds: boolean = true;
6const translationsWithLocale: GetTranslations200Response = await getTranslations(namespaceName, componentName, locale, useFullTranslationIds);
7const translationsDefault: GetTranslations200Response = await getTranslations(namespaceName, componentName);
8

uploadImage Internal Link

Качване и преоразмеряване на изображение

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
fileBlobДа
sizePresetSizePresetНе
urlIdstringНе

Отговор

Връща: UploadImageResponse


getUserBadgeProgressById Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetUserBadgeProgressById200Response

Пример

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

getUserBadgeProgressByUserId Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringДа

Отговор

Връща: GetUserBadgeProgressById200Response

Пример

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

getUserBadgeProgressList Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringНе
limitnumberНе
skipnumberНе

Отговор

Връща: GetUserBadgeProgressList200Response

Пример

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

createUserBadge Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
createUserBadgeParamsCreateUserBadgeParamsДа

Отговор

Връща: CreateUserBadge200Response

Пример

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

deleteUserBadge Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: UpdateUserBadge200Response

Пример

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

getUserBadge Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
idstringДа

Отговор

Връща: GetUserBadge200Response

Пример

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

getUserBadges Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
userIdstringНе
badgeIdstringНе
typenumberНе
displayedOnCommentsbooleanНе
limitnumberНе
skipnumberНе

Отговор

Връща: GetUserBadges200Response

Пример

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

updateUserBadge Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
updateUserBadgeParamsUpdateUserBadgeParamsДа

Отговор

Връща: UpdateUserBadge200Response

Пример

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

getUserNotificationCount Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
ssostringНе

Отговор

Връща: GetUserNotificationCount200Response

Пример

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

getUserNotifications Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringНе
pageSizenumberНе
afterIdstringНе
includeContextbooleanНе
afterCreatedAtnumberНе
unreadOnlybooleanНе
dmOnlybooleanНе
noDmbooleanНе
includeTranslationsbooleanНе
includeTenantNotificationsbooleanНе
ssostringНе

Отговор

Връща: GetUserNotifications200Response

Пример

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

resetUserNotificationCount Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
ssostringНе

Отговор

Връща: ResetUserNotifications200Response

Пример

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

resetUserNotifications Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
afterIdstringНе
afterCreatedAtnumberНе
unreadOnlybooleanНе
dmOnlybooleanНе
noDmbooleanНе
ssostringНе

Отговор

Връща: ResetUserNotifications200Response

Пример

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

updateUserNotificationCommentSubscriptionStatus Internal Link


Разрешаване или забраняване на известия за конкретен коментар.

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
notificationIdstringДа
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumДа
commentIdstringДа
ssostringНе

Отговор

Връща: UpdateUserNotificationStatus200Response

Пример

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

updateUserNotificationPageSubscriptionStatus Internal Link

Активиране или деактивиране на известия за страница. Когато потребителите са абонирани за страница, се създават известия за нови коренни коментари, както и

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
urlstringДа
pageTitlestringДа
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnumДа
ssostringНе

Отговор

Връща: UpdateUserNotificationStatus200Response

Пример

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

updateUserNotificationStatus Internal Link


Параметри

NameTypeRequiredDescription
tenantIdstringYes
notificationIdstringYes
newStatusUpdateUserNotificationStatusNewStatusEnumYes
ssostringNo

Отговор

Връща: UpdateUserNotificationStatus200Response

Пример

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

getUserPresenceStatuses Internal Link


Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdWSstringДа
userIdsstringДа

Отговор

Връща: GetUserPresenceStatuses200Response

Пример

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

searchUsers Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
usernameStartsWithstringНе
mentionGroupIdsArrayНе
ssostringНе
searchSectionSearchUsersSearchSectionEnumНе

Отговор

Връща: SearchUsers200Response

Пример

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

getUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
idstringДа

Отговор

Връща: GetUser200Response

Пример

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

createVote Internal Link

Параметри

NameTypeRequiredDescription
tenantIdstringДа
commentIdstringДа
directionCreateVoteDirectionEnumДа
userIdstringНе
anonUserIdstringНе

Отговор

Връща: VoteComment200Response

Пример

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

deleteVote Internal Link

Parameters

NameTypeRequiredDescription
tenantIdstringДа
idstringДа
editKeystringНе

Отговор

Връща: DeleteCommentVote200Response

Пример

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

getVotes Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа

Отговор

Връща: GetVotes200Response

Пример

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

getVotesForUser Internal Link

Параметри

ИмеТипЗадължителноОписание
tenantIdstringДа
urlIdstringДа
userIdstringНе
anonUserIdstringНе

Отговор

Връща: GetVotesForUser200Response

Пример

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


Нужна помощ?

Ако срещнете проблеми или имате въпроси относно JavaScript/TypeScript SDK, моля:

Принос

Приносите са добре дошли! Моля посетете репозитория в GitHub за указания относно приноса.