FastComments.com

FastComments SDK za JavaScript/TypeScript


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

Upravljajte komentarima, korisnicima, SSO i moderacijom iz Node.js ili iz pregledača.

Repozitorijum

Pogledajte na GitHub-u


Instalacija Internal Link


npm

npm install fastcomments-sdk

API dokumentacija Internal Link


Kompletna API referenca: docs/api/README.md

Kompatibilnost pregledača 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);
}

ID-ovi emitovanja 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

Aggregates documents by grouping them (if groupBy is provided) and applying multiple operations. Different operations (e.g. sum, countDistinct, avg, etc.) are supported.

Parametri

NameTypeRequiredDescription
tenantIdstringDa
aggregationRequestAggregationRequestDa
parentTenantIdstringNe
includeStatsbooleanNe

Odgovor

Vraća: Aggregate200Response

Primer

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

getAuditLogs Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
limitnumberNe
skipnumberNe
orderSORTDIRNe
afternumberNe
beforenumberNe

Odgovor

Vraća: GetAuditLogs200Response

Primer

Primer getAuditLogs
Copy Copy
1
2const tenantId: string = 'tenant_5f8d7c3a';
3const limit: number = 100;
4const skip: number = 0;
5const order: SORTDIR = 'DESC' as SORTDIR;
6const after: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // pre nedelju dana
7const before: number = Date.now();
8const result: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, order, after, before);
9

blockFromCommentPublic Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
commentIdstringDa
publicBlockFromCommentParamsPublicBlockFromCommentParamsDa
ssostringNe

Odgovor

Vraća: BlockFromCommentPublic200Response

Primer

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

unBlockCommentPublic Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
publicBlockFromCommentParamsPublicBlockFromCommentParamsDa
ssostringNe

Odgovor

Vraća: UnBlockCommentPublic200Response

Primer

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

checkedCommentsForBlocked Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
commentIdsstringDa
ssostringNe

Odgovor

Vraća: CheckedCommentsForBlocked200Response

Primer

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

blockUserFromComment Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
blockFromCommentParamsBlockFromCommentParamsDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: BlockFromCommentPublic200Response

Primer

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

createCommentPublic Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
broadcastIdstringDa
commentDataCommentDataDa
sessionIdstringNe
ssostringNe

Odgovor

Vraća: CreateCommentPublic200Response

Primer

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

deleteComment Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
contextUserIdstringNe
isLivebooleanNe

Odgovor

Vraća: DeleteComment200Response

Primer

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

deleteCommentPublic Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
editKeystringNe
ssostringNe

Odgovor

Vraća: DeleteCommentPublic200Response

Primer

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

deleteCommentVote Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringYes
commentIdstringYes
voteIdstringYes
urlIdstringYes
broadcastIdstringYes
editKeystringNo
ssostringNo

Odgovor

Vraća: DeleteCommentVote200Response

Primer

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

flagComment Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: FlagComment200Response

Primer

flagComment Primer
Copy Copy
1
2const tenantId: string = "tenant_4f21c9a";
3const commentId: string = "cmt_7a12b3e9";
4const userId: string = "user_82bd123";
5const result: FlagComment200Response = await flagComment(tenantId, commentId, userId);
6

getComment Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetComment200Response

Primer

getComment Primer
Copy Copy
1
2const tenantId: string = 'tenant_6f1a2b';
3const commentId: string = 'cmt_4d9e8f';
4const includeReplies: boolean | undefined = true; // primer opcionog parametra (nije prosleđen getComment-u)
5const result: GetComment200Response = await getComment(tenantId, commentId);
6console.log('Fetched comment for tenant:', tenantId, 'comment id:', commentId);
7console.log('API response received:', result);
8

getComments Internal Link

Parametri

NameTypeObaveznoOpis
tenantIdstringDa
pagenumberNe
limitnumberNe
skipnumberNe
asTreebooleanNe
skipChildrennumberNe
limitChildrennumberNe
maxTreeDepthnumberNe
urlIdstringNe
userIdstringNe
anonUserIdstringNe
contextUserIdstringNe
hashTagstringNe
parentIdstringNe
directionSortDirectionsNe
fromDatenumberNe
toDatenumberNe

Odgovor

Vraća: GetComments200Response

Primer

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

getCommentsPublic Internal Link

req tenantId urlId

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
pagenumberNe
directionSortDirectionsNe
ssostringNe
skipnumberNe
skipChildrennumberNe
limitnumberNe
limitChildrennumberNe
countChildrenbooleanNe
fetchPageForCommentIdstringNe
includeConfigbooleanNe
countAllbooleanNe
includei10nbooleanNe
localestringNe
modulesstringNe
isCrawlerbooleanNe
includeNotificationCountbooleanNe
asTreebooleanNe
maxTreeDepthnumberNe
useFullTranslationIdsbooleanNe
parentIdstringNe
searchTextstringNe
hashTagsArrayNe
userIdstringNe
customConfigStrstringNe
afterCommentIdstringNe
beforeCommentIdstringNe

Odgovor

Vraća: GetCommentsPublic200Response

Primer

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

getCommentText Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
commentIdstringDa
editKeystringNe
ssostringNe

Odgovor

Vraća: GetCommentText200Response

Primer

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

getCommentVoteUserNames Internal Link

Parametri

NameTypeObaveznoOpis
tenantIdstringDa
commentIdstringDa
dirnumberDa
ssostringNe

Odgovor

Vraća: GetCommentVoteUserNames200Response

Primer

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

lockComment Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: LockComment200Response

Primer

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

pinComment Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: PinComment200Response

Primer

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

saveComment Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringYes
createCommentParamsCreateCommentParamsYes
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

Odgovor

Vraća: SaveComment200Response

Primer

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

saveCommentsBulk Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createCommentParamsArrayDa
isLivebooleanNe
doSpamCheckbooleanNe
sendEmailsbooleanNe
populateNotificationsbooleanNe

Odgovor

Vraća: Array<SaveComment200Response

Primer

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

setCommentText Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
commentTextUpdateRequestCommentTextUpdateRequestDa
editKeystringNe
ssostringNe

Odgovor

Vraća: SetCommentText200Response

Primer

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

unBlockUserFromComment Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa
unBlockFromCommentParamsUnBlockFromCommentParamsDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: UnBlockCommentPublic200Response

Primer

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

unFlagComment Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: FlagComment200Response

Primer

Primer unFlagComment
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2a1f';
3const commentId: string = 'cmt_20250614_01';
4const userId: string = 'user_47d2b9';
5const result: FlagComment200Response = await unFlagComment(tenantId, commentId, userId);
6

unLockComment Internal Link


Parametri

NameTypeRequiredDescription
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: LockComment200Response

Primer

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

unPinComment Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: PinComment200Response

Primer

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

updateComment Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updatableCommentParamsUpdatableCommentParamsDa
contextUserIdstringNe
doSpamCheckbooleanNe
isLivebooleanNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

voteComment Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
urlIdstringDa
broadcastIdstringDa
voteBodyParamsVoteBodyParamsDa
sessionIdstringNe
ssostringNe

Odgovor

Vraća: VoteComment200Response

Primer

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

getCommentsForUser Internal Link

Parametri

NameTypeRequiredDescription
userIdstringNe
directionSortDirectionsNe
repliesToUserIdstringNe
pagenumberNe
includei10nbooleanNe
localestringNe
isCrawlerbooleanNe

Odgovor

Vraća: GetCommentsForUser200Response

Primer

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

addDomainConfig Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
addDomainConfigParamsAddDomainConfigParamsDa

Odgovor

Vraća: AddDomainConfig200Response

deleteDomainConfig Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
domainstringDa

Odgovor

Vraća: DeleteDomainConfig200Response

getDomainConfig Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
domainstringDa

Odgovor

Vraća: GetDomainConfig200Response


getDomainConfigs Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa

Odgovor

Vraća: GetDomainConfigs200Response


patchDomainConfig Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
domainToUpdatestringDa
patchDomainConfigParamsPatchDomainConfigParamsDa

Odgovor

Vraća: GetDomainConfig200Response

putDomainConfig Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
domainToUpdatestringDa
updateDomainConfigParamsUpdateDomainConfigParamsDa

Odgovor

Vraća: GetDomainConfig200Response


createEmailTemplate Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createEmailTemplateBodyCreateEmailTemplateBodyDa

Odgovor

Vraća: CreateEmailTemplate200Response

Primer

createEmailTemplate Primer
Copy Copy
1
2const tenantId: string = "tenant_4f2b1c9e";
3const createEmailTemplateBody: CreateEmailTemplateBody = {
4 name: "New Comment Notification",
5 subject: "Someone replied to your discussion",
6 fromName: "Community Team",
7 fromAddress: "no-reply@community.example.com",
8 htmlBody: "<p>\{{comment.author}} replied: \{{comment.text}}</p>",
9 plaintextBody: "\{{comment.author}} replied: \{{comment.text}}",
10 previewText: "A new reply on a discussion you follow",
11 isDefault: false // opciona zastavica koja demonstrira upotrebu opcionog parametra
12};
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_9c4f1b2a";
3const id: string = "emailtmpl_4d2b9a5e";
4const requestorNote: string | undefined = undefined; // opcionalni metapodaci (nisu zahtevani funkcijom)
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, id);
6

deleteEmailTemplateRenderError Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
errorIdstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteEmailTemplateRenderError Primer
Copy Copy
1
2const tenantId: string = 'tenant-72f3b4';
3const templateId: string = 'email_template-9c3a1';
4let providedErrorId: string | undefined = undefined; // opciona vrednost, može biti postavljena drugde
5const errorId: string = providedErrorId ?? 'render_err-5d2f7';
6const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, templateId, errorId);
7

getEmailTemplate Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetEmailTemplate200Response

Primer

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

getEmailTemplateDefinitions Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa

Odgovor

Vraća: GetEmailTemplateDefinitions200Response

Primer

Primer getEmailTemplateDefinitions
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_acme_001';
4 const options: { includeDrafts?: boolean } = { includeDrafts: true }; // prikazan opcioni parametar
5 const templates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId, options);
6 console.log(templates);
7})();
8

getEmailTemplateRenderErrors Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
skipnumberNe

Odgovor

Vraća: GetEmailTemplateRenderErrors200Response

Primer

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

getEmailTemplates Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetEmailTemplates200Response

Primer

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

renderEmailTemplate Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
renderEmailTemplateBodyRenderEmailTemplateBodyDa
localestringNe

Odgovor

Vraća: RenderEmailTemplate200Response

Primer

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

updateEmailTemplate Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
updateEmailTemplateBodyUpdateEmailTemplateBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

getEventLog Internal Link

req tenantId urlId userIdWS

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
userIdWSstringDa
startTimenumberDa
endTimenumberNe

Odgovor

Vraća: GetEventLog200Response

Primer

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

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
userIdWSstringDa
startTimenumberDa
endTimenumberNe

Odgovor

Vraća: GetEventLog200Response

Primer

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

createFeedPost Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createFeedPostParamsCreateFeedPostParamsDa
broadcastIdstringNe
isLivebooleanNe
doSpamCheckbooleanNe
skipDupCheckbooleanNe

Odgovor

Vraća: CreateFeedPost200Response

Primer

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

createFeedPostPublic Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createFeedPostParamsCreateFeedPostParamsDa
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: CreateFeedPostPublic200Response

Primer

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

deleteFeedPostPublic Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
postIdstringDa
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: DeleteFeedPostPublic200Response

Primer

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

getFeedPosts Internal Link

req tenantId afterId

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
afterIdstringNe
limitnumberNe
tagsArrayNe

Odgovor

Vraća: GetFeedPosts200Response

Primer

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

getFeedPostsPublic Internal Link

req tenantId afterId

Parametri

NameTypeRequiredDescription
tenantIdstringDa
afterIdstringNe
limitnumberNe
tagsArrayNe
ssostringNe
isCrawlerbooleanNe
includeUserInfobooleanNe

Odgovor

Vraća: GetFeedPostsPublic200Response

Primer

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

getFeedPostsStats Internal Link

Parametri

NameTypeObaveznoOpis
tenantIdstringDa
postIdsArrayDa
ssostringNe

Odgovor

Vraća: GetFeedPostsStats200Response

Primer

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

getUserReactsPublic Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdsArrayNe
ssostringNe

Odgovor

Vraća: GetUserReactsPublic200Response

Primer

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

reactFeedPostPublic Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdstringDa
reactBodyParamsReactBodyParamsDa
isUndobooleanNe
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: ReactFeedPostPublic200Response

Primer

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

updateFeedPost Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa
feedPostFeedPostDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

updateFeedPostPublic Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
postIdstringDa
updateFeedPostParamsUpdateFeedPostParamsDa
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: CreateFeedPostPublic200Response

Primer

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

flagCommentPublic Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
isFlaggedbooleanDa
ssostringNe

Response

Vraća: FlagCommentPublic200Response

Primer

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

getGifLarge Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
largeInternalURLSanitizedstringDa

Odgovor

Vraća: GetGifLarge200Response

Primer

Primer getGifLarge
Copy Copy
1
2const tenantId: string = "tenant_9f8b7c";
3const largeInternalURLSanitized: string = "https://cdn.fastcomments.com/gifs/07d3f6_large.gif";
4const preferWebP: boolean | undefined = true; // opciona preferencija
5const urlToUse: string = preferWebP ? largeInternalURLSanitized.replace(".gif", ".webp") : largeInternalURLSanitized;
6const response: GetGifLarge200Response = await getGifLarge(tenantId, urlToUse);
7

getGifsSearch Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
searchstringDa
localestringNe
ratingstringNe
pagenumberNe

Odgovor

Vraća: GetGifsSearch200Response

Primer

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

getGifsTrending Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
localestringNe
ratingstringNe
pagenumberNe

Odgovor

Vraća: GetGifsTrending200Response

Primer

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

addHashTag Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringNe
createHashTagBodyCreateHashTagBodyNe

Odgovor

Vraća: AddHashTag200Response

Primer

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

addHashTagsBulk Internal Link


Parametri

ImeTipObaveznoOpis
tenantIdstringNe
bulkCreateHashTagsBodyBulkCreateHashTagsBodyNe

Odgovor

Vraća: AddHashTagsBulk200Response

Primer

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

deleteHashTag Internal Link

Parametri

NazivTipObaveznoOpis
tagstringDa
tenantIdstringNe
deleteHashTagRequestDeleteHashTagRequestNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

getHashTags Internal Link

Parameters

ImeTipObaveznoOpis
tenantIdstringDa
pagenumberNe

Odgovor

Vraća: GetHashTags200Response

Primer

getHashTags Primer
Copy Copy
1
2const tenantId: string = 'tenant_7f4b2c3a';
3const tagsFirstPage: GetHashTags200Response = await getHashTags(tenantId);
4const tagsSecondPage: GetHashTags200Response = await getHashTags(tenantId, 2);
5console.log(tagsFirstPage, tagsSecondPage);
6

patchHashTag Internal Link

Parametri

NazivTipObaveznoOpis
tagstringDa
tenantIdstringNe
updateHashTagBodyUpdateHashTagBodyNe

Odgovor

Vraća: PatchHashTag200Response

Primer

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

createModerator Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringYes
createModeratorBodyCreateModeratorBodyYes

Odgovor

Vraća: CreateModerator200Response

Primer

Primer createModerator
Copy Copy
1
2const tenantId: string = 'tenant_9f3b21';
3const createModeratorBody: CreateModeratorBody = {
4 moderator: {
5 name: 'Alex Rivera',
6 email: 'alex.rivera@fastcomments.io',
7 role: 'global_moderator',
8 enabled: true,
9 },
10 // prikazani opcioni parametri:
11 notifyUser: true,
12 permissions: ['delete_comment', 'edit_comment', 'ban_user'],
13 customConfig: { dashboardTheme: 'dark' } as unknown as CustomConfigParameters
14};
15const result: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
16

deleteModerator Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
sendEmailstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteModerator Primer
Copy Copy
1
2const tenantId: string = 'tenant_4f3b2c9a';
3const id: string = 'mod_9c2d1f7b';
4const sendEmail: string = 'true';
5const response: FlagCommentPublic200Response = await deleteModerator(tenantId, id, sendEmail);
6console.log(response);
7

getModerator Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetModerator200Response

Primer

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

getModerators Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetModerators200Response

Primer

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

sendInvite Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
fromNamestringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

updateModerator Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateModeratorBodyUpdateModeratorBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

deleteNotificationCount Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteNotificationCount Primer
Copy Copy
1
2const tenantId: string = 'tenant_5f3d2e1b';
3const id: string = 'notification_9a4b1c2';
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, id);
5

getCachedNotificationCount Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetCachedNotificationCount200Response

Primer

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

getNotificationCount Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
urlIdstringNe
fromCommentIdstringNe
viewedbooleanNe
typestringNe

Odgovor

Vraća: GetNotificationCount200Response

Primer

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

getNotifications Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
urlIdstringNe
fromCommentIdstringNe
viewedbooleanNe
typestringNe
skipnumberNe

Odgovor

Vraća: GetNotifications200Response

Primer

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

updateNotification Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateNotificationBodyUpdateNotificationBodyDa
userIdstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

createV1PageReact Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
titlestringNe

Odgovor

Vraća: CreateV1PageReact200Response

Primer

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

createV2PageReact Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
idstringDa
titlestringNe

Odgovor

Vraća: CreateV2PageReact200Response

Primer

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

deleteV1PageReact Internal Link

Parametri

NazivTypeObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: DeleteV1PageReact200Response

Primer

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

deleteV2PageReact Internal Link

Parametri

NameTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
idstringDa

Odgovor

Vraća: DeleteV2PageReact200Response

Primer

deleteV2PageReact Primer
Copy Copy
1
2const tenantId: string = "tenant_79021";
3const urlId: string = "blog/my-first-post";
4const id: string = "reaction_9f8b7c";
5let includeHistory: boolean | undefined = undefined; // opciona zastavica, koristi se u nekim pozivima
6
7const result: DeleteV2PageReact200Response = await deleteV2PageReact(tenantId, urlId, id);
8console.log(result);
9

getV1PageLikes Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetV1PageLikes200Response

Primer

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

getV2PageReacts Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetV2PageReacts200Response

Primer

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

getV2PageReactUsers Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
idstringDa

Odgovor

Vraća: GetV2PageReactUsers200Response

Primer

Primer getV2PageReactUsers
Copy Copy
1
2const tenantId: string = "7421";
3const urlId: string = "sports/london-marathon";
4const id: string = "reactUser-3fa85f64-5717-4562-b3fc-2c963f66afa6";
5const includeDeleted: boolean | undefined = undefined; // opciona zastavica (primer)
6
7const result: GetV2PageReactUsers200Response = await getV2PageReactUsers(tenantId, urlId, id);
8

addPage Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createAPIPageDataCreateAPIPageDataDa

Odgovor

Vraća: AddPageAPIResponse


deletePage Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: DeletePageAPIResponse

getOfflineUsers Internal Link


Prethodni komentatori na stranici koji trenutno NISU online. Sortirano po displayName. Koristite ovo nakon što iscrpite /users/online da prikažete odeljak "Members". Paginacija kursorom preko commenterName: server prolazi delimični {tenantId, urlId, commenterName} indeks od afterName unapred putem $gt, bez troška $skip.

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
afterNamestringNe
afterUserIdstringNe

Odgovor

Vraća: GetOfflineUsers200Response

Primer

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

getOnlineUsers Internal Link


Trenutno povezani posetioci stranice: osobe čije su websocket sesije trenutno pretplaćene na stranicu. Vraća anonCount + totalCount (pretplatnici u sobi, uključujući anonimne posetioce koje ne izlistavamo).

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
afterNamestringNe
afterUserIdstringNe

Odgovor

Vraća: GetOnlineUsers200Response

Primer

Primer getOnlineUsers
Copy Copy
1
2const tenantId: string = 'tenant_14f9c3';
3const urlId: string = 'article_20250615';
4const afterName: string = 'marie.curie';
5const afterUserId: string = 'u_92b7';
6const result: GetOnlineUsers200Response = await getOnlineUsers(tenantId, urlId, afterName, afterUserId);
7

getPageByURLId Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetPageByURLIdAPIResponse


getPages Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa

Odgovor

Vraća: GetPagesAPIResponse

getPagesPublic Internal Link

Lista stranica za tenanta. Koristi se u FChat desktop klijentu za popunjavanje njegove liste soba. Zahteva da enableFChat bude true u razrešenoj prilagođenoj konfiguraciji za svaku stranicu. Stranice koje zahtevaju SSO filtriraju se na osnovu grupnog pristupa korisnika koji zahteva.

Parametri

NameTypeRequiredDescription
tenantIdstringDa
cursorstringNe
limitnumberNe
qstringNe
sortByPagesSortByNe
hasCommentsbooleanNe

Odgovor

Vraća: GetPagesPublic200Response

Primer

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

getUsersInfo Internal Link

Skupne informacije o korisnicima za tenant. Na osnovu userIds vraća informacije za prikaz iz User / SSOUser. Koristi widget za komentare da obogati korisnike koji su se upravo pojavili putem presence događaja. Bez konteksta stranice: privatnost se primenjuje jednako (privatni profili su zamaskirani).

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idsstringDa

Odgovor

Vraća: GetUsersInfo200Response

Primer

Primer getUsersInfo
Copy Copy
1
2const tenantId: string = 'acme-tenant-007';
3const userIdsList: string[] = ['user_12a', 'user_34b', 'user_56c'];
4const separator: string | undefined = undefined; // opciono; ako je undefined, podrazumevano je zarez
5const ids: string = userIdsList.join(separator ?? ',');
6const usersInfo: GetUsersInfo200Response = await getUsersInfo(tenantId, ids);
7

patchPage Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateAPIPageDataUpdateAPIPageDataDa

Odgovor

Vraća: PatchPageAPIResponse


deletePendingWebhookEvent Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

getPendingWebhookEventCount Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringNe
externalIdstringNe
eventTypestringNe
typestringNe
domainstringNe
attemptCountGTnumberNe

Odgovor

Vraća: GetPendingWebhookEventCount200Response

Primer

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

getPendingWebhookEvents Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringNe
externalIdstringNe
eventTypestringNe
typestringNe
domainstringNe
attemptCountGTnumberNe
skipnumberNe

Odgovor

Vraća: GetPendingWebhookEvents200Response

Primer

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

createQuestionConfig Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createQuestionConfigBodyCreateQuestionConfigBodyDa

Odgovor

Vraća: CreateQuestionConfig200Response

Primer

Primer createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_9f3b1c2a";
3
4const createQuestionConfigBody: CreateQuestionConfigBody = {
5 name: "Product feedback",
6 key: "product_quality",
7 description: "Short survey question shown after posting a comment",
8 required: true,
9 renderingType: "singleChoice",
10 customOptions: [
11 { label: "Excellent", value: "5" },
12 { label: "Good", value: "4" },
13 { label: "Fair", value: "3" }
14 ] as QuestionConfigCustomOptionsInner[],
15 notifyModerators: false // demonstriran opcioni parametar
16};
17
18const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
19

deleteQuestionConfig Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteQuestionConfig Primer
Copy Copy
1
2const tenantId: string = 'acme-corp-47a9';
3const id: string = 'qcfg_20260615_001';
4const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5

getQuestionConfig Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetQuestionConfig200Response

Primer

Primer getQuestionConfig
Copy Copy
1
2const tenantId: string = "acme-corp-47";
3const questionId: string = "q-4f2b9a";
4const includeDrafts: boolean | undefined = undefined; // rezervisano mesto za opcioni parametar
5const result: GetQuestionConfig200Response = await getQuestionConfig(tenantId, questionId);
6console.log(result);
7

getQuestionConfigs Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetQuestionConfigs200Response

Primer

Primer getQuestionConfigs
Copy Copy
1
2const tenantId: string = "tenant_4c9f2b";
3const responseWithoutSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const skip: number = 50;
5const responseWithSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, skip);
6

updateQuestionConfig Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
updateQuestionConfigBodyUpdateQuestionConfigBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer updateQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_9f3b8a2e-4c6d-4b4f-a1b2-9e8f7d6c5b3a";
3const id: string = "q_7c2e1b4a-5d6f-4a8b-9c3d-2e1f0b9a4c5d";
4const options: QuestionConfigCustomOptionsInner[] = [
5 { value: "1", label: "Very dissatisfied" },
6 { value: "2", label: "Dissatisfied" },
7 { value: "3", label: "Neutral" },
8 { value: "4", label: "Satisfied" },
9 { value: "5", label: "Very satisfied" }
10];
11const updateQuestionConfigBody: UpdateQuestionConfigBody = {
12 label: "How satisfied are you with the article?",
13 enabled: true,
14 required: false, // prikazan opcioni parametar
15 options
16};
17const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
18

createQuestionResult Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createQuestionResultBodyCreateQuestionResultBodyDa

Odgovor

Vraća: CreateQuestionResult200Response

Primer

Primer createQuestionResult
Copy Copy
1
2const tenantId: string = 'fc-tenant-512';
3const meta: MetaItem[] = [{ key: 'source', value: 'article' }];
4const body: CreateQuestionResultBody = {
5 questionId: 'q-94',
6 userId: 'user_332',
7 answers: [{ optionId: 'opt_a', score: 1 }],
8 meta, // opciono prosleđeni metapodaci
9} as CreateQuestionResultBody;
10const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, body);
11

deleteQuestionResult Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteQuestionResult Primer
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-01";
3const id: string = "qres_9f8b7c3a";
4const response: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, id);
5const optionalResponse: FlagCommentPublic200Response | undefined = response;
6

getQuestionResult Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetQuestionResult200Response

Primer

Primer getQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a7c9';
3const questionId: string = 'q_8d4f1b2c3a';
4const options: { includeMeta?: boolean } = { includeMeta: true }; // primer opcionog parametra
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, questionId);
6const apiStatus: APIStatus | undefined = (result as unknown as { apiStatus?: APIStatus }).apiStatus;
7const question: QuestionResult | undefined = (result as unknown as { question?: QuestionResult }).question;
8

getQuestionResults Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringNe
userIdstringNe
startDatestringNe
questionIdstringNe
questionIdsstringNe
skipnumberNe

Odgovor

Vraća: GetQuestionResults200Response

Primer

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

updateQuestionResult Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateQuestionResultBodyUpdateQuestionResultBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer updateQuestionResult
Copy Copy
1
2const tenantId: string = "tenant_prod_84b2";
3const id: string = "question_9f3a";
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 outcome: "accepted",
6 confidence: 0.88,
7 moderatorId: "moderator_17",
8 notes: "Validated by automated review" // opciono polje uključeno
9};
10const result: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
11

aggregateQuestionResults Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringYes
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
timeBucketAggregateTimeBucketNo
startDateDateNo
forceRecalculatebooleanNo

Odgovor

Vraća: AggregateQuestionResults200Response

Primer

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

bulkAggregateQuestionResults Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequestDa
forceRecalculatebooleanNe

Odgovor

Vraća: BulkAggregateQuestionResults200Response

Primer

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

combineCommentsWithQuestionResults Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
questionIdstringNe
questionIdsArrayNe
urlIdstringNe
startDateDateNe
forceRecalculatebooleanNe
minValuenumberNe
maxValuenumberNe
limitnumberNe

Odgovor

Vraća: CombineCommentsWithQuestionResults200Response

Primer

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

addSSOUser Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createAPISSOUserDataCreateAPISSOUserDataDa

Odgovor

Vraća: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
deleteCommentsbooleanNe
commentDeleteModestringNe

Odgovor

Vraća: DeleteSSOUserAPIResponse

getSSOUserByEmail Internal Link


Parametri

ImeTipObaveznoOpis
tenantIdstringDa
emailstringDa

Odgovor

Vraća: GetSSOUserByEmailAPIResponse


getSSOUserById Internal Link


Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetSSOUsers200Response


patchSSOUser Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa
updateAPISSOUserDataUpdateAPISSOUserDataDa
updateCommentsbooleanNe

Odgovor

Vraća: PatchSSOUserAPIResponse

putSSOUser Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa
updateAPISSOUserDataUpdateAPISSOUserDataDa
updateCommentsbooleanNe

Odgovor

Vraća: PutSSOUserAPIResponse

Primer

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

createSubscription Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
createAPIUserSubscriptionDataCreateAPIUserSubscriptionDataDa

Odgovor

Vraća: CreateSubscriptionAPIResponse

Primer

Primer createSubscription
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-123";
3const createAPIUserSubscriptionData: CreateAPIUserSubscriptionData = {
4 userId: "user_98765",
5 planId: "pro_monthly",
6 paymentMethod: { type: "card", cardId: "card_abc123" },
7 autoRenew: true,
8 trialDays: 14, // opcioni parametar prikazan
9 metadata: { campaign: "spring_launch" } // opcioni parametar prikazan
10};
11const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
12

deleteSubscription Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe

Odgovor

Vraća: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNo

Odgovor

Vraća: GetSubscriptionsAPIResponse

Primer

Primer za getSubscriptions
Copy Copy
1
2const tenantId: string = "contoso-9a1b2c";
3const userId: string = "u-482f6";
4const subscriptions: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId);
5const userSubscriptions: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId, userId);
6

updateSubscription Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionDataDa
userIdstringNe

Odgovor

Vraća: UpdateSubscriptionAPIResponse

Primer

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

getTenantDailyUsages Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
yearNumbernumberNe
monthNumbernumberNe
dayNumbernumberNe
skipnumberNe

Odgovor

Vraća: GetTenantDailyUsages200Response

Primer

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

createTenantPackage Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createTenantPackageBodyCreateTenantPackageBodyDa

Odgovor

Vraća: CreateTenantPackage200Response

Primer

Primer createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_7890";
3const createTenantPackageBody: CreateTenantPackageBody = {
4 packageName: "Growth Plan",
5 maxSeats: 2500,
6 features: {
7 moderation: true,
8 analytics: true,
9 sso: { enabled: true, provider: "saml" }
10 },
11 billing: { interval: "monthly", priceCents: 19900 },
12 // opcionаlni parametar prikazan: notes nije obavezan, ali je naveden
13 notes: "Onboarding bundle with priority support"
14};
15const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
16

deleteTenantPackage Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const packageId: string = 'pkg-2026-06-15-001';
4const dryRun: boolean | undefined = undefined; // primer opcionog parametra (nije obavezno za funkciju)
5const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
6

getTenantPackage Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetTenantPackage200Response

Primer

Primer getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_4b8c2a9f';
3const packageId: string = 'pkg_7d3e1b5c';
4const includeMetadata: boolean | undefined = true;
5const packageResponse: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
6

getTenantPackages Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetTenantPackages200Response

Primer

Primer getTenantPackages
Copy Copy
1
2const tenantId: string = 'tenant_8421';
3const packagesWithSkip: GetTenantPackages200Response = await getTenantPackages(tenantId, 25);
4const packagesWithoutSkip: GetTenantPackages200Response = await getTenantPackages(tenantId);
5

replaceTenantPackage Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
replaceTenantPackageBodyReplaceTenantPackageBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer upotrebe replaceTenantPackage
Copy Copy
1
2const tenantId: string = "fastcomments-tenant-114";
3const id: string = "pkg-enterprise-2026-06";
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 name: "EnterpriseModeration",
6 version: "2.4.7",
7 enabled: true,
8 apiStatus: { state: "active", lastUpdated: "2026-06-10T12:00:00Z" },
9 customConfigParameters: { maxCommentLength: 1200, allowImages: true }, // uključena opcionalna podešavanja
10 voteStyle: { style: "updown" }
11};
12const result: FlagCommentPublic200Response = await replaceTenantPackage(tenantId, id, replaceTenantPackageBody);
13

updateTenantPackage Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
updateTenantPackageBodyUpdateTenantPackageBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer za updateTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a';
3const id: string = 'pkg_pro_2026';
4const updateTenantPackageBody: UpdateTenantPackageBody = {
5 name: 'Pro Plan',
6 monthlyPriceUsd: 49,
7 isActive: true,
8 features: ['moderation', 'analytics', 'sso'],
9 trialDays: 14 // prikazan opcioni parametar
10};
11const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
12

createTenantUser Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
createTenantUserBodyCreateTenantUserBodyDa

Odgovor

Vraća: CreateTenantUser200Response

Primer

createTenantUser Primer
Copy Copy
1
2const tenantId: string = "tenant_7f4a2b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "jane.doe@example.com",
5 firstName: "Jane",
6 lastName: "Doe",
7 role: "commenter",
8 approved: true,
9 displayName: "Jane D." // neobavezno: pružanje prikaznog imena
10};
11const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
12console.log(result);
13

deleteTenantUser Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
deleteCommentsstringNe
commentDeleteModestringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

Primer deleteTenantUser
Copy Copy
1
2const tenantId: string = "tenant_8f3a2b1c4d";
3const id: string = "user_62a4f9e0b7";
4const deleteComments: string = "true";
5const commentDeleteMode: string = "permanent";
6const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
7

getTenantUser Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetTenantUser200Response

Primer

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

getTenantUsers Internal Link

Parametri

NazivTypeObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetTenantUsers200Response

Primer

Primer getTenantUsers
Copy Copy
1
2const tenantId: string = 'tenant_7b8f3a2c-9e4d-4f1a';
3const skip: number = 50;
4const usersResponseDefault: GetTenantUsers200Response = await getTenantUsers(tenantId);
5const usersResponsePaged: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
6

replaceTenantUser Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
replaceTenantUserBodyReplaceTenantUserBodyDa
updateCommentsstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
redirectURLstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

updateTenantUser Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateTenantUserBodyUpdateTenantUserBodyDa
updateCommentsstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

createTenant Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
createTenantBodyCreateTenantBodyDa

Odgovor

Vraća: CreateTenant200Response

Primer

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

deleteTenant Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
surestringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primer

deleteTenant primer
Copy Copy
1
2const tenantId: string = 'tenant_742b9c';
3const flagId: string = 'flag_1a2b3c';
4const resultWithoutSure: FlagCommentPublic200Response = await deleteTenant(tenantId, flagId);
5const sureConfirmation: string = 'confirmed';
6const resultWithSure: FlagCommentPublic200Response = await deleteTenant(tenantId, flagId, sureConfirmation);
7

getTenant Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetTenant200Response

Primer

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

getTenants Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
metastringNe
skipnumberNe

Odgovor

Vraća: GetTenants200Response

Primer

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

updateTenant Internal Link

Parametri

NazivTypeObaveznoOpis
tenantIdstringDa
idstringDa
updateTenantBodyUpdateTenantBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primer

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

changeTicketState Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringYes
userIdstringYes
idstringYes
changeTicketStateBodyChangeTicketStateBodyYes

Odgovor

Vraća: ChangeTicketState200Response

Primer

Primer changeTicketState
Copy Copy
1
2const tenantId: string = 'tenant_8a7d3f4b';
3const userId: string = 'user_5d1a9b2c';
4const id: string = 'ticket_1024';
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: 'closed',
7 notifyParticipants: true, // prikaz opcionog parametra
8 comment: 'Resolved by support — follow-up not required.'
9};
10const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
11

createTicket Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringDa
createTicketBodyCreateTicketBodyDa

Odgovor

Vraća: CreateTicket200Response

Primer

Primer createTicket
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp';
3const userId: string = 'moderator_jane';
4const createTicketBody: CreateTicketBody = {
5 subject: 'Mass spam reports on article 789',
6 description: 'Multiple identical spam comments posted under article 789. Needs moderation and bulk removal.',
7 priority: 'high',
8 contactEmail: 'jane@acme-corp.com',
9 metadata: { articleId: '789', reportedCount: 12 } // primer opcionih metapodataka
10};
11const ticket: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
12

getTicket Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe

Odgovor

Vraća: GetTicket200Response

Primer

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

getTickets Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
statenumberNe
skipnumberNe
limitnumberNe

Odgovor

Vraća: GetTickets200Response

Primer

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

getTranslations Internal Link

Parametri

ImeTipObaveznoOpis
namespacestringDa
componentstringDa
localestringNe
useFullTranslationIdsbooleanNe

Odgovor

Vraća: GetTranslations200Response

Primer

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

uploadImage Internal Link

Otpremi i promeni veličinu slike

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
fileBlobDa
sizePresetSizePresetNe
urlIdstringNe

Odgovor

Vraća: UploadImageResponse


getUserBadgeProgressById Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetUserBadgeProgressById200Response

Primer

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

getUserBadgeProgressByUserId Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
userIdstringDa

Odgovor

Vraća: GetUserBadgeProgressById200Response

Primer

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

getUserBadgeProgressList Internal Link


Parametri

ImeTipObaveznoOpis
tenantIdstringDa
userIdstringNe
limitnumberNe
skipnumberNe

Odgovor

Vraća: GetUserBadgeProgressList200Response

Primer

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

createUserBadge Internal Link

Parametri

NameTipObaveznoOpis
tenantIdstringDa
createUserBadgeParamsCreateUserBadgeParamsDa

Odgovor

Vraća: CreateUserBadge200Response

Primer

Primer createUserBadge
Copy Copy
1
2const tenantId: string = "tenant_7f4b2a";
3const createUserBadgeParams: CreateUserBadgeParams = {
4 code: "top_contributor",
5 title: "Top Contributor",
6 description: "Awarded for 100 high-quality comments",
7 iconUrl: "https://cdn.fastcomments.com/badges/top_contributor.svg",
8 isActive: true,
9 criteria: { commentsRequired: 100 },
10 customConfig: { displayOnProfile: true } // opcioni parametar (demonstracija)
11};
12const result: CreateUserBadge200Response = await createUserBadge(tenantId, createUserBadgeParams);
13

deleteUserBadge Internal Link

Parameters

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: UpdateUserBadge200Response

Primer

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

getUserBadge Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetUserBadge200Response

Primer

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

getUserBadges Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
badgeIdstringNe
typenumberNe
displayedOnCommentsbooleanNe
limitnumberNe
skipnumberNe

Odgovor

Vraća: GetUserBadges200Response

Primer

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

updateUserBadge Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
updateUserBadgeParamsUpdateUserBadgeParamsDa

Odgovor

Vraća: UpdateUserBadge200Response

Primer

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

getUserNotificationCount Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
ssostringNe

Odgovor

Vraća: GetUserNotificationCount200Response

Primer

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

getUserNotifications Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringNe
pageSizenumberNe
afterIdstringNe
includeContextbooleanNe
afterCreatedAtnumberNe
unreadOnlybooleanNe
dmOnlybooleanNe
noDmbooleanNe
includeTranslationsbooleanNe
includeTenantNotificationsbooleanNe
ssostringNe

Odgovor

Vraća: GetUserNotifications200Response

Primer

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

resetUserNotificationCount Internal Link


Parametri

ImeTipObaveznoOpis
tenantIdstringDa
ssostringNe

Odgovor

Vraća: ResetUserNotifications200Response

Primer

Primer upotrebe resetUserNotificationCount
Copy Copy
1
2const tenantId: string = "tenant_8a3f2b6c";
3const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyX2QxMjM0IiwiaWF0IjoxNjI1MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
4const resetResponseWithSso: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId, ssoToken);
5const resetResponseWithoutSso: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId);
6

resetUserNotifications Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
afterIdstringNe
afterCreatedAtnumberNe
unreadOnlybooleanNe
dmOnlybooleanNe
noDmbooleanNe
ssostringNe

Odgovor

Vraća: ResetUserNotifications200Response

Primer

Primer resetUserNotifications
Copy Copy
1
2const tenantId: string = "tenant_9b1f2";
3const afterId: string = "notification_0001";
4const afterCreatedAt: number = Date.now() - 60 * 60 * 1000; // pre sat vremena
5const unreadOnly: boolean = true;
6const dmOnly: boolean = false;
7const noDm: boolean = false;
8const sso: string = "sso_session_7f2d";
9const result: ResetUserNotifications200Response = await resetUserNotifications(
10 tenantId,
11 afterId,
12 afterCreatedAt,
13 unreadOnly,
14 dmOnly,
15 noDm,
16 sso
17);
18

updateUserNotificationCommentSubscriptionStatus Internal Link

Omogućavanje ili onemogućavanje obaveštenja za određeni komentar.

Parametri

NameTypeRequiredDescription
tenantIdstringDa
notificationIdstringDa
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumDa
commentIdstringDa
ssostringNe

Odgovor

Vraća: UpdateUserNotificationStatus200Response

Primer

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

updateUserNotificationPageSubscriptionStatus Internal Link


Omogućite ili onemogućite obaveštenja za stranicu. Kada su korisnici pretplaćeni na stranicu, obaveštenja se kreiraju za nove korenske komentare, i takođe

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
urlstringDa
pageTitlestringDa
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnumDa
ssostringNe

Odgovor

Vraća: UpdateUserNotificationStatus200Response

Primer

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

updateUserNotificationStatus Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
notificationIdstringDa
newStatusUpdateUserNotificationStatusNewStatusEnumDa
ssostringNe

Odgovor

Vraća: UpdateUserNotificationStatus200Response

Primer

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

getUserPresenceStatuses Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
urlIdWSstringDa
userIdsstringDa

Odgovor

Vraća: GetUserPresenceStatuses200Response

Primer

Primer getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlIdWS: string = 'wss://comments.fastsite.com/ws/tenant_42';
4const userIds: string = 'user_9012,user_3478';
5const includePresenceMetadata: boolean | undefined = true; // primer opcionog parametra
6const presenceStatuses: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

searchUsers Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
usernameStartsWithstringNe
mentionGroupIdsArrayNe
ssostringNe
searchSectionSearchUsersSearchSectionEnumNe

Odgovor

Vraća: SearchUsers200Response

Primer

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

getUser Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetUser200Response

Primer

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

createVote Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
commentIdstringDa
directionCreateVoteDirectionEnumDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: VoteComment200Response

Primer

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

deleteVote Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
editKeystringNe

Odgovor

Vraća: DeleteCommentVote200Response

Primer

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

getVotes Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetVotes200Response

Primer

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

getVotesForUser Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: GetVotesForUser200Response

Primer

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

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.