FastComments.com

FastComments JavaScript/TypeScript SDK


Това е официалният JavaScript/TypeScript SDK за FastComments.

Официален JavaScript/TypeScript SDK за FastComments API

Репозитория

Преглед в GitHub


Инсталиране Internal Link

npm install fastcomments-sdk

API документация Internal Link


Пълна справка за API: docs/api/README.md

Съвместимост браузър и сървър Internal Link


Този SDK използва двойни входни точки, за да осигури оптимална съвместимост и да предотврати грешки по време на изпълнение:

  • fastcomments-sdk/browser - Версия, безопасна за браузъри, с вграден fetch
  • fastcomments-sdk/server - Пълна версия за Node.js с поддръжка на SSO
  • fastcomments-sdk (по подразбиране) - Само типове, безопасно за импортиране навсякъде

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


SDK предоставя три основни API класа:

  • DefaultApi - Защитени крайни точки, които изискват вашия API ключ за удостоверяване. Използвайте тези за операции от страна на сървъра.
  • PublicApi - Публични крайни точки, които могат да бъдат достъпвани без API ключ. Те могат да се извикват директно от браузъри/мобилни устройства/и т.н.
  • HiddenApi - Вътрешни/административни крайни точки за напреднали случаи на използване.

Пример: Използване на Public API (безопасно за браузър)

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

const publicApi = new PublicApi();

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

Пример: Използване на Default API (само от страна на сървъра)

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

const config = new Configuration({
  apiKey: 'your-api-key' // Пазете това в тайна!
});
const defaultApi = new DefaultApi(config);

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

Интеграция SSO (Single Sign-On) 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 и др.).

Параметри

Име Тип Задължително Описание
tenantId string Да
aggregationRequest AggregationRequest Да
parentTenantId string Не
includeStats boolean Не

Отговор

Връща: AggregationResponse


getAuditLogs Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
limit number Не
skip number Не
order SORTDIR Не
after number Не
before number Не

Отговор

Връща: GetAuditLogs200Response


blockFromCommentPublic Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
publicBlockFromCommentParams PublicBlockFromCommentParams Да
sso string Не

Отговор

Връща: BlockFromCommentPublic200Response

unBlockCommentPublic Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
publicBlockFromCommentParams PublicBlockFromCommentParams Да
sso string Не

Отговор

Връща: UnBlockCommentPublic200Response


checkedCommentsForBlocked Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentIds string Да
sso string Не

Отговор

Връща: CheckedCommentsForBlocked200Response


blockUserFromComment Internal Link


Parameters

Име Тип Задължително Описание
tenantId string Да
id string Да
blockFromCommentParams BlockFromCommentParams Да
userId string Не
anonUserId string Не

Response

Връща: BlockFromCommentPublic200Response


createCommentPublic Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Да
broadcastId string Да
commentData CommentData Да
sessionId string Не
sso string Не

Отговор

Връща: CreateCommentPublic200Response


deleteComment Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
contextUserId string Не
isLive boolean Не

Отговор

Връща: DeleteComment200Response

deleteCommentPublic Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
broadcastId string Да
editKey string Не
sso string Не

Отговор

Връща: DeleteCommentPublic200Response


deleteCommentVote Internal Link

Параметри

Name Type Задължително Описание
tenantId string Да
commentId string Да
voteId string Да
urlId string Да
broadcastId string Да
editKey string Не
sso string Не

Отговор

Връща: DeleteCommentVote200Response


flagComment Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
userId string Не
anonUserId string Не

Отговор

Връща: FlagComment200Response


getComment Internal Link


Параметри

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

Отговор

Връща: GetComment200Response


getComments Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
page number Не
limit number Не
skip number Не
asTree boolean Не
skipChildren number Не
limitChildren number Не
maxTreeDepth number Не
urlId string Не
userId string Не
anonUserId string Не
contextUserId string Не
hashTag string Не
parentId string Не
direction SortDirections Не

Отговор

Връща: GetComments200Response


getCommentsPublic Internal Link

req tenantId urlId

Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Да
page number Не
direction SortDirections Не
sso string Не
skip number Не
skipChildren number Не
limit number Не
limitChildren number Не
countChildren boolean Не
fetchPageForCommentId string Не
includeConfig boolean Не
countAll boolean Не
includei10n boolean Не
locale string Не
modules string Не
isCrawler boolean Не
includeNotificationCount boolean Не
asTree boolean Не
maxTreeDepth number Не
useFullTranslationIds boolean Не
parentId string Не
searchText string Не
hashTags Array Не
userId string Не
customConfigStr string Не
afterCommentId string Не
beforeCommentId string Не

Отговор

Връща: GetCommentsPublic200Response

getCommentText Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
editKey string Не
sso string Не

Отговор

Връща: GetCommentText200Response


getCommentVoteUserNames Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
dir number Да
sso string Не

Отговор

Връща: GetCommentVoteUserNames200Response


lockComment Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Не

Отговор

Връща: LockComment200Response


pinComment Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Не

Отговор

Връща: PinComment200Response


saveComment Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createCommentParams CreateCommentParams Да
isLive boolean Не
doSpamCheck boolean Не
sendEmails boolean Не
populateNotifications boolean Не

Отговор

Връща: SaveComment200Response


saveCommentsBulk Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createCommentParams Array Да
isLive boolean Не
doSpamCheck boolean Не
sendEmails boolean Не
populateNotifications boolean Не

Отговор

Връща: Array<SaveComment200Response

setCommentText Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
broadcastId string Да
commentTextUpdateRequest CommentTextUpdateRequest Да
editKey string Не
sso string Не

Отговор

Връща: SetCommentText200Response


unBlockUserFromComment Internal Link


Параметри

Name Type Required Description
tenantId string Да
id string Да
unBlockFromCommentParams UnBlockFromCommentParams Да
userId string Не
anonUserId string Не

Отговор

Връща: UnBlockCommentPublic200Response


unFlagComment Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
userId string Не
anonUserId string Не

Отговор

Връща: FlagComment200Response

unLockComment Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Не

Отговор

Връща: LockComment200Response


unPinComment Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
broadcastId string Да
sso string Не

Отговор

Връща: PinComment200Response


updateComment Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
body PickAPICommentUpdatableCommentFields Да
contextUserId string Не
doSpamCheck boolean Не
isLive boolean Не

Отговор

Връща: FlagCommentPublic200Response


voteComment Internal Link

Параметри

Name Type Задължително Описание
tenantId string Да
commentId string Да
urlId string Да
broadcastId string Да
voteBodyParams VoteBodyParams Да
sessionId string Не
sso string Не

Отговор

Връща: VoteComment200Response


addDomainConfig Internal Link


Parameters

Име Тип Задължително Описание
tenantId string Да
addDomainConfigParams AddDomainConfigParams Да

Response

Връща: AddDomainConfig200Response


deleteDomainConfig Internal Link


Параметри

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

Отговор

Връща: DeleteDomainConfig200Response


getDomainConfig Internal Link

Параметри

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

Отговор

Връща: GetDomainConfig200Response


getDomainConfigs Internal Link


Параметри

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

Отговор

Връща: GetDomainConfigs200Response


patchDomainConfig Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
domainToUpdate string Да
patchDomainConfigParams PatchDomainConfigParams Да

Отговор

Връща: GetDomainConfig200Response

putDomainConfig Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
domainToUpdate string Да
updateDomainConfigParams UpdateDomainConfigParams Да

Отговор

Връща: GetDomainConfig200Response

createEmailTemplate Internal Link

Параметри

Name Type Required Description
tenantId string Yes
createEmailTemplateBody CreateEmailTemplateBody Yes

Отговор

Връща: CreateEmailTemplate200Response

Пример

Пример за createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_7a9f2b3d";
3
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Comment Notification",
6 subject: "New comment on your article: ",
7 htmlBody: "<p> left a comment:</p><blockquote></blockquote>",
8 enabled: true,
9 defaultLocale: "en-US",
10 metadata: { createdBy: "admin@example.com", purpose: "notify_comment" } // допълнителни данни (по избор)
11};
12
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

deleteEmailTemplateRenderError Internal Link

Parameters

Име Тип Задължително Описание
tenantId string Да
id string Да
errorId string Да

Response

Връща: FlagCommentPublic200Response

Пример

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

getEmailTemplate Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да

Отговор

Връща: GetEmailTemplate200Response

Пример

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

getEmailTemplateDefinitions Internal Link

Параметри

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

Отговор

Връща: GetEmailTemplateDefinitions200Response

Пример

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

getEmailTemplateRenderErrors Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
skip number Не

Отговор

Връща: GetEmailTemplateRenderErrors200Response

Пример

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

getEmailTemplates Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
skip number Не

Отговор

Връща: GetEmailTemplates200Response

Пример

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

renderEmailTemplate Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
renderEmailTemplateBody RenderEmailTemplateBody Да
locale string Не

Отговор

Връща: RenderEmailTemplate200Response

Пример

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

updateEmailTemplate Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да
updateEmailTemplateBody UpdateEmailTemplateBody Да

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getEventLog Internal Link


req tenantId urlId userIdWS

Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Да
userIdWS string Да
startTime number Да
endTime number Да

Отговор

Връща: GetEventLog200Response


getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Да
userIdWS string Да
startTime number Да
endTime number Да

Отговор

Връща: GetEventLog200Response


createFeedPost Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createFeedPostParams CreateFeedPostParams Да
broadcastId string Не
isLive boolean Не
doSpamCheck boolean Не
skipDupCheck boolean Не

Отговор

Връща: CreateFeedPost200Response


createFeedPostPublic Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createFeedPostParams CreateFeedPostParams Да
broadcastId string Не
sso string Не

Отговор

Връща: CreateFeedPostPublic200Response


deleteFeedPostPublic Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
postId string Да
broadcastId string Не
sso string Не

Отговор

Връща: DeleteFeedPostPublic200Response


getFeedPosts Internal Link


req tenantId afterId

Параметри

Име Тип Задължително Описание
tenantId string Да
afterId string Не
limit number Не
tags Array Не

Отговор

Връща: GetFeedPosts200Response


getFeedPostsPublic Internal Link


req tenantId afterId

Параметри

Име Тип Задължително Описание
tenantId string Да
afterId string Не
limit number Не
tags Array Не
sso string Не
isCrawler boolean Не
includeUserInfo boolean Не

Отговор

Връща: GetFeedPostsPublic200Response


getFeedPostsStats Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
postIds Array Да
sso string Не

Отговор

Връща: GetFeedPostsStats200Response


getUserReactsPublic Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
postIds Array Не
sso string Не

Отговор

Връща: GetUserReactsPublic200Response


reactFeedPostPublic Internal Link

Параметри

Name Type Required Description
tenantId string Да
postId string Да
reactBodyParams ReactBodyParams Да
isUndo boolean Не
broadcastId string Не
sso string Не

Отговор

Връща: ReactFeedPostPublic200Response


updateFeedPost Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
feedPost FeedPost Да

Отговор

Връща: FlagCommentPublic200Response


updateFeedPostPublic Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
postId string Да
updateFeedPostParams UpdateFeedPostParams Да
broadcastId string Не
sso string Не

Отговор

Връща: CreateFeedPostPublic200Response


flagCommentPublic Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Да
isFlagged boolean Да
sso string Не

Отговор

Връща: FlagCommentPublic200Response


addHashTag Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Не
createHashTagBody CreateHashTagBody Не

Отговор

Връща: AddHashTag200Response

Пример

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

addHashTagsBulk Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Не
bulkCreateHashTagsBody BulkCreateHashTagsBody Не

Отговор

Връща: AddHashTagsBulk200Response

Пример

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

deleteHashTag Internal Link

Параметри

Име Тип Задължително Описание
tag string Да
tenantId string Не
deleteHashTagRequest DeleteHashTagRequest Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getHashTags Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
page number Не

Отговор

Връща: GetHashTags200Response

Пример

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

patchHashTag Internal Link

Параметри

Име Тип Задължително Описание
tag string Да
tenantId string Не
updateHashTagBody UpdateHashTagBody Не

Отговор

Връща: PatchHashTag200Response

Пример

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

createModerator Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
createModeratorBody CreateModeratorBody Да

Отговор

Връща: CreateModerator200Response

Пример

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

deleteModerator Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
sendEmail string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getModerator Internal Link

Параметри

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

Отговор

Връща: GetModerator200Response

Пример

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

getModerators Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
skip number Не

Отговор

Връща: GetModerators200Response

Пример

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

sendInvite Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
fromName string Да

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за sendInvite
Copy Copy
1
2const tenantId: string = 'acme-tenant-004';
3const id: string = 'comment_9b7f3a2c';
4const fromName: string = 'María Hernández';
5const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
6

updateModerator Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да
updateModeratorBody UpdateModeratorBody Да

Отговор

Връща: FlagCommentPublic200Response

Пример

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

deleteNotificationCount Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getCachedNotificationCount Internal Link

Параметри

Име Тип Задължителен Описание
tenantId string Да
id string Да

Response

Връща: GetCachedNotificationCount200Response

Пример

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

getNotificationCount Internal Link

Параметри

Name Type Required Description
tenantId string Да
userId string Не
urlId string Не
fromCommentId string Не
viewed boolean Не
type string Не

Отговор

Връща: GetNotificationCount200Response

Пример

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

getNotifications Internal Link

Параметри

Name Type Required Description
tenantId string Да
userId string Не
urlId string Не
fromCommentId string Не
viewed boolean Не
type string Не
skip number Не

Отговор

Връща: GetNotifications200Response

Пример

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

updateNotification Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateNotificationBody UpdateNotificationBody Да
userId string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

addPage Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createAPIPageData CreateAPIPageData Да

Отговор

Връща: AddPageAPIResponse


deletePage Internal Link

Параметри

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

Отговор

Връща: DeletePageAPIResponse


getPageByURLId Internal Link

Параметри

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

Отговор

Връща: GetPageByURLIdAPIResponse


getPages Internal Link

Параметри

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

Отговор

Връща: GetPagesAPIResponse

patchPage Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateAPIPageData UpdateAPIPageData Да

Отговор

Връща: PatchPageAPIResponse


deletePendingWebhookEvent Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за deletePendingWebhookEvent
Copy Copy
1
2const tenantId: string = 'tenant_7f4e2b';
3const pendingEventId: string = '9f7b6a8c-3b2a-4c0d-a8e5-1234567890ab';
4const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, pendingEventId);
5console.log(result);
6

getPendingWebhookEventCount Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Не
externalId string Не
eventType string Не
type string Не
domain string Не
attemptCountGT number Не

Отговор

Връща: GetPendingWebhookEventCount200Response

Пример

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

getPendingWebhookEvents Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
commentId string Не
externalId string Не
eventType string Не
type string Не
domain string Не
attemptCountGT number Не
skip number Не

Отговор

Връща: GetPendingWebhookEvents200Response

Пример

getPendingWebhookEvents Пример
Copy Copy
1
2const tenantId: string = "tenant_78b2f1";
3const commentId: string = "cmt_0042";
4const eventType: string = "comment.created";
5const domain: string = "blog.example.com";
6const attemptCountGT: number = 1;
7const skip: number = 0;
8
9const pending: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
10 tenantId,
11 commentId,
12 undefined, // externalId
13 eventType,
14 undefined, // type
15 domain,
16 attemptCountGT,
17 skip
18);
19

createQuestionConfig Internal Link

Параметри

Name Type Required Description
tenantId string Да
createQuestionConfigBody CreateQuestionConfigBody Да

Отговор

Връща: CreateQuestionConfig200Response

Пример

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

deleteQuestionConfig Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getQuestionConfig Internal Link

Параметри

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

Отговор

Връща: GetQuestionConfig200Response

Пример

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

getQuestionConfigs Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
skip number Не

Отговор

Връща: GetQuestionConfigs200Response

Пример

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

updateQuestionConfig Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Yes
id string Yes
updateQuestionConfigBody UpdateQuestionConfigBody Yes

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createQuestionResult Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createQuestionResultBody CreateQuestionResultBody Да

Отговор

Връща: CreateQuestionResult200Response

Пример

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

deleteQuestionResult Internal Link


Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getQuestionResult Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да

Отговор

Връща: GetQuestionResult200Response

Пример

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

getQuestionResults Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Не
userId string Не
startDate string Не
questionId string Не
questionIds string Не
skip number Не

Отговор

Връща: GetQuestionResults200Response

Пример

Пример за getQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlId: string = 'news/2025/fastcomments-release';
4const userId: string = 'user_8b7f3c';
5const startDate: string = '2025-01-01T00:00:00Z';
6const questionIds: string = 'q123,q124';
7const skip: number = 20;
8const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
9

updateQuestionResult Internal Link

Параметри

Name Type Задължително Description
tenantId string Да
id string Да
updateQuestionResultBody UpdateQuestionResultBody Да

Отговор

Връща: FlagCommentPublic200Response

Пример

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

aggregateQuestionResults Internal Link

Параметри

Name Type Required Description
tenantId string Да
questionId string Не
questionIds Array Не
urlId string Не
timeBucket AggregateTimeBucket Не
startDate Date Не
forceRecalculate boolean Не

Отговор

Връща: AggregateQuestionResults200Response


bulkAggregateQuestionResults Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Да
forceRecalculate boolean Не

Отговор

Връща: BulkAggregateQuestionResults200Response


combineCommentsWithQuestionResults Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
questionId string Не
questionIds Array Не
urlId string Не
startDate Date Не
forceRecalculate boolean Не
minValue number Не
maxValue number Не
limit number Не

Отговор

Връща: CombineCommentsWithQuestionResults200Response


addSSOUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createAPISSOUserData CreateAPISSOUserData Да

Отговор

Връща: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да
deleteComments boolean Не
commentDeleteMode string Не

Отговор

Връща: DeleteSSOUserAPIResponse


getSSOUserByEmail Internal Link

Параметри

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

Отговор

Връща: GetSSOUserByEmailAPIResponse

getSSOUserById Internal Link


Параметри

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

Отговор

Връща: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
skip number Не

Отговор

Връща: GetSSOUsers200Response


patchSSOUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateAPISSOUserData UpdateAPISSOUserData Да
updateComments boolean Не

Отговор

Връща: PatchSSOUserAPIResponse


putSSOUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateAPISSOUserData UpdateAPISSOUserData Да
updateComments boolean Не

Отговор

Връща: PutSSOUserAPIResponse

createSubscription Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
createAPIUserSubscriptionData CreateAPIUserSubscriptionData Да

Отговор

Връща: CreateSubscriptionAPIResponse


deleteSubscription Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
userId string Не

Отговор

Връща: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
userId string Не

Отговор

Връща: GetSubscriptionsAPIResponse

getTenantDailyUsages Internal Link

Параметри

Name Type Required Description
tenantId string Да
yearNumber number Не
monthNumber number Не
dayNumber number Не
skip number Не

Отговор

Връща: GetTenantDailyUsages200Response

Пример

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

createTenantPackage Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createTenantPackageBody CreateTenantPackageBody Да

Отговор

Връща: CreateTenantPackage200Response

Пример

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

deleteTenantPackage Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getTenantPackage Internal Link

Параметри

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

Отговор

Връща: GetTenantPackage200Response

Пример

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

getTenantPackages Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
skip number Не

Отговор

Връща: GetTenantPackages200Response

Пример

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

replaceTenantPackage Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
replaceTenantPackageBody ReplaceTenantPackageBody Да

Отговор

Връща: FlagCommentPublic200Response

Пример

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

updateTenantPackage Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateTenantPackageBody UpdateTenantPackageBody Да

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createTenantUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createTenantUserBody CreateTenantUserBody Да

Отговор

Връща: CreateTenantUser200Response

Пример

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

deleteTenantUser Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
deleteComments string Не
commentDeleteMode string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getTenantUser Internal Link

Параметри

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

Отговор

Връща: GetTenantUser200Response

Пример

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

getTenantUsers Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
skip number Не

Отговор

Връща: GetTenantUsers200Response

Пример

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

replaceTenantUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
replaceTenantUserBody ReplaceTenantUserBody Да
updateComments string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
redirectURL string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

updateTenantUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateTenantUserBody UpdateTenantUserBody Да
updateComments string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

createTenant Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
createTenantBody CreateTenantBody Да

Отговор

Връща: CreateTenant200Response

Пример

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

deleteTenant Internal Link

Параметри

Name Type Задължително Описание
tenantId string Да
id string Да
sure string Не

Отговор

Връща: FlagCommentPublic200Response

Пример

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

getTenant Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да

Отговор

Връща: GetTenant200Response

Пример

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

getTenants Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
meta string Не
skip number Не

Отговор

Връща: GetTenants200Response

Пример

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

updateTenant Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateTenantBody UpdateTenantBody Да

Отговор

Връща: FlagCommentPublic200Response

Пример

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

uploadImage Internal Link

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

Параметри

Име Тип Задължително Описание
tenantId string Да
file Blob Да
sizePreset SizePreset Не
urlId string Не

Отговор

Връща: UploadImageResponse


getUserBadgeProgressById Internal Link


Параметри

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

Отговор

Връща: GetUserBadgeProgressById200Response


getUserBadgeProgressByUserId Internal Link

Параметри

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

Отговор

Връща: GetUserBadgeProgressById200Response


getUserBadgeProgressList Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
userId string Не
limit number Не
skip number Не

Отговор

Връща: GetUserBadgeProgressList200Response


createUserBadge Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
createUserBadgeParams CreateUserBadgeParams Да

Отговор

Връща: CreateUserBadge200Response


deleteUserBadge Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да

Отговор

Връща: UpdateUserBadge200Response


getUserBadge Internal Link

Параметри

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

Отговор

Връща: GetUserBadge200Response

getUserBadges Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
userId string Не
badgeId string Не
type number Не
displayedOnComments boolean Не
limit number Не
skip number Не

Отговор

Връща: GetUserBadges200Response


updateUserBadge Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
id string Да
updateUserBadgeParams UpdateUserBadgeParams Да

Отговор

Връща: UpdateUserBadge200Response


getUserNotificationCount Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
sso string Не

Отговор

Връща: GetUserNotificationCount200Response


getUserNotifications Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
pageSize number Не
afterId string Не
includeContext boolean Не
afterCreatedAt number Не
unreadOnly boolean Не
dmOnly boolean Не
noDm boolean Не
includeTranslations boolean Не
sso string Не

Отговор

Връща: GetUserNotifications200Response


resetUserNotificationCount Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
sso string Не

Отговор

Връща: ResetUserNotifications200Response

resetUserNotifications Internal Link

Параметри

Name Type Required Description
tenantId string Да
afterId string Не
afterCreatedAt number Не
unreadOnly boolean Не
dmOnly boolean Не
noDm boolean Не
sso string Не

Отговор

Връща: ResetUserNotifications200Response


updateUserNotificationCommentSubscriptionStatus Internal Link

Включване или изключване на известията за конкретен коментар.

Параметри

Име Тип Задължително Описание
tenantId string Да
notificationId string Да
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum Да
commentId string Да
sso string Не

Отговор

Връща: UpdateUserNotificationStatus200Response


updateUserNotificationPageSubscriptionStatus Internal Link

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

Параметри

Name Type Required Description
tenantId string Да
urlId string Да
url string Да
pageTitle string Да
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum Да
sso string Не

Отговор

Връща: UpdateUserNotificationStatus200Response

updateUserNotificationStatus Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
notificationId string Да
newStatus UpdateUserNotificationStatusNewStatusEnum Да
sso string Не

Отговор

Връща: UpdateUserNotificationStatus200Response

getUserPresenceStatuses Internal Link


Параметри

Име Тип Задължително Описание
tenantId string Да
urlIdWS string Да
userIds string Да

Отговор

Връща: GetUserPresenceStatuses200Response


searchUsers Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Да
usernameStartsWith string Да
mentionGroupIds Array Не
sso string Не

Отговор

Връща: SearchUsers200Response

getUser Internal Link

Parameters

Name Type Required Description
tenantId string Да
id string Да

Response

Връща: GetUser200Response

Пример

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

createVote Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Yes
commentId string Yes
direction CreateVoteDirectionEnum Yes
userId string No
anonUserId string No

Отговор

Връща: VoteComment200Response

Пример

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

deleteVote Internal Link

Параметри

Име Тип Задължителен Описание
tenantId string Да
id string Да
editKey string Не

Отговор

Връща: DeleteCommentVote200Response

Пример

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

getVotes Internal Link

Параметри

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

Отговор

Връща: GetVotes200Response

Пример

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

getVotesForUser Internal Link

Параметри

Име Тип Задължително Описание
tenantId string Да
urlId string Да
userId string Не
anonUserId string Не

Отговор

Връща: GetVotesForUser200Response

Пример

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


Нужна помощ?

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

Принос

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