FastComments.com

FastComments JavaScript/TypeScript SDK


Ово је званични JavaScript/TypeScript SDK за FastComments.

Званични JavaScript/TypeScript SDK за FastComments API

Репозиторијум

Погледај на GitHub


Инсталација Internal Link

npm install fastcomments-sdk

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


Kompletna API referenca: docs/api/README.md

Компатибилност прегледача и сервера Internal Link

Ovaj SDK koristi dvostruke ulazne tačke kako bi osigurao optimalnu kompatibilnost i spriječio greške pri izvođenju:

  • fastcomments-sdk/browser - Verzija sigurna za preglednik sa nativnim fetch
  • fastcomments-sdk/server - Puna Node.js verzija sa podrškom za SSO
  • fastcomments-sdk (default) - Samo tipovi, sigurno za uvoz bilo gdje

Јавни и заштићени API-ји Internal Link

SDK пружа три главне API класе:

  • DefaultApi - Заштићени ендпоинти који захтијевају ваш API кључ за аутентификацију. Користите их за операције на серверској страни.
  • PublicApi - Јавни ендпоинти којима се може приступити без API кључа. Могу се позивати директно из прегледача/мобилних уређаја/итд.
  • HiddenApi - Интерни/админ ендпоинти за напредне случајеве употребе.

Примјер: Коришћење Public API (погодно за прегледаче)

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

const publicApi = new PublicApi();

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

Примјер: Коришћење Default API (само на серверској страни)

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

const config = new Configuration({
  apiKey: 'your-api-key' // Чувајте ово у тајности!
});
const defaultApi = new DefaultApi(config);

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

SSO (једнократно пријављивање) интеграција Internal Link

FastComments подржава SSO за интеграцију са вашим постојећим системом аутентификације корисника. SSO функционалност је доступна само у серверском експорту јер захтијева Node.js crypto функције.

Једноставан SSO (само на страни сервера)

Једноставан SSO треба да буде генерисан на страни сервера и послат клијенту:

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

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

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

const ssoToken = sso.createToken();

// Пошаљите ssoToken вашем коду на клијенту
// Код на клијенту затим може користити овај токен са browser SDK-ом

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

Сигуран SSO треба имплементирати на страни сервера и обезбјеђује бољу безбједност:

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

// Креирајте сигуран SSO користећи уграђени помоћник
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

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

const ssoConfig = sso.prepareToSend();

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

// Или пошаљите ssoConfig клијенту за употребу у прегледачу

Коришћење SSO из прегледача (са токеном генерисаним на серверу)

// Код на клијенту (прегледач)
import { PublicApi } from 'fastcomments-sdk/browser';

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

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

SSO са креирањем коментара

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

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

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

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

Добијање коментара за страницу

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

Креирање коментара

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

Гласање за коментар

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 за позитиван глас, -1 за негативан глас
  }
});

Управљање корисницима (потребан API кључ)

// Претрага корисника (захтијева DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

Догађаји уживо (ажурирања у реалном времену) Internal Link

Претплатите се на догађаје уживо да бисте добили ажурирања у реалном времену за коментаре, гласове и друге активности.

Догађаји на нивоу странице

Слушајте догађаје уживо за одређену страницу (коментари, гласови итд.):

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

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

// Претплатите се на догађаје уживо за страницу
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (добијте ово из getComments одговора)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Ажурирајте ваш кориснички интерфејс новим коментаром
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Ажурирајте бројеве гласова у вашем корисничком интерфејсу
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // Вратите true ако је догађај обрађен
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Затворите претплату када завршите
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

Videćete da treba da prosledite broadcastId u nekim API pozivima. Kada primite događaje, dobićete ovaj ID nazad, pa ćete znati da ignorišete događaj ako planirate optimistično primeniti promene na klijentu (što ćete verovatno želeti da uradite, jer pruža najbolje iskustvo). Pošaljite ovde UUID. ID treba da bude dovoljno jedinstven da se ne pojavi dva puta tokom jedne sesije preglednika.

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() // Jedinstveni ID za ovu operaciju
  }
});

Обрада грешака Internal Link

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

aggregate Internal Link


Agregira dokumente grupisanjem (ako je groupBy naveden) i primjenom više operacija. Podržane su različite operacije (npr. sum, countDistinct, avg, itd.).

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
aggregationRequest AggregationRequest Da
parentTenantId string Ne
includeStats boolean Ne

Odgovor

Vraća: AggregationResponse


getAuditLogs Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
limit number Ne
skip number Ne
order SORTDIR Ne
after number Ne
before number Ne

Odgovor

Vraća: GetAuditLogs200Response


blockFromCommentPublic Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
commentId string Да
publicBlockFromCommentParams PublicBlockFromCommentParams Да
sso string Не

Одговор

Враћа: BlockFromCommentPublic200Response


unBlockCommentPublic Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
publicBlockFromCommentParams PublicBlockFromCommentParams Da
sso string Ne

Odgovor

Vraća: UnBlockCommentPublic200Response


checkedCommentsForBlocked Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da
commentIds string Da
sso string Ne

Odgovor

Vraća: CheckedCommentsForBlocked200Response


blockUserFromComment Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да
blockFromCommentParams BlockFromCommentParams Да
userId string Не
anonUserId string Не

Одговор

Враћа: BlockFromCommentPublic200Response


createCommentPublic Internal Link


Параметри

Name Type Required Description
tenantId string Да
urlId string Да
broadcastId string Да
commentData CommentData Да
sessionId string Не
sso string Не

Одговор

Враћа: CreateCommentPublic200Response


deleteComment Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
contextUserId string Ne
isLive boolean Ne

Odgovor

Vraća: DeleteComment200Response

deleteCommentPublic Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
broadcastId string Da
editKey string Ne
sso string Ne

Odgovor

Vraća: DeleteCommentPublic200Response


deleteCommentVote Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
voteId string Da
urlId string Da
broadcastId string Da
editKey string Ne
sso string Ne

Odgovor

Vraća: DeleteCommentVote200Response


flagComment Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да
userId string Не
anonUserId string Не

Одговор

Враћа: FlagComment200Response

getComment Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetComment200Response


getComments Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
page number Ne
limit number Ne
skip number Ne
asTree boolean Ne
skipChildren number Ne
limitChildren number Ne
maxTreeDepth number Ne
urlId string Ne
userId string Ne
anonUserId string Ne
contextUserId string Ne
hashTag string Ne
parentId string Ne
direction SortDirections Ne

Odgovor

Vraća: GetComments200Response


getCommentsPublic Internal Link

req tenantId urlId

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
page number Ne
direction SortDirections Ne
sso string Ne
skip number Ne
skipChildren number Ne
limit number Ne
limitChildren number Ne
countChildren boolean Ne
fetchPageForCommentId string Ne
includeConfig boolean Ne
countAll boolean Ne
includei10n boolean Ne
locale string Ne
modules string Ne
isCrawler boolean Ne
includeNotificationCount boolean Ne
asTree boolean Ne
maxTreeDepth number Ne
useFullTranslationIds boolean Ne
parentId string Ne
searchText string Ne
hashTags Array Ne
userId string Ne
customConfigStr string Ne
afterCommentId string Ne
beforeCommentId string Ne

Odgovor

Vraća: GetCommentsPublic200Response

getCommentText Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
editKey string Ne
sso string Ne

Odgovor

Vraća: GetCommentText200Response


getCommentVoteUserNames Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
commentId string Да
dir number Да
sso string Не

Одговор

Враћа: GetCommentVoteUserNames200Response


lockComment Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
broadcastId string Da
sso string Ne

Odgovor

Vraća: LockComment200Response


pinComment Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
commentId string Да
broadcastId string Да
sso string Не

Одговор

Враћа: PinComment200Response


saveComment Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createCommentParams CreateCommentParams Da
isLive boolean Ne
doSpamCheck boolean Ne
sendEmails boolean Ne
populateNotifications boolean Ne

Odgovor

Vraća: SaveComment200Response


saveCommentsBulk Internal Link


Параметри

Име Тип Обавезно Опис
tenantId string Да
createCommentParams Array Да
isLive boolean Не
doSpamCheck boolean Не
sendEmails boolean Не
populateNotifications boolean Не

Одговор

Враћа: Array<SaveComment200Response


setCommentText Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
commentId string Да
broadcastId string Да
commentTextUpdateRequest CommentTextUpdateRequest Да
editKey string Не
sso string Не

Одговор

Враћа: SetCommentText200Response


unBlockUserFromComment Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
unBlockFromCommentParams UnBlockFromCommentParams Da
userId string Ne
anonUserId string Ne

Odgovor

Vraća: UnBlockCommentPublic200Response


unFlagComment Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да
userId string Не
anonUserId string Не

Одговор

Враћа: FlagComment200Response


unLockComment Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
broadcastId string Da
sso string Ne

Odgovor

Vraća: LockComment200Response


unPinComment Internal Link

Parametri

Name Type Required Description
tenantId string Da
commentId string Da
broadcastId string Da
sso string Ne

Odgovor

Vraća: PinComment200Response


updateComment Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да
body PickAPICommentUpdatableCommentFields Да
contextUserId string Не
doSpamCheck boolean Не
isLive boolean Не

Одговор

Враћа: FlagCommentPublic200Response


voteComment Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
urlId string Da
broadcastId string Da
voteBodyParams VoteBodyParams Da
sessionId string Ne
sso string Ne

Odgovor

Vraća: VoteComment200Response


addDomainConfig Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
addDomainConfigParams AddDomainConfigParams Да

Одговор

Враћа: AddDomainConfig200Response


deleteDomainConfig Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
domain string Da

Odgovor

Vraća: DeleteDomainConfig200Response

getDomainConfig Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
domain string Da

Odgovor

Vraća: GetDomainConfig200Response


getDomainConfigs Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da

Odgovor

Vraća: GetDomainConfigs200Response


patchDomainConfig Internal Link


Parametri

Име Тип Обавезно Опис
tenantId string Да
domainToUpdate string Да
patchDomainConfigParams PatchDomainConfigParams Да

Одговор

Враћа: GetDomainConfig200Response


putDomainConfig Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
domainToUpdate string Да
updateDomainConfigParams UpdateDomainConfigParams Да

Одговор

Враћа: GetDomainConfig200Response


createEmailTemplate Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
createEmailTemplateBody CreateEmailTemplateBody Да

Одговор

Враћа: CreateEmailTemplate200Response

Примјер

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

deleteEmailTemplate Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да

Одговор

Враћа: FlagCommentPublic200Response

Пример

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

deleteEmailTemplateRenderError Internal Link

Parametri

Name Type Obavezno Opis
tenantId string Da
id string Da
errorId string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

deleteEmailTemplateRenderError Primjer
Copy Copy
1
2const tenantId: string = "tenant_8f3b2a9c";
3const id: string = "template_4a1c9f7e";
4const errorId: string = "err_20260112_abc123";
5const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
6

getEmailTemplate Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetEmailTemplate200Response

Primjer

getEmailTemplate Primjer
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-enterprises-123';
4 const id: string = 'welcome-email-template-v2';
5 const locale: string | undefined = 'en-US'; // primjer opcionog parametra
6 const template: GetEmailTemplate200Response = await getEmailTemplate(tenantId, id);
7 console.log(template, locale);
8})();
9

getEmailTemplateDefinitions Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да

Одговор

Враћа: GetEmailTemplateDefinitions200Response

Пример

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

getEmailTemplateRenderErrors Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да
skip number Не

Одговор

Враћа: GetEmailTemplateRenderErrors200Response

Пример

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

getEmailTemplates Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetEmailTemplates200Response

Primjer

getEmailTemplates Primjer
Copy Copy
1
2const tenantId: string = 'tenant_8f4d2b7c';
3const responseWithoutSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
4const skip: number = 20;
5const responseWithSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
6

renderEmailTemplate Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
renderEmailTemplateBody RenderEmailTemplateBody Da
locale string Ne

Odgovor

Vraća: RenderEmailTemplate200Response

Primjer

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

updateEmailTemplate Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateEmailTemplateBody UpdateEmailTemplateBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer updateEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const id: string = 'email_tpl_42b7a9';
4const updateEmailTemplateBody: UpdateEmailTemplateBody = {
5 name: 'Comment Flag Notification',
6 subject: 'A comment was flagged on acme.com',
7 html: '<p>A comment by was flagged. Review at </p>',
8 replyTo: 'noreply@acme.com', // neobavezno polje (primjer)
9 enabled: true,
10 customConfig: { priority: 'high' } // neobavezni prilagođeni parametri
11};
12const response: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
13

getEventLog Internal Link

req tenantId urlId userIdWS

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
userIdWS string Da
startTime number Da
endTime number Da

Odgovor

Vraća: GetEventLog200Response

getGlobalEventLog Internal Link


req tenantId urlId userIdWS

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
userIdWS string Da
startTime number Da
endTime number Da

Odgovor

Vraća: GetEventLog200Response


createFeedPost Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createFeedPostParams CreateFeedPostParams Da
broadcastId string Ne
isLive boolean Ne
doSpamCheck boolean Ne
skipDupCheck boolean Ne

Odgovor

Vraća: CreateFeedPost200Response

createFeedPostPublic Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
createFeedPostParams CreateFeedPostParams Да
broadcastId string Не
sso string Не

Одговор

Враћа: CreateFeedPostPublic200Response


deleteFeedPostPublic Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
postId string Da
broadcastId string Ne
sso string Ne

Odgovor

Vraća: DeleteFeedPostPublic200Response


getFeedPosts Internal Link

req tenantId afterId

Параметри

Име Тип Обавезно Опис
tenantId string Да
afterId string Не
limit number Не
tags Array Не

Одговор

Враћа: GetFeedPosts200Response

getFeedPostsPublic Internal Link

req tenantId afterId

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
afterId string Ne
limit number Ne
tags Array Ne
sso string Ne
isCrawler boolean Ne
includeUserInfo boolean Ne

Odgovor

Vraća: GetFeedPostsPublic200Response


getFeedPostsStats Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
postIds Array Da
sso string Ne

Odgovor

Vraća: GetFeedPostsStats200Response


getUserReactsPublic Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
postIds Array Не
sso string Не

Одговор

Враћа: GetUserReactsPublic200Response


reactFeedPostPublic Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
postId string Da
reactBodyParams ReactBodyParams Da
isUndo boolean Ne
broadcastId string Ne
sso string Ne

Odgovor

Vraća: ReactFeedPostPublic200Response


updateFeedPost Internal Link


Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да
feedPost FeedPost Да

Одговор

Враћа: FlagCommentPublic200Response


updateFeedPostPublic Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
postId string Да
updateFeedPostParams UpdateFeedPostParams Да
broadcastId string Не
sso string Не

Одговор

Враћа: CreateFeedPostPublic200Response


flagCommentPublic Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
isFlagged boolean Da
sso string Ne

Odgovor

Vraća: FlagCommentPublic200Response


addHashTag Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Ne
createHashTagBody CreateHashTagBody Ne

Odgovor

Vraća: AddHashTag200Response

Primjer

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

addHashTagsBulk Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Ne
bulkCreateHashTagsBody BulkCreateHashTagsBody Ne

Odgovor

Vraća: AddHashTagsBulk200Response

Primjer

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

deleteHashTag Internal Link


Parametri

Naziv Tip Obavezno Opis
tag string Da
tenantId string Ne
deleteHashTagRequest DeleteHashTagRequest Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

getHashTags Internal Link

Parametri

Name Type Required Description
tenantId string Da
page number Ne

Odgovor

Vraća: GetHashTags200Response

Primjer

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

patchHashTag Internal Link

Parametri

Name Type Required Description
tag string Da
tenantId string Ne
updateHashTagBody UpdateHashTagBody Ne

Odgovor

Vraća: PatchHashTag200Response

Primjer

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

createModerator Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createModeratorBody CreateModeratorBody Da

Odgovor

Vraća: CreateModerator200Response

Primjer

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

deleteModerator Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
sendEmail string Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer za deleteModerator
Copy Copy
1
2const tenantId: string = 'acme-tenant-987';
3const moderatorId: string = 'mod-78b2c9a4-3f1e-4d6a';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, moderatorId, sendEmail);
6

getModerator Internal Link

Параметри

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

Одговор

Враћа: GetModerator200Response

Примјер

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

getModerators Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
skip number Не

Одговор

Враћа: GetModerators200Response

Примјер

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

sendInvite Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
fromName string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

updateModerator Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da
updateModeratorBody UpdateModeratorBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer updateModerator
Copy Copy
1
2const tenantId: string = '4f8a9c2e-3b6d-4d9e-8c2f-1a2b3c4d5e6f';
3const id: string = 'mod_92a7c4';
4const updateModeratorBodyMinimal: UpdateModeratorBody = { displayName: 'Sophia Patel' };
5const updateModeratorBodyWithOptional: UpdateModeratorBody = {
6 displayName: 'Sophia Patel',
7 email: 'sophia.patel@newsroom.example',
8 permissions: ['remove_comments', 'ban_user'],
9 notifyOnFlag: true // prikazan opcioni parametar
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBodyWithOptional);
12

deleteNotificationCount Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_7f3a1b2c4d9e';
3const notificationId: string = 'notif_8c9d0a1b2f3e4b7';
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, notificationId);
5

getCachedNotificationCount Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetCachedNotificationCount200Response

Primjer

getCachedNotificationCount Primjer
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const baseNotificationId: string = 'notif-000123';
4const idSuffix: string | undefined = undefined; // primjer neobaveznog parametra
5const notificationId: string = idSuffix ? `${baseNotificationId}-${idSuffix}` : baseNotificationId;
6const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, notificationId);
7console.log(result);
8

getNotificationCount Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
userId string Ne
urlId string Ne
fromCommentId string Ne
viewed boolean Ne
type string Ne

Odgovor

Vraća: GetNotificationCount200Response

Primjer

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

getNotifications Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
userId string Ne
urlId string Ne
fromCommentId string Ne
viewed boolean Ne
type string Ne
skip number Ne

Odgovor

Vraća: GetNotifications200Response

Primer

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

updateNotification Internal Link

Parametri

Name Type Required Description
tenantId string Da
id string Da
updateNotificationBody UpdateNotificationBody Da
userId string Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

addPage Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createAPIPageData CreateAPIPageData Da

Odgovor

Vraća: AddPageAPIResponse


deletePage Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да

Одговор

Враћа: DeletePageAPIResponse


getPageByURLId Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da

Odgovor

Vraća: GetPageByURLIdAPIResponse


getPages Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da

Odgovor

Vraća: GetPagesAPIResponse


patchPage Internal Link

Parametri

Name Type Obavezno Opis
tenantId string Da
id string Da
updateAPIPageData UpdateAPIPageData Da

Odgovor

Vraća: PatchPageAPIResponse


deletePendingWebhookEvent Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

getPendingWebhookEventCount Internal Link


Параметри

Име Тип Обавезно Опис
tenantId string Да
commentId string Не
externalId string Не
eventType string Не
type string Не
domain string Не
attemptCountGT number Не

Одговор

Враћа: GetPendingWebhookEventCount200Response

Пример

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

getPendingWebhookEvents Internal Link

Parametri

Name Type Required Description
tenantId string Da
commentId string Ne
externalId string Ne
eventType string Ne
type string Ne
domain string Ne
attemptCountGT number Ne
skip number Ne

Odgovor

Vraća: GetPendingWebhookEvents200Response

Primjer

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

createQuestionConfig Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
createQuestionConfigBody CreateQuestionConfigBody Да

Одговор

Враћа: CreateQuestionConfig200Response

Пример

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

deleteQuestionConfig Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да

Одговор

Враћа: FlagCommentPublic200Response

Пример

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

getQuestionConfig Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да

Одговор

Враћа: GetQuestionConfig200Response

Пример

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

getQuestionConfigs Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetQuestionConfigs200Response

Primjer

getQuestionConfigs Primjer
Copy Copy
1
2const tenantId: string = 'tenant-42a7b9';
3const firstPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const secondPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 50);
5

updateQuestionConfig Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateQuestionConfigBody UpdateQuestionConfigBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

createQuestionResult Internal Link

Parametri

Name Type Required Description
tenantId string Yes
createQuestionResultBody CreateQuestionResultBody Yes

Odgovor

Vraća: CreateQuestionResult200Response

Primjer

Primjer createQuestionResult
Copy Copy
1
2const tenantId: string = "fc_tenant_7a3c_us-east-1";
3const metaItem: MetaItem = { key: "referrer", value: "/blog/how-to-comment" };
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "q_42",
6 commenterId: "user_1984",
7 answer: "yes",
8 score: 4,
9 meta: [metaItem] // demonstracija opcionalnih metapodataka
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

deleteQuestionResult Internal Link

Parametri

Name Type Required Description
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

getQuestionResult Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да

Одговор

Враћа: GetQuestionResult200Response

Пример

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

getQuestionResults Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Ne
userId string Ne
startDate string Ne
questionId string Ne
questionIds string Ne
skip number Ne

Odgovor

Vraća: GetQuestionResults200Response

Primjer

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

updateQuestionResult Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateQuestionResultBody UpdateQuestionResultBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer updateQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_84f2b9';
3const id: string = 'question_3a7c1d';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 result: { verdict: 'helpful', confidence: 0.92 },
6 reviewer: { id: 'mod_102', name: 'Aisha Rahman' },
7 notifyUser: true // opcioni parametar uključen
8};
9const response: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
10

aggregateQuestionResults Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
questionId string Ne
questionIds Array Ne
urlId string Ne
timeBucket AggregateTimeBucket Ne
startDate Date Ne
forceRecalculate boolean Ne

Odgovor

Vraća: AggregateQuestionResults200Response

bulkAggregateQuestionResults Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Да
forceRecalculate boolean Не

Одговор

Враћа: BulkAggregateQuestionResults200Response


combineCommentsWithQuestionResults Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
questionId string Ne
questionIds Array Ne
urlId string Ne
startDate Date Ne
forceRecalculate boolean Ne
minValue number Ne
maxValue number Ne
limit number Ne

Odgovor

Vraća: CombineCommentsWithQuestionResults200Response


addSSOUser Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createAPISSOUserData CreateAPISSOUserData Da

Odgovor

Vraća: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
deleteComments boolean Ne
commentDeleteMode string Ne

Odgovor

Vraća: DeleteSSOUserAPIResponse


getSSOUserByEmail Internal Link


Параметри

Назив Тип Обавезно Опис
tenantId string Да
email string Да

Одговор

Враћа: GetSSOUserByEmailAPIResponse


getSSOUserById Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link


Параметри

Име Тип Обавезно Опис
tenantId string Да
skip number Не

Одговор

Враћа: GetSSOUsers200Response


patchSSOUser Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateAPISSOUserData UpdateAPISSOUserData Da
updateComments boolean Ne

Odgovor

Vraća: PatchSSOUserAPIResponse


putSSOUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateAPISSOUserData UpdateAPISSOUserData Da
updateComments boolean Ne

Odgovor

Vraća: PutSSOUserAPIResponse


createSubscription Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
createAPIUserSubscriptionData CreateAPIUserSubscriptionData Да

Одговор

Враћа: CreateSubscriptionAPIResponse


deleteSubscription Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da
userId string Ne

Odgovor

Vraća: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link


Parametri

Naziv Тип Обавезно Опис
tenantId string Да
userId string Не

Одговор

Враћа: GetSubscriptionsAPIResponse


getTenantDailyUsages Internal Link

Parameters

Name Tip Obavezno Opis
tenantId string Da
yearNumber number Ne
monthNumber number Ne
dayNumber number Ne
skip number Ne

Response

Vraća: GetTenantDailyUsages200Response

Example

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

createTenantPackage Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createTenantPackageBody CreateTenantPackageBody Da

Odgovor

Vraća: CreateTenantPackage200Response

Primjer

Primjer createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_7f3b1a9c";
3const tenantPackage: TenantPackage = { id: "pkg_001", name: "Premium Plan", seats: 100 };
4const customConfig: CustomConfigParameters = { enableImages: true, maxImageSizeMb: 10 };
5const createTenantPackageBody: CreateTenantPackageBody = {
6 packageName: "Premium Plus",
7 tenantPackage,
8 customConfig,
9 notes: "Enable advanced moderation and image uploads" // opcioni parametar demonstriran
10};
11const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
12

deleteTenantPackage Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'fc-tenant-8a9c2b';
3const packageId: string = 'pkg-47f3c9';
4const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
5

getTenantPackage Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да

Одговор

Враћа: GetTenantPackage200Response

Пример

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

getTenantPackages Internal Link


Параметри

Име Тип Потребно Опис
tenantId string Да
skip number Не

Одговор

Враћа: GetTenantPackages200Response

Пример

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

replaceTenantPackage Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Yes
id string Yes
replaceTenantPackageBody ReplaceTenantPackageBody Yes

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer replaceTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant-9b72f2';
3const packageId: string = 'pkg-prod-v2';
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 name: 'Premium Moderation Bundle',
6 enabled: true,
7 maxModerators: 4,
8 // opciona polja poput "notes" ili "trialExpiry" su namjerno izostavljena ovdje
9} as ReplaceTenantPackageBody;
10const result: FlagCommentPublic200Response = await replaceTenantPackage(
11 tenantId,
12 packageId,
13 replaceTenantPackageBody
14);
15

updateTenantPackage Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateTenantPackageBody UpdateTenantPackageBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

createTenantUser Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Yes
createTenantUserBody CreateTenantUserBody Yes

Odgovor

Vraća: CreateTenantUser200Response

Primjer

Primjer createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_9a8c7e4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "julia.smith@acme-corp.com",
5 displayName: "Julia Smith",
6 role: "moderator",
7 password: "Str0ngP@ssword!23",
8 sendInviteEmail: true, // primjer neobaveznog parametra
9 locale: "en-US",
10 metadata: { department: "Customer Success" }
11};
12const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
13

deleteTenantUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
deleteComments string Ne
commentDeleteMode string Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2a9c';
3const id: string = 'user_4e5f6a7b';
4const deleteComments: string = 'true';
5const commentDeleteMode: string = 'hard';
6
7const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8

getTenantUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetTenantUser200Response

Primjer

getTenantUser Primjer
Copy Copy
1
2const tenantId: string = "tenant_9f7d4b2a-1c3e";
3const id: string = "user_6a12b3c4d5";
4const includeProfile: boolean | undefined = true; // primjer neobaveznog parametra
5const response: GetTenantUser200Response = await getTenantUser(tenantId, id);
6console.log("Tenant user fetched", response);
7

getTenantUsers Internal Link

Parameters

Naziv Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetTenantUsers200Response

Primjer

getTenantUsers Primjer
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2c1a';
3const skip: number = 50;
4const firstPage: GetTenantUsers200Response = await getTenantUsers(tenantId);
5const nextPage: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
6

replaceTenantUser Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да
replaceTenantUserBody ReplaceTenantUserBody Да
updateComments string Не

Одговор

Враћа: FlagCommentPublic200Response

Пример

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

Параметри

Назив Тип Обавезно Опис
tenantId string Да
id string Да
redirectURL string Не

Одговор

Враћа: FlagCommentPublic200Response

Пример

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

updateTenantUser Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
id string Да
updateTenantUserBody UpdateTenantUserBody Да
updateComments string Не

Одговор

Враћа: FlagCommentPublic200Response

Пример

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

createTenant Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
createTenantBody CreateTenantBody Да

Одговор

Враћа: CreateTenant200Response

Пример

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

deleteTenant Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da
sure string Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

deleteTenant Primjer
Copy Copy
1
2const tenantId: string = "tenant_7b3f1a9e";
3const id: string = "flag_9c4d2b1a";
4const sure: string = "yes_confirm_delete";
5
6const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
7console.log(result);
8

getTenant Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetTenant200Response

Primjer

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

getTenants Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
meta string Ne
skip number Ne

Odgovor

Vraća: GetTenants200Response

Primjer

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

updateTenant Internal Link

Parameters

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateTenantBody UpdateTenantBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer za updateTenant
Copy Copy
1
2const tenantId: string = "tenant_01H4ZQ7KABCD";
3const id: string = "site_9f8e7d6c";
4const apiDomainConfiguration: APIDomainConfiguration = {
5 primaryDomain: "comments.acme.com",
6 allowSubdomains: true
7};
8const billingInfo: BillingInfo = {
9 planName: "Business",
10 billingContactEmail: "billing@acme.com",
11 seats: 25
12};
13const updateTenantBody: UpdateTenantBody = {
14 displayName: "Acme Corporation Comments",
15 apiDomainConfiguration,
16 billingInfo, // prikazan opcioni parametar
17 enableModeration: true
18};
19const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
20

uploadImage Internal Link


Отпремите и промијените величину слике

Параметри

Име Тип Обавезно Опис
tenantId string Да
file Blob Да
sizePreset SizePreset Не
urlId string Не

Одговор

Враћа: UploadImageResponse


getUserBadgeProgressById Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetUserBadgeProgressById200Response

getUserBadgeProgressByUserId Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
userId string Da

Odgovor

Vraća: GetUserBadgeProgressById200Response


getUserBadgeProgressList Internal Link

Параметри

Назив Тип Обавезно Опис
tenantId string Да
userId string Не
limit number Не
skip number Не

Одговор

Враћа: GetUserBadgeProgressList200Response


createUserBadge Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da
createUserBadgeParams CreateUserBadgeParams Da

Odgovor

Vraća: CreateUserBadge200Response


deleteUserBadge Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: UpdateUserBadge200Response


getUserBadge Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetUserBadge200Response


getUserBadges Internal Link


Параметри

Име Тип Обавезно Опис
tenantId string Да
userId string Не
badgeId string Не
type number Не
displayedOnComments boolean Не
limit number Не
skip number Не

Одговор

Враћа: GetUserBadges200Response


updateUserBadge Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateUserBadgeParams UpdateUserBadgeParams Da

Odgovor

Vraća: UpdateUserBadge200Response

getUserNotificationCount Internal Link


Параметри

Име Тип Обавезно Опис
tenantId string Да
sso string Не

Одговор

Враћа: GetUserNotificationCount200Response


getUserNotifications Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
pageSize number Не
afterId string Не
includeContext boolean Не
afterCreatedAt number Не
unreadOnly boolean Не
dmOnly boolean Не
noDm boolean Не
includeTranslations boolean Не
sso string Не

Одговор

Враћа: GetUserNotifications200Response


resetUserNotificationCount Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
sso string Не

Одговор

Враћа: ResetUserNotifications200Response


resetUserNotifications Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
afterId string Ne
afterCreatedAt number Ne
unreadOnly boolean Ne
dmOnly boolean Ne
noDm boolean Ne
sso string Ne

Odgovor

Vraća: ResetUserNotifications200Response


updateUserNotificationCommentSubscriptionStatus Internal Link

Omogućite ili onemogućite obavještenja za određeni komentar.

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
notificationId string Da
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum Da
commentId string Da
sso string Ne

Odgovor

Vraća: UpdateUserNotificationStatus200Response


updateUserNotificationPageSubscriptionStatus Internal Link

Omogućavanje ili onemogućavanje obavijesti za stranicu. Kada su korisnici pretplaćeni na stranicu, kreiraju se obavijesti za nove korijenske komentare, i također

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
url string Da
pageTitle string Da
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum Da
sso string Ne

Odgovor

Vraća: UpdateUserNotificationStatus200Response


updateUserNotificationStatus Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
notificationId string Da
newStatus UpdateUserNotificationStatusNewStatusEnum Da
sso string Ne

Odgovor

Vraća: UpdateUserNotificationStatus200Response

getUserPresenceStatuses Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlIdWS string Da
userIds string Da

Odgovor

Vraća: GetUserPresenceStatuses200Response

searchUsers Internal Link


Parametri

Name Type Required Description
tenantId string Da
urlId string Da
usernameStartsWith string Da
mentionGroupIds Array Ne
sso string Ne

Odgovor

Vraća: SearchUsers200Response


getUser Internal Link

Parametri

Name Type Required Description
tenantId string Yes
id string Yes

Odgovor

Vraća: GetUser200Response

Primjer

getUser Primjer
Copy Copy
1
2const tenantId: string = "acme-publishing-42";
3const userIdOptional: string | undefined = "user_9d7b4c"; // može biti undefined u nekim tokovima (opcionalno)
4const id: string = userIdOptional ?? "user_default_0001";
5const result: GetUser200Response = await getUser(tenantId, id);
6console.log(result);
7

createVote Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
commentId string Да
direction CreateVoteDirectionEnum Да
userId string Не
anonUserId string Не

Одговор

Враћа: VoteComment200Response

Пример

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

deleteVote Internal Link

Параметри

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

Одговор

Враћа: DeleteCommentVote200Response

Пример

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

getVotes Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
urlId string Da

Odgovor

Vraća: GetVotes200Response

Primjer

getVotes Primjer
Copy Copy
1
2const tenantId: string = 'tenant_9f8b3c_prod';
3const urlId: string = '/news/2026/typescript-ecosystem-update';
4const votes: GetVotes200Response = await getVotes(tenantId, urlId);
5// Ako bi postojao neobavezan parametar, npr. includeHidden, mogao bi se koristiti ovako:
6// const votesWithHidden: GetVotes200Response = await getVotes(tenantId, urlId, { includeHidden: true });
7

getVotesForUser Internal Link

Параметри

Име Тип Обавезно Опис
tenantId string Да
urlId string Да
userId string Не
anonUserId string Не

Одговор

Враћа: GetVotesForUser200Response

Пример

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

Trebate pomoć?

Ako naiđete na bilo kakve probleme ili imate pitanja o JavaScript/TypeScript SDK, molimo:

Doprinosi

Doprinosi su dobrodošli! Posjetite GitHub repozitorij za upute o doprinosu.