FastComments.com

FastComments JavaScript/TypeScript SDK


Ovo je zvanični JavaScript/TypeScript SDK za FastComments.

Zvanični JavaScript/TypeScript SDK za FastComments API

Repozitorijum

Pogledajte na GitHub


Instalacija Internal Link

npm install fastcomments-sdk

API dokumentacija Internal Link


Kompletna API referenca: docs/api/README.md

Kompatibilnost browsera i servera Internal Link


Ovaj SDK koristi dvostruke ulazne tačke kako bi osigurao optimalnu kompatibilnost i sprečio greške pri izvršavanju:

  • fastcomments-sdk/browser - Verzija sigurna za preglednike sa nativnim fetch
  • fastcomments-sdk/server - Puna Node.js verzija sa podrškom za SSO
  • fastcomments-sdk (podrazumevano) - Samo tipovi, bezbedno za uvoz bilo gde

Javni i zaštićeni API-ji Internal Link

SDK pruža tri glavne API klase:

  • DefaultApi - Zaštićeni endpointi koji zahtevaju vaš API ključ za autentifikaciju. Koristite ih za operacije na serverskoj strani.
  • PublicApi - Javni endpointi kojima se može pristupiti bez API ključa. Mogu se pozivati direktno iz pregledača/mobilnih uređaja/itd.
  • HiddenApi - Interni/admin endpointi za napredne slučajeve upotrebe.

Primer: Korišćenje Public API-ja (bezbedno za pregledač)

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

const publicApi = new PublicApi();

// Preuzmi komentare za stranicu (nije potreban API ključ)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Primer: Korišćenje Default API-ja (samo na serverskoj strani)

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

const config = new Configuration({
  apiKey: 'your-api-key' // Držite ovo u tajnosti!
});
const defaultApi = new DefaultApi(config);

// Preuzmi komentare sa punim administratorskim pristupom
const response = await defaultApi.getComments({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

SSO (Single Sign-On) integracija Internal Link

FastComments podržava SSO za integraciju sa vašim postojećim sistemom autentifikacije korisnika. SSO funkcionalnost je dostupna samo u server export verziji jer zahteva Node.js crypto funkcije.

Jednostavno SSO (samo na serveru)

Jednostavno SSO treba da se generiše na serveru i pošalje klijentu:

// Kod na strani servera (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Kreiraj jednostavno SSO koristeći ugrađeni helper  
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();

// Pošaljite ssoToken svom kodu na strani klijenta
// Kod na strani klijenta potom može da koristi ovaj token sa browser SDK-om

Sigurno SSO (na strani servera, preporučeno)

Sigurno SSO treba da se implementira na serveru i pruža bolju bezbednost:

// Kod na strani servera (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Kreiraj sigurno SSO koristeći ugrađeni helper
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();

// Koristi sa API pozivima na serveru
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// Ili pošaljite ssoConfig klijentu za korišćenje u pregledaču

Korišćenje SSO iz pregledača (sa tokenom generisanim na serveru)

// Kod na strani klijenta (pregledač)
import { PublicApi } from 'fastcomments-sdk/browser';

// Preuzmi SSO token sa svog server endpoint-a
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 // Koristi SSO token generisan na serveru
});

SSO sa kreiranjem komentara

// Na strani servera: kreiraj SSO i komentar
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)
});

Uobičajeni slučajevi upotrebe Internal Link

Dobavljanje komentara za stranicu

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

Kreiranje komentara

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

Glasanje za komentar

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 za pozitivni glas, -1 za negativni glas
  }
});

Upravljanje korisnicima (zahteva API ključ)

// Pretraga korisnika (zahteva DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

Uživo događaji (ažuriranja u realnom vremenu) Internal Link

Pretplatite se na live događaje da biste dobili ažuriranja u realnom vremenu za komentare, glasove i druge aktivnosti.

Događaji na nivou stranice

Slušajte live događaje na određenoj stranici (komentari, glasovi, itd.):

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

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

// Subscribe to live events for a page
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (get this from getComments response)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Update your UI with the new comment
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Update vote counts in your UI
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // Return true if event was handled
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

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

Pretplata na korisničke događaje

Slušajte događaje specifične za korisnika (notifikacije, pominjanja, itd.):

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

const userConfig = {
  userIdWS: 'user-session-id', // Get this from getComments response
};

// Subscribe to user's personal feed
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Show notification in your UI
        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');
  }
);

// Close when done
userSubscription.close();

Dobijanje userIdWS

Parametar userIdWS je obavezan za live događaje i može se dobiti iz API odgovora:

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

// Extract userIdWS from the response
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Now you can subscribe to live events
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

Broadcast IDs Internal Link

Videćete da treba da prosledite broadcastId u nekim API pozivima. Kada primite događaje, dobićete ovaj ID nazad, tako da znate da zanemarite događaj ako planirate da optimistično primenite izmene na klijentu (što ćete verovatno želeti da uradite jer pruža najbolje iskustvo). Prosledite ovde UUID. ID bi trebalo da bude dovoljno jedinstven da se ne pojavi dva puta u okviru jedne sesije pregledača.

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
  }
});

Rukovanje greškama 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 grupišući ih (ako je groupBy prosleđen) i primenjujući više operacija. Podržane su različite operacije (npr. sum, countDistinct, avg, itd.).

Parametri

Name Type Required Description
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

Parametri

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

Odgovor

Vraća: BlockFromCommentPublic200Response


unBlockCommentPublic Internal Link

Parametri

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

Odgovor

Vraća: UnBlockCommentPublic200Response


checkedCommentsForBlocked Internal Link

Parametri

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

Odgovor

Vraća: CheckedCommentsForBlocked200Response


blockUserFromComment Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
blockFromCommentParams BlockFromCommentParams Da
userId string Ne
anonUserId string Ne

Odgovor

Vraća: BlockFromCommentPublic200Response


createCommentPublic Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
broadcastId string Da
commentData CommentData Da
sessionId string Ne
sso string Ne

Odgovor

Vraća: 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

Ime 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

Parametri

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

Odgovor

Vraća: 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

Name Type Required Description
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

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

Odgovor

Vraća: GetCommentText200Response


getCommentVoteUserNames Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Da
dir number Da
sso string Ne

Odgovor

Vraća: GetCommentVoteUserNames200Response


lockComment Internal Link

Parameters

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

Odgovor

Vraća: LockComment200Response


pinComment Internal Link


Parametri

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

Odgovor

Vraća: PinComment200Response


saveComment Internal Link

Parametri

Name Type 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


Parametri

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

Odgovor

Vraća: Array<SaveComment200Response


setCommentText Internal Link

Parametri

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

Odgovor

Vraća: 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

Parametri

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

Odgovor

Vraća: 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

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

Odgovor

Vraća: PinComment200Response


updateComment Internal Link

Parametri

Naziv Type Obavezno Opis
tenantId string Da
id string Da
body PickAPICommentUpdatableCommentFields Da
contextUserId string Ne
doSpamCheck boolean Ne
isLive boolean Ne

Odgovor

Vraća: 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

Parametri

Ime Tip Obavezno Opis
tenantId string Da
addDomainConfigParams AddDomainConfigParams Da

Odgovor

Vraća: AddDomainConfig200Response

deleteDomainConfig Internal Link

Parametri

Naziv 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

Name Type Required Description
tenantId string Da
domainToUpdate string Da
patchDomainConfigParams PatchDomainConfigParams Da

Odgovor

Vraća: GetDomainConfig200Response

putDomainConfig Internal Link


Parametri

Naziv Tip Obavezno Opis
tenantId string Da
domainToUpdate string Da
updateDomainConfigParams UpdateDomainConfigParams Da

Odgovor

Vraća: GetDomainConfig200Response


createEmailTemplate Internal Link

Parametri

Name Type Required Description
tenantId string Da
createEmailTemplateBody CreateEmailTemplateBody Da

Odgovor

Vraća: CreateEmailTemplate200Response

Primer

Primer 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" } // opcioni dodatni podaci
11};
12
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer za 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

Ime Tip Obavezno Opis
tenantId string Da
id string Da
errorId string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteEmailTemplateRenderError Primer
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

Primer

getEmailTemplate Primer
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'; // primer opcionog parametra
6 const template: GetEmailTemplate200Response = await getEmailTemplate(tenantId, id);
7 console.log(template, locale);
8})();
9

getEmailTemplateDefinitions Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da

Odgovor

Vraća: GetEmailTemplateDefinitions200Response

Primer

getEmailTemplateDefinitions Primer
Copy Copy
1
2const tenantId: string = 'acme-enterprises-78f2';
3const emailTemplates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4

getEmailTemplateRenderErrors Internal Link

Parametri

Name Type Required Description
tenantId string Da
id string Da
skip number Ne

Odgovor

Vraća: GetEmailTemplateRenderErrors200Response

Primer

Primer 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

Name Type Required Description
tenantId string Da
skip number Ne

Odgovor

Vraća: GetEmailTemplates200Response

Primer

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

renderEmailTemplate Internal Link

Parametri

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

Odgovor

Vraća: RenderEmailTemplate200Response

Primer

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

updateEmailTemplate Internal Link

Parametri

Name Type Required Description
tenantId string Yes
id string Yes
updateEmailTemplateBody UpdateEmailTemplateBody Yes

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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', // opciono polje (prikazano)
9 enabled: true,
10 customConfig: { priority: 'high' } // opciono 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

Ime 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

Parametri

Name Tip Obavezno Opis
tenantId string Da
createFeedPostParams CreateFeedPostParams Da
broadcastId string Ne
sso string Ne

Odgovor

Vraća: 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
afterId string Ne
limit number Ne
tags Array Ne

Odgovor

Vraća: GetFeedPosts200Response


getFeedPostsPublic Internal Link

req tenantId afterId

Parametri

Ime 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

Parametri

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

Odgovor

Vraća: 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
feedPost FeedPost Da

Odgovor

Vraća: FlagCommentPublic200Response

updateFeedPostPublic Internal Link

Parametri

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

Odgovor

Vraća: 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

Naziv Tip Obavezno Opis
tenantId string Ne
createHashTagBody CreateHashTagBody Ne

Odgovor

Vraća: AddHashTag200Response

Primer

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

addHashTagsBulk Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Ne
bulkCreateHashTagsBody BulkCreateHashTagsBody Ne

Odgovor

Vraća: AddHashTagsBulk200Response

Primer

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

deleteHashTag Internal Link

Parametri

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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

Primer

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

patchHashTag Internal Link

Parametri

Naziv Tip Obavezno Opis
tag string Da
tenantId string Ne
updateHashTagBody UpdateHashTagBody Ne

Odgovor

Vraća: PatchHashTag200Response

Primer

patchHashTag Primer
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

Primer

Primer 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

Primer

Primer 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetModerator200Response

Primer

getModerator Primer
Copy Copy
1
2const tenantId: string = "tenant_eu_4f8d2b9e";
3const maybeModeratorId: string | undefined = "mod_91c3b7a2"; // opcioni izvor (može biti undefined)
4const moderator: GetModerator200Response = await getModerator(tenantId, maybeModeratorId!);
5

getModerators Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetModerators200Response

Primer

Primer 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

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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

Name Type Required Description
tenantId string Yes
id string Yes
updateModeratorBody UpdateModeratorBody Yes

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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 // neobavezni 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

Primer

Primer 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

Ime Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetCachedNotificationCount200Response

Primer

Primer getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const baseNotificationId: string = 'notif-000123';
4const idSuffix: string | undefined = undefined; // primer opcionog 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

Primer

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

getNotifications Internal Link

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

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

updateNotification Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateNotificationBody UpdateNotificationBody Da
userId string Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer za 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: 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

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateAPIPageData UpdateAPIPageData Da

Odgovor

Vraća: PatchPageAPIResponse


deletePendingWebhookEvent Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
commentId string Ne
externalId string Ne
eventType string Ne
type string Ne
domain string Ne
attemptCountGT number Ne

Odgovor

Vraća: GetPendingWebhookEventCount200Response

Primer

Primer 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

Naziv Tip Obavezno Opis
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

Primer

Primer 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

Parametri

Ime Tip Obavezno Opis
tenantId string Da
createQuestionConfigBody CreateQuestionConfigBody Da

Odgovor

Vraća: CreateQuestionConfig200Response

Primer

Primer 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, // opciono: pokaži izostavljena naspram uključenih opcionih polja
12 renderingType: QuestionRenderingType.Dropdown,
13 options: customOptions,
14 whenSave: QuestionWhenSave.Always
15};
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

deleteQuestionConfig Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteQuestionConfig Primer
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

Parametri

Name Type Required Description
tenantId string Yes
id string Yes

Odgovor

Vraća: GetQuestionConfig200Response

Primer

Primer 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 je opcionalno; implementacija je izostavljena radi sažetka
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

Primer

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

updateQuestionConfig Internal Link

Parametri

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

createQuestionResult Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
createQuestionResultBody CreateQuestionResultBody Da

Odgovor

Vraća: CreateQuestionResult200Response

Primer

createQuestionResult Primer
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] // opcioni meta-podaci (prikazano)
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

deleteQuestionResult Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetQuestionResult200Response

Primer

Primer 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

Ime 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

Primer

Primer 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

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

updateQuestionResult Primer
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 // uključuje opcioni parametar
8};
9const response: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
10

aggregateQuestionResults Internal Link

Parametri

Naziv 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Da
forceRecalculate boolean Ne

Odgovor

Vraća: BulkAggregateQuestionResults200Response


combineCommentsWithQuestionResults Internal Link

Parametri

Naziv Type 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


Parametri

Ime Tip Obavezno Opis
tenantId string Da
email string Da

Odgovor

Vraća: GetSSOUserByEmailAPIResponse


getSSOUserById Internal Link


Parametri

Ime Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetSSOUsers200Response


patchSSOUser Internal Link

Parametri

Name Type Required Description
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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
createAPIUserSubscriptionData CreateAPIUserSubscriptionData Da

Odgovor

Vraća: CreateSubscriptionAPIResponse


deleteSubscription Internal Link

Parametri

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

Odgovor

Vraća: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
userId string Ne

Odgovor

Vraća: GetSubscriptionsAPIResponse


getTenantDailyUsages Internal Link

Parametri

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

Odgovor

Vraća: GetTenantDailyUsages200Response

Primer

Primer upotrebe 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

Ime Tip Obavezno Opis
tenantId string Da
createTenantPackageBody CreateTenantPackageBody Da

Odgovor

Vraća: CreateTenantPackage200Response

Primer

Primer 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 prikazan
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

Primer

Primer 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetTenantPackage200Response

Primer

getTenantPackage Primer
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

Parametri

Ime Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetTenantPackages200Response

Primer

getTenantPackages Primer
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

Name Type Required Description
tenantId string Da
id string Da
replaceTenantPackageBody ReplaceTenantPackageBody Da

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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 kao što su "notes" ili "trialExpiry" su namerno izostavljena ovde
9} as ReplaceTenantPackageBody;
10const result: FlagCommentPublic200Response = await replaceTenantPackage(
11 tenantId,
12 packageId,
13 replaceTenantPackageBody
14);
15

updateTenantPackage Internal Link

Parametri

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

updateTenantPackage Primer
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

Naziv Tip Obavezno Opis
tenantId string Da
createTenantUserBody CreateTenantUserBody Da

Odgovor

Vraća: CreateTenantUser200Response

Primer

Primer 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, // opcioni parametar
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

Primer

Primer za 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

Primer

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

getTenantUsers Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
skip number Ne

Odgovor

Vraća: GetTenantUsers200Response

Primer

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

replaceTenantUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
replaceTenantUserBody ReplaceTenantUserBody Da
updateComments string Ne Ažuriraj istorijske komentare kako bi odražavali novi prikazani naziv

Odgovor

Vraća: FlagCommentPublic200Response

Primer

replaceTenantUser Primer
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

Parametri

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer za 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

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da
updateTenantUserBody UpdateTenantUserBody Da
updateComments string Ne

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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

Parametri

Name Type Required Description
tenantId string Da
createTenantBody CreateTenantBody Da

Odgovor

Vraća: CreateTenant200Response

Primer

createTenant Primer
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" }]; // neobavezno
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

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

getTenant Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetTenant200Response

Primer

Primer 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

Primer

Primer getTenants-a
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

Parametri

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

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer 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, // demonstracija opcionog parametra
17 enableModeration: true
18};
19const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
20

uploadImage Internal Link

Otpremi i promeni veličinu slike

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
file Blob Da
sizePreset SizePreset Ne
urlId string Ne

Odgovor

Vraća: 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

Parametri

Ime Tip Obavezno Opis
tenantId string Da
userId string Ne
limit number Ne
skip number Ne

Odgovor

Vraća: GetUserBadgeProgressList200Response


createUserBadge Internal Link

Parametri

Naziv 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

Parametri

Ime Tip Obavezno Opis
tenantId string Da
userId string Ne
badgeId string Ne
type number Ne
displayedOnComments boolean Ne
limit number Ne
skip number Ne

Odgovor

Vraća: GetUserBadges200Response


updateUserBadge Internal Link

Parametri

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

Odgovor

Vraća: UpdateUserBadge200Response


getUserNotificationCount Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
sso string Ne

Odgovor

Vraća: GetUserNotificationCount200Response


getUserNotifications Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
pageSize number Ne
afterId string Ne
includeContext boolean Ne
afterCreatedAt number Ne
unreadOnly boolean Ne
dmOnly boolean Ne
noDm boolean Ne
includeTranslations boolean Ne
sso string Ne

Odgovor

Vraća: GetUserNotifications200Response


resetUserNotificationCount Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
sso string Ne

Odgovor

Vraća: ResetUserNotifications200Response

resetUserNotifications Internal Link

Parametri

Name Type Required Description
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ći ili onemogući obaveštenja za određeni komentar.

Parametri

Ime 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ćite ili onemogućite obaveštenja za stranicu. Kada su korisnici pretplaćeni na stranicu, kreiraju se obaveštenja za nove komentare prvog nivoa, i takođe

Parametri

Ime 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

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
usernameStartsWith string Da
mentionGroupIds Array Ne
sso string Ne

Odgovor

Vraća: SearchUsers200Response


getUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
id string Da

Odgovor

Vraća: GetUser200Response

Primer

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

createVote Internal Link

Parametri

Ime Tip Obavezno Opis
tenantId string Da
commentId string Da
direction CreateVoteDirectionEnum Da
userId string Ne
anonUserId string Ne

Odgovor

Vraća: VoteComment200Response

Primer

Primer 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

Parametri

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

Odgovor

Vraća: DeleteCommentVote200Response

Primer

Primer 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

Primer

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

getVotesForUser Internal Link

Parametri

Naziv Tip Obavezno Opis
tenantId string Da
urlId string Da
userId string Ne
anonUserId string Ne

Odgovor

Vraća: GetVotesForUser200Response

Primer

getVotesForUser Primer
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 u vezi JavaScript/TypeScript SDK, molimo:

Doprinosi

Doprinosi su dobrodošli! Molimo posetite GitHub repozitorijum za smernice o doprinosu.