FastComments.com

FastComments JavaScript/TypeScript SDK

Това е официалното 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);
  }
}

Агрегиране Internal Link

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

Параметри

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

Отговор

Връща: AggregationResponse


Получаване на логове за одит Internal Link

Параметри

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

Отговор

Връща: GetAuditLogs200Response

Пример

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

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

Параметри

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

Отговор

Връща: BlockFromCommentPublic200Response

Пример

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

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

Параметри

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

Отговор

Връща: UnBlockCommentPublic200Response

Пример

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

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

Параметри

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

Отговор

Връща: CheckedCommentsForBlocked200Response

Пример

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

Блокиране на потребител от коментар Internal Link

Параметри

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

Отговор

Връща: BlockFromCommentPublic200Response

Пример

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

Създаване на публичен коментар Internal Link

Параметри

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

Отговор

Връща: CreateCommentPublic200Response

Пример

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

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

Параметри

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

Отговор

Връща: DeleteComment200Response

Пример

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

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


Параметри

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

Отговор

Връща: DeleteCommentPublic200Response

Пример

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

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

Параметри

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

Отговор

Връща: DeleteCommentVote200Response

Пример

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

Докладване на коментар Internal Link

Параметри

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

Отговор

Връща: FlagComment200Response

Пример

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

Получаване на коментар Internal Link

Параметри

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

Отговор

Връща: GetComment200Response

Пример

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

Получаване на коментари Internal Link

Параметри

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

Отговор

Връща: GetComments200Response

Пример

getComments Example
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // страница
6 20, // лимит
7 0, // брой за пропускане
8 true, // като дърво
9 1, // брой деца за пропускане
10 3, // лимит за деца
11 4, // макс. дълбочина на дървото
12 'articles/2026/new-product-launch', // идентификатор на url
13 'user_7890', // идентификатор на потребител
14 'anon_4f3b2', // идентификатор на анонимен потребител
15 undefined, // идентификатор на контекстен потребител
16 '#launch', // хаштаг
17 undefined // идентификатор на родител
18);
19

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

req tenantId urlId

Параметри

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

Отговор

Връща: GetCommentsPublic200Response

Пример

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

Получаване на текст на коментар Internal Link

Параметри

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

Отговор

Връща: GetCommentText200Response

Пример

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

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

Параметри

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

Отговор

Връща: GetCommentVoteUserNames200Response

Пример

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

Заключване на коментар Internal Link

Параметри

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

Отговор

Връща: LockComment200Response

Пример

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

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

Параметри

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

Отговор

Връща: PinComment200Response

Пример

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

Запазване на коментар Internal Link


Параметри

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

Отговор

Връща: SaveComment200Response

Пример

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

Масово запазване на коментари Internal Link

Параметри

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

Отговор

Връща: Array<SaveComment200Response

Пример

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

Задаване на текст на коментар Internal Link

Параметри

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

Отговор

Връща: SetCommentText200Response

Пример

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

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


Параметри

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

Отговор

Връща: UnBlockCommentPublic200Response

Пример

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

Премахване на доклад за коментар Internal Link


Параметри

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

Отговор

Връща: FlagComment200Response

Пример

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

Отключване на коментар Internal Link

Параметри

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

Отговор

Връща: LockComment200Response

Пример

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

Премахване на закрепване на коментар Internal Link

Параметри

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

Отговор

Връща: PinComment200Response

Пример

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

Актуализиране на коментар Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

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

Параметри

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

Отговор

Връща: VoteComment200Response

Пример

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

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


Параметри

Име Тип Задължително Описание
userId string Не
tenantId string Не
urlId string Не
page number Не
direction SortDirections Не
lastGenDate number Не
repliesToUserId string Не
fetchPageForCommentId string Не
includei10n boolean Не
useFullTranslationIds boolean Не
locale string Не
includeConfig boolean Не
includeNotificationCount boolean Не
countAll boolean Не
sso string Не

Отговор

Връща: GetCommentsForUserResponse

Пример

Пример за getCommentsForUser
Copy Copy
1
2const userId: string = "user_92b7f4";
3const tenantId: string = "news-tenant-uk";
4const urlId: string = "https://news.example.co.uk/articles/2026/05/01/local-election";
5const page: number = 1;
6const lastGenDate: number = Date.now() - 24 * 60 * 60 * 1000;
7const fetchPageForCommentId: string = "c_987654321";
8const includei10n: boolean = true;
9const locale: string = "en-GB";
10const includeConfig: boolean = true;
11const includeNotificationCount: boolean = false;
12const result: GetCommentsForUserResponse = await getCommentsForUser(
13 userId,
14 tenantId,
15 urlId,
16 page,
17 undefined,
18 lastGenDate,
19 undefined,
20 fetchPageForCommentId,
21 includei10n,
22 false,
23 locale,
24 includeConfig,
25 includeNotificationCount,
26 false,
27 undefined
28);
29

Добавяне на конфигурация на домейн Internal Link


Parameters

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

Response

Връща: AddDomainConfig200Response


Изтриване на конфигурация на домейн Internal Link


Параметри

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

Отговор

Връща: DeleteDomainConfig200Response


Получаване на конфигурация на домейн Internal Link

Параметри

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

Отговор

Връща: GetDomainConfig200Response


Получаване на конфигурации на домейни Internal Link


Параметри

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

Отговор

Връща: GetDomainConfigs200Response


Частична промяна на конфигурация на домейн Internal Link

Параметри

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

Отговор

Връща: GetDomainConfig200Response

Замяна на конфигурация на домейн Internal Link

Параметри

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

Отговор

Връща: GetDomainConfig200Response

Създаване на имейл шаблон Internal Link

Параметри

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

Отговор

Връща: CreateEmailTemplate200Response

Пример

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

Изтриване на имейл шаблон Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Изтриване на грешка при рендиране на имейл шаблон Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на имейл шаблон Internal Link

Параметри

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

Отговор

Връща: GetEmailTemplate200Response

Пример

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

Получаване на дефиниции на имейл шаблони Internal Link

Параметри

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

Отговор

Връща: GetEmailTemplateDefinitions200Response

Пример

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

Получаване на грешки при рендиране на имейл шаблони Internal Link

Параметри

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

Отговор

Връща: GetEmailTemplateRenderErrors200Response

Пример

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

Получаване на имейл шаблони Internal Link

Параметри

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

Отговор

Връща: GetEmailTemplates200Response

Пример

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

Рендиране на имейл шаблон Internal Link

Параметри

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

Отговор

Връща: RenderEmailTemplate200Response

Пример

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

Актуализиране на имейл шаблон Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на дневник на събитията Internal Link

req tenantId urlId userIdWS

Параметри

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

Отговор

Връща: GetEventLog200Response

Пример

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

Получаване на глобален дневник на събитията Internal Link

req tenantId urlId userIdWS

Параметри

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

Отговор

Връща: GetEventLog200Response

Пример

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

Създаване на публикация във фийда Internal Link

Параметри

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

Отговор

Връща: CreateFeedPost200Response

Пример

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

Създаване на публична публикация във фийда Internal Link

Параметри

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

Отговор

Връща: CreateFeedPostPublic200Response

Пример

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

Изтриване на публична публикация във фийда Internal Link

Параметри

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

Отговор

Връща: DeleteFeedPostPublic200Response

Пример

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

Получаване на публикации във фийда Internal Link

req tenantId afterId

Параметри

Name Type Required Description
tenantId string Да
afterId string Не
limit number Не
tags Array Не

Отговор

Връща: GetFeedPosts200Response

Пример

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

Получаване на публични публикации във фийда Internal Link

req tenantId afterId

Параметри

Name Type Required Description
tenantId string Да
afterId string Не
limit number Не
tags Array Не
sso string Не
isCrawler boolean Не
includeUserInfo boolean Не

Отговор

Връща: GetFeedPostsPublic200Response

Пример

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

Получаване на статистики за публикации във фийда Internal Link

Параметри

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

Отговор

Връща: GetFeedPostsStats200Response

Пример

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

Получаване на публични реакции на потребителя Internal Link

Параметри

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

Отговор

Връща: GetUserReactsPublic200Response

Пример

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

Реакция към публична публикация във фийда Internal Link

Параметри

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

Отговор

Връща: ReactFeedPostPublic200Response

Пример

reactFeedPostPublic Пример
Copy Copy
1
2const tenantId: string = 'tenant_84f2b1';
3const postId: string = 'post_12ac9e';
4const reactBodyParams: ReactBodyParams = { emoji: 'thumbs_up', intensity: 1 };
5const isUndo: boolean = false;
6const broadcastId: string = 'broadcast_20260503_01';
7const urlId: string = 'article-4527';
8const sso: string = 'sso_token_7f3b2c';
9
10const result: ReactFeedPostPublic200Response = await reactFeedPostPublic(tenantId, postId, reactBodyParams, isUndo, broadcastId, urlId, sso);
11

Актуализиране на публикация във фийда Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Актуализиране на публична публикация във фийда Internal Link

Параметри

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

Отговор

Връща: CreateFeedPostPublic200Response

Пример

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

Докладване на публичен коментар Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на голям GIF Internal Link


Параметри

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

Отговор

Връща: GifGetLargeResponse

Пример

Пример за getGifLarge
Copy Copy
1
2const tenantId: string = 'acme_marketing_tenant_7';
3const largeInternalURLSanitized: string = 'https://cdn.acmeinc.com/gifs/promo-spring-2026_large_sanitized.gif';
4const includePreview: boolean | undefined = undefined; // незадължителен флаг, който повикващият може да използва
5const result: GifGetLargeResponse = await getGifLarge(tenantId, largeInternalURLSanitized);
6console.log(result, includePreview);
7

Търсене на гифове Internal Link

Параметри

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

Отговор

Връща: GifSearchResponse

Пример

Пример за getGifsSearch
Copy Copy
1
2const tenantId: string = "tenant_fcm_42";
3const search: string = "funny golden retriever";
4const locale: string = "en-US";
5const rating: string = "pg";
6const page: number = 2;
7const result: GifSearchResponse = await getGifsSearch(tenantId, search, locale, rating, page);
8

Популярни гифове Internal Link

Параметри

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

Отговор

Връща: GifSearchResponse

Пример

Пример за getGifsTrending
Copy Copy
1
2const tenantId: string = "acme-tenant-01";
3const trendingBasic: GifSearchResponse = await getGifsTrending(tenantId);
4
5const locale: string = "en-GB";
6const rating: string = "pg";
7const page: number = 1;
8const trendingWithOptions: GifSearchResponse = await getGifsTrending(tenantId, locale, rating, page);
9

Добавяне на хаштаг Internal Link

Параметри

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

Отговор

Връща: AddHashTag200Response

Пример

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

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

Параметри

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

Отговор

Връща: AddHashTagsBulk200Response

Пример

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

Изтриване на хаштаг Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на хаштагове Internal Link

Параметри

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

Отговор

Връща: GetHashTags200Response

Пример

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

Частична промяна на хаштаг Internal Link

Параметри

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

Отговор

Връща: PatchHashTag200Response

Пример

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

Създаване на модератор Internal Link

Параметри

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

Отговор

Връща: CreateModerator200Response

Пример

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

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


Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на модератор Internal Link

Параметри

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

Отговор

Връща: GetModerator200Response

Пример

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

Получаване на модератори Internal Link

Параметри

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

Отговор

Връща: GetModerators200Response

Пример

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

Изпращане на покана Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Актуализиране на модератор Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Изтриване на брой уведомления Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на кеширан брой уведомления Internal Link

Параметри

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

Отговор

Връща: GetCachedNotificationCount200Response

Пример

Пример за getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const id: string = 'user_00012345';
4const includeUnreadOnly: boolean | undefined = true; // незадължителен флаг за параметър (демонстрирано)
5const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, id);
6

Получаване на брой уведомления Internal Link

Параметри

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

Отговор

Връща: GetNotificationCount200Response

Пример

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

Получаване на уведомления Internal Link

Параметри

Име Type Задължително Описание
tenantId string Да
userId string Не
urlId string Не
fromCommentId string Не
viewed boolean Не
type string Не
skip number Не

Отговор

Връща: GetNotifications200Response

Пример

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

Актуализиране на уведомление Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Добавяне на страница Internal Link

Параметри

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

Отговор

Връща: AddPageAPIResponse


Изтриване на страница Internal Link

Параметри

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

Отговор

Връща: DeletePageAPIResponse


Получаване на страница по URL идентификатор Internal Link

Параметри

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

Отговор

Връща: GetPageByURLIdAPIResponse


Получаване на страници Internal Link

Параметри

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

Отговор

Връща: GetPagesAPIResponse

Частична промяна на страница Internal Link


Параметри

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

Отговор

Връща: PatchPageAPIResponse


Изтриване на чакащо уебхук събитие Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на брой чакащи уебхук събития Internal Link

Параметри

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

Отговор

Връща: GetPendingWebhookEventCount200Response

Пример

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

Получаване на чакащи уебхук събития Internal Link

Параметри

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

Отговор

Връща: GetPendingWebhookEvents200Response

Пример

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

Създаване на конфигурация на въпрос Internal Link

Параметри

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

Response

Връща: CreateQuestionConfig200Response

Пример

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

Изтриване на конфигурация на въпрос Internal Link


Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на конфигурация на въпрос Internal Link

Параметри

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

Отговор

Връща: GetQuestionConfig200Response

Пример

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

Получаване на конфигурации на въпроси Internal Link


Параметри

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

Отговор

Връща: GetQuestionConfigs200Response

Пример

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

Актуализиране на конфигурация на въпрос Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Създаване на резултат от въпрос Internal Link

Параметри

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

Отговор

Връща: CreateQuestionResult200Response

Пример

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

Изтриване на резултат от въпрос Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на резултат от въпрос Internal Link

Параметри

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

Отговор

Връща: GetQuestionResult200Response

Пример

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

Получаване на резултати от въпроси Internal Link


Параметри

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

Отговор

Връща: GetQuestionResults200Response

Пример

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

Актуализиране на резултат от въпрос Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

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

Параметри

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

Отговор

Връща: AggregateQuestionResults200Response

Пример

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

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

Параметри

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

Отговор

Връща: BulkAggregateQuestionResults200Response

Пример

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

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

Параметри

Name Type Required Description
tenantId string Да
questionId string Не
questionIds Array Не
urlId string Не
startDate Date Не
forceRecalculate boolean Не
minValue number Не
maxValue number Не
limit number Не

Отговор

Връща: CombineCommentsWithQuestionResults200Response

Пример

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

Добавяне на SSO потребител Internal Link

Параметри

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

Отговор

Връща: AddSSOUserAPIResponse


Изтриване на SSO потребител Internal Link

Параметри

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

Отговор

Връща: DeleteSSOUserAPIResponse


Получаване на SSO потребител по имейл Internal Link

Параметри

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

Отговор

Връща: GetSSOUserByEmailAPIResponse

Получаване на SSO потребител по идентификатор Internal Link


Параметри

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

Отговор

Връща: GetSSOUserByIdAPIResponse


Получаване на SSO потребители Internal Link


Параметри

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

Отговор

Връща: GetSSOUsers200Response


Частична промяна на SSO потребител Internal Link

Параметри

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

Отговор

Връща: PatchSSOUserAPIResponse


Замяна на SSO потребител Internal Link

Параметри

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

Отговор

Връща: PutSSOUserAPIResponse

Създаване на абонамент Internal Link

Параметри

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

Отговор

Връща: CreateSubscriptionAPIResponse

Пример

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

Изтриване на абонамент Internal Link

Параметри

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

Отговор

Връща: DeleteSubscriptionAPIResponse


Получаване на абонаменти Internal Link

Параметри

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

Отговор

Връща: GetSubscriptionsAPIResponse

Пример

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

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

Параметри

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

Отговор

Връща: UpdateSubscriptionAPIResponse

Пример

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

Получаване на дневна употреба на наематели Internal Link

Параметри

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

Отговор

Връща: GetTenantDailyUsages200Response

Пример

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

Създаване на пакет за наемател Internal Link

Параметри

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

Отговор

Връща: CreateTenantPackage200Response

Пример

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

Изтриване на пакет на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на пакет на наемател Internal Link

Параметри

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

Отговор

Връща: GetTenantPackage200Response

Пример

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

Получаване на пакети на наематели Internal Link

Параметри

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

Отговор

Връща: GetTenantPackages200Response

Пример

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

Замяна на пакет на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Актуализиране на пакет на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Създаване на потребител на наемател Internal Link

Параметри

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

Отговор

Връща: CreateTenantUser200Response

Пример

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

Изтриване на потребител на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Получаване на потребител на наемател Internal Link

Параметри

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

Отговор

Връща: GetTenantUser200Response

Пример

Пример за getTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_fc5a9b2c';
3const userId: string = 'user_0a12b3';
4const result: GetTenantUser200Response = await getTenantUser(tenantId, userId);
5const user: User | undefined = (result as any).user; // достъп до полезните данни
6const userEmail: string | undefined = user?.email;
7console.log('Fetched user email:', userEmail);
8

Получаване на потребители на наемател Internal Link

Параметри

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

Отговор

Връща: GetTenantUsers200Response

Пример

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

Замяна на потребител на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Актуализиране на потребител на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

Създаване на наемател Internal Link

Параметри

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

Отговор

Връща: CreateTenant200Response

Пример

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

Изтриване на наемател Internal Link

Parameters

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

Отговор

Връща: FlagCommentPublic200Response

Пример

Пример за deleteTenant
Copy Copy
1
2const tenantId: string = 'tenant_42c9f1';
3const id: string = 'flag_9a7b3c';
4const sure: string = 'confirm-delete';
5const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
6

Получаване на наемател Internal Link


Параметри

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

Отговор

Връща: GetTenant200Response

Пример

Пример за getTenant
Copy Copy
1
2const tenantId: string = "tenant_9f4b2c1a";
3const idOverride: string | undefined = undefined; // незадължителен override, ако е наличен
4const id: string = idOverride ?? "site_3e7a6b2f";
5const response: GetTenant200Response = await getTenant(tenantId, id);
6console.log(response);
7

Получаване на наематели Internal Link

Параметри

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

Отговор

Връща: GetTenants200Response

Пример

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

Актуализиране на наемател Internal Link

Параметри

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

Отговор

Връща: FlagCommentPublic200Response

Пример

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

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

Параметри

Name Type Required Description
tenantId string Да
userId string Да
id string Да
changeTicketStateBody ChangeTicketStateBody Да

Отговор

Връща: ChangeTicketState200Response

Пример

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

Създаване на тикет Internal Link

Параметри

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

Отговор

Връща: CreateTicket200Response

Пример

Пример за createTicket
Copy Copy
1
2const tenantId: string = '7f3e9b1a-1c2d-4a5b-b6c7-d8e9f0123456';
3const userId: string = 'd290f1ee-6c54-4b01-90e6-d701748f0851';
4const createTicketBody: CreateTicketBody = {
5 subject: 'Unable to post comments on product update',
6 message: 'Submitting a comment returns a 504 timeout after ~10s. Reproducible in Chrome and Firefox.',
7 priority: 'high', // незадължително поле, включено
8 contactEmail: 'jane.doe@acme-corp.com',
9 ccEmails: ['eng-oncall@acme-corp.com'], // незадължително поле, включено
10 metadata: { page: '/blog/product-update', browser: 'Chrome 112' } // незадължително
11};
12const response: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
13

Получаване на тикет Internal Link

Параметри

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

Отговор

Връща: GetTicket200Response

Пример

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

Получаване на тикети Internal Link

Параметри

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

Отговор

Връща: GetTickets200Response

Пример

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

Получаване на преводи Internal Link

Параметри

Name Тип Задължително Описание
namespace string Да
component string Да
locale string Не
useFullTranslationIds boolean Не

Отговор

Връща: GetTranslationsResponse

Пример

Пример за getTranslations
Copy Copy
1
2const translationsBase: GetTranslationsResponse = await getTranslations("acme-site-482", "commentThread");
3const translationsSpanishFullIds: GetTranslationsResponse = await getTranslations("acme-site-482", "commentThread", "es-ES", true);
4

Качване на изображение Internal Link

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

Параметри

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

Отговор

Връща: UploadImageResponse


Получаване на напредъка на значката по идентификатор Internal Link

Параметри

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

Отговор

Връща: GetUserBadgeProgressById200Response

Пример

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

Получаване на напредъка на значката по идентификатор на потребител Internal Link

Параметри

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

Отговор

Връща: GetUserBadgeProgressById200Response

Пример

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

Получаване на списък с напредък на значки Internal Link

Параметри

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

Отговор

Връща: GetUserBadgeProgressList200Response

Пример

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

Създаване на потребителска значка Internal Link

Параметри

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

Отговор

Връща: CreateUserBadge200Response

Пример

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

Изтриване на потребителска значка Internal Link

Параметри

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

Отговор

Връща: UpdateUserBadge200Response

Пример

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

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

Параметри

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

Отговор

Връща: GetUserBadge200Response

Пример

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

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

Параметри

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

Отговор

Връща: GetUserBadges200Response

Пример

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

Актуализиране на потребителска значка Internal Link

Параметри

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

Отговор

Връща: UpdateUserBadge200Response

Пример

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

Получаване на брой потребителски уведомления Internal Link

Параметри

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

Отговор

Връща: GetUserNotificationCount200Response

Пример

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

Получаване на потребителски уведомления Internal Link

Параметри

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

Отговор

Връща: GetUserNotifications200Response

Пример

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

Нулиране на брой потребителски уведомления Internal Link

Параметри

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

Отговор

Връща: ResetUserNotifications200Response

Пример

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

Нулиране на потребителски уведомления Internal Link

Параметри

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

Отговор

Връща: ResetUserNotifications200Response

Пример

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

Актуализиране на статуса на абонамент за уведомления за коментари на потребителя Internal Link

Активиране или деактивиране на уведомления за конкретен коментар.

Параметри

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

Отговор

Връща: UpdateUserNotificationStatus200Response

Пример

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

Актуализиране на статуса на абонамент за уведомления за страници на потребителя Internal Link

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

Parameters

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

Отговор

Връща: UpdateUserNotificationStatus200Response

Пример

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

Актуализиране на статуса на потребителските уведомления Internal Link

Параметри

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

Отговор

Връща: UpdateUserNotificationStatus200Response

Пример

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

Получаване на статуси на присъствие на потребителите Internal Link

Параметри

Name Type Required Description
tenantId string Yes
urlIdWS string Yes
userIds string Yes

Отговор

Връща: GetUserPresenceStatuses200Response

Пример

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

Търсене на потребители Internal Link


Параметри

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

Отговор

Връща: SearchUsers200Response

Пример

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

Получаване на потребител Internal Link

Параметри

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

Отговор

Връща: GetUser200Response

Пример

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

Създаване на глас Internal Link

Параметри

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

Отговор

Връща: VoteComment200Response

Пример

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

Изтриване на глас Internal Link

Параметри

Name Type Required Description
tenantId string Да
id string Да
editKey string Не

Отговор

Връща: DeleteCommentVote200Response

Пример

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

Получаване на гласове Internal Link

Параметри

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

Отговор

Връща: GetVotes200Response

Пример

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

Получаване на гласове за потребител Internal Link

Параметри

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

Отговор

Връща: GetVotesForUser200Response

Пример

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


Нужна помощ?

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

Принос

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