FastComments.com

FastComments JavaScript/TypeScript SDK

Ovo je službeni JavaScript/TypeScript SDK za FastComments.

Upravljajte komentarima, korisnicima, SSO-om i moderacijom iz Node.js-a ili preglednika.

Repozitorij

Pogledajte na GitHubu


Instalacija Internal Link

npm

npm install fastcomments-sdk

API dokumentacija Internal Link


Potpuna referenca API-ja: docs/api/README.md

Kompatibilnost preglednika i poslužitelja Internal Link


Ovaj SDK koristi dvostruke ulazne točke kako bi osigurao optimalnu kompatibilnost i spriječio pogreške u izvođenju:

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

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

SDK pruža tri glavne klase API-ja:

  • DefaultApi - Zaštićene krajnje točke koje zahtijevaju vaš API ključ za autentifikaciju. Koristite ih za operacije na strani poslužitelja.
  • PublicApi - Javne krajnje točke kojima se može pristupiti bez API ključa. One se mogu pozivati izravno iz preglednika/mobilnih uređaja/itd.
  • HiddenApi - Interni/admin krajnje točke za napredne slučajeve upotrebe.

Primjer: Korištenje Public API-ja (sigurno za preglednik)

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

const publicApi = new PublicApi();

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

Primjer: Korištenje Default API-ja (samo na strani poslužitelja)

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

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

Integracija SSO (jedinstveno prijavljivanje) Internal Link

FastComments podržava SSO za integraciju s vašim postojećim sustavom autentikacije korisnika. SSO funkcionalnost dostupna je samo u server exportu jer zahtijeva kriptografske značajke Node.js.

Jednostavni SSO (samo na strani poslužitelja)

Jednostavni SSO treba generirati na strani poslužitelja i poslati klijentu:

// Kôd na strani poslužitelja (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Kreirajte jednostavni 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 vašem klijentskom kodu
// Klijentski kod može tada koristiti ovaj token s browser SDK-om

Sigurni SSO (na strani poslužitelja, preporučeno)

Sigurni SSO treba implementirati na strani poslužitelja i pruža bolju sigurnost:

// Kôd na strani poslužitelja (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Kreirajte siguran 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();

// Koristite s API pozivima na poslužitelju
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štenje u pregledniku

Korištenje SSO iz preglednika (s tokenom generiranim na serveru)

// Klijentski kod (preglednik)
import { PublicApi } from 'fastcomments-sdk/browser';

// Dohvatite SSO token s vašeg server endpointa
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 // Koristite token SSO generiran na serveru
});

SSO s kreiranjem komentara

// Na strani poslužitelja: Kreirajte 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

Dohvaćanje komentara za stranicu

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

Stvaranje 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 glas u korist, -1 za glas protiv
  }
});

Upravljanje korisnicima (potreban API ključ)

// Pretraži korisnike (zahtijeva DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

Događaji uživo (ažuriranja u stvarnom vremenu) Internal Link

Pretplatite se na događaje uživo kako biste dobili ažuriranja u stvarnom vremenu za komentare, glasove i druge aktivnosti.

Događaji na razini stranice

Slušajte događaje uživo 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',
};

// Pretplatite se na događaje uživo za stranicu
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (dobijte ovo iz getComments odgovora)
  (event: LiveEvent) => {
    console.log('Live event received:', event);
    
    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Ažurirajte svoje korisničko sučelje s novim komentarom
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Ažurirajte brojače glasova u vašem korisničkom sučelju
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }
    
    return true; // Vratite true ako je događaj obrađen
  },
  (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 (obavijesti, spominjanja itd.):

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

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

// Pretplatite se na osobni feed korisnika
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);
    
    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Prikažite obavijest u vašem korisničkom sučelju
        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');
  }
);

// Zatvorite kada završite
userSubscription.close();

Dobivanje userIdWS

Parametar userIdWS je obavezan za događaje uživo i može se dobiti iz odgovora API-ja:

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 emitiranja Internal Link


Vidjet ćete da trebate proslijediti broadcastId u nekim API pozivima. Kada primite događaje, dobit ćete ovaj ID natrag, tako da znate zanemariti događaj ako planirate optimistično primijeniti promjene na klijentu (što ćete vjerojatno htjeti učiniti jer pruža najbolji doživljaj). Ovdje proslijedite UUID. ID bi trebao biti dovoljno jedinstven da se ne pojavi dva puta u istoj sesiji preglednika.

import { v4 as uuidv4 } from 'uuid';

const response = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'page-id',
    comment: 'My comment',
    broadcastId: uuidv4() // Jedinstveni ID za ovu operaciju
  }
});

Rukovanje pogreš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);
  }
}

agregacija Internal Link

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

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
aggregationRequestAggregationRequestDa
parentTenantIdstringNe
includeStatsbooleanNe

Odgovor

Vraća: Aggregate200Response

Primjer

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

dohvatiRevizijskeZapise Internal Link

Parametri

NazivTipObveznoOpis
tenantIdstringDa
limitnumberNe
skipnumberNe
orderSORTDIRNe
afternumberNe
beforenumberNe

Odgovor

Vraća: GetAuditLogs200Response

Primjer

getAuditLogs Primjer
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; // prije tjedan dana
7const before: number = Date.now();
8const result: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, order, after, before);
9

blokirajIzKomentaraJavno Internal Link


Parametri

NameTypeObaveznoOpis
tenantIdstringDa
commentIdstringDa
publicBlockFromCommentParamsPublicBlockFromCommentParamsDa
ssostringNe

Odgovor

Vraća: BlockFromCommentPublic200Response

Primjer

Primjer 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

poništiBlokaduKomentaraJavno Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
publicBlockFromCommentParamsPublicBlockFromCommentParamsDa
ssostringNe

Odgovor

Vraća: UnBlockCommentPublic200Response

Primjer

unBlockCommentPublic Primjer
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

provjeraKomentaraZaBlokirane Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringYes
commentIdsstringYes
ssostringNo

Odgovor

Vraća: CheckedCommentsForBlocked200Response

Primjer

checkedCommentsForBlocked Primjer
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

blokirajKorisnikaIzKomentara Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
blockFromCommentParamsBlockFromCommentParamsDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: BlockFromCommentPublic200Response

Primjer

Primjer 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

kreirajKomentarJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
broadcastIdstringDa
commentDataCommentDataDa
sessionIdstringNe
ssostringNe

Odgovor

Vraća: CreateCommentPublic200Response

Primjer

Primjer createCommentPublic
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

izbrišiKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
contextUserIdstringNe
isLivebooleanNe

Odgovor

Vraća: DeleteComment200Response

Primjer

Primjer deleteComment
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

izbrišiKomentarJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
editKeystringNe
ssostringNe

Odgovor

Vraća: DeleteCommentPublic200Response

Primjer

Primjer 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

izbrišiGlasZaKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
voteIdstringDa
urlIdstringDa
broadcastIdstringDa
editKeystringNe
ssostringNe

Odgovor

Vraća: DeleteCommentVote200Response

Primjer

Primjer 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

prijaviKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: FlagComment200Response

Primjer

flagComment Primjer
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

dohvatiKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetComment200Response

Primjer

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

dohvatiKomentare Internal Link

Parametri

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

Odgovor

Vraća: GetComments200Response

Primjer

getComments Primjer
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

dohvatiKomentareJavno 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

Primjer

Primjer 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

dohvatiTekstKomentara Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
editKeystringNe
ssostringNe

Odgovor

Vraća: GetCommentText200Response

Primjer

Primjer getCommentText
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

dohvatiImenaKorisnikaGlasovaZaKomentar Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
dirnumberDa
ssostringNe

Odgovor

Vraća: GetCommentVoteUserNames200Response

Primjer

Primjer getCommentVoteUserNames
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

zaključajKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: LockComment200Response

Primjer

Primjer lockComment
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

zakačiKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: PinComment200Response

Primjer

pinComment Primjer
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

spremiKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createCommentParamsCreateCommentParamsDa
isLivebooleanNe
doSpamCheckbooleanNe
sendEmailsbooleanNe
populateNotificationsbooleanNe

Odgovor

Vraća: SaveComment200Response

Primjer

Primjer 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

masovnoSpremanjeKomentara Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createCommentParamsArrayDa
isLivebooleanNe
doSpamCheckbooleanNe
sendEmailsbooleanNe
populateNotificationsbooleanNe

Odgovor

Vraća: Array<SaveComment200Response

Primjer

saveCommentsBulk Primjer
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

postaviTekstKomentara Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
commentTextUpdateRequestCommentTextUpdateRequestDa
editKeystringNe
ssostringNe

Odgovor

Vraća: SetCommentText200Response

Primjer

Primjer 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

poništiBlokaduKorisnikaZaKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
unBlockFromCommentParamsUnBlockFromCommentParamsDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: UnBlockCommentPublic200Response

Primjer

Primjer unBlockUserFromComment
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

poništiPrijavuKomentara Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: FlagComment200Response

Primjer

Primjer 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

otključajKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: LockComment200Response

Primjer

unLockComment Primjer
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

ukloniZakačeniKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
broadcastIdstringDa
ssostringNe

Odgovor

Vraća: PinComment200Response

Primjer

Primjer 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

ažurirajKomentar Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updatableCommentParamsUpdatableCommentParamsDa
contextUserIdstringNe
doSpamCheckbooleanNe
isLivebooleanNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

glasajZaKomentar Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
urlIdstringDa
broadcastIdstringDa
voteBodyParamsVoteBodyParamsDa
sessionIdstringNe
ssostringNe

Odgovor

Vraća: VoteComment200Response

Primjer

voteComment Primjer
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

dohvatiKomentareZaKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
userIdstringNe
directionSortDirectionsNe
repliesToUserIdstringNe
pagenumberNe
includei10nbooleanNe
localestringNe
isCrawlerbooleanNe

Odgovor

Vraća: GetCommentsForUser200Response

Primjer

Primjer 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 izostavljen
11 undefined, // repliesToUserId izostavljen
12 page,
13 includei10n,
14 locale,
15 isCrawler
16);
17
18console.log(comments);
19

dodajKonfiguracijuDomena Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
addDomainConfigParamsAddDomainConfigParamsDa

Odgovor

Vraća: AddDomainConfig200Response


izbrišiKonfiguracijuDomena Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
domainstringDa

Odgovor

Vraća: DeleteDomainConfig200Response


dohvatiKonfiguracijuDomena Internal Link


Parametri

NameTypeRequiredDescription
tenantIdstringDa
domainstringDa

Odgovor

Vraća: GetDomainConfig200Response


dohvatiKonfiguracijeDomena Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa

Odgovor

Vraća: GetDomainConfigs200Response


djelomičnoIzmijeniKonfiguracijuDomena Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
domainToUpdatestringDa
patchDomainConfigParamsPatchDomainConfigParamsDa

Odgovor

Vraća: GetDomainConfig200Response


zamijeniKonfiguracijuDomena Internal Link


Parametri

NazivTipObveznoOpis
tenantIdstringDa
domainToUpdatestringDa
updateDomainConfigParamsUpdateDomainConfigParamsDa

Odgovor

Vraća: GetDomainConfig200Response


kreirajPredložakEmaila Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
createEmailTemplateBodyCreateEmailTemplateBodyDa

Odgovor

Vraća: CreateEmailTemplate200Response

Primjer

Primjer createEmailTemplate
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 // neobvezna zastavica koja demonstrira upotrebu opcionalnog parametra
12};
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

izbrišiPredložakEmaila Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_9c4f1b2a";
3const id: string = "emailtmpl_4d2b9a5e";
4const requestorNote: string | undefined = undefined; // neobavezni metapodaci (nisu obavezni za funkciju)
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, id);
6

izbrišiPogreškuRenderiranjaPredloškaEmaila Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
errorIdstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

dohvatiPredložakEmaila Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetEmailTemplate200Response

Primjer

Primjer 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

dohvatiDefinicijePredložakaEmaila Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa

Odgovor

Vraća: GetEmailTemplateDefinitions200Response

Primjer

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

dohvatiPogreškeRenderiranjaPredložakaEmaila Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
skipnumberNe

Odgovor

Vraća: GetEmailTemplateRenderErrors200Response

Primjer

getEmailTemplateRenderErrors Primjer
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

dohvatiPredloškeEmaila Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetEmailTemplates200Response

Primjer

Primjer 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

renderirajPredložakEmaila Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
renderEmailTemplateBodyRenderEmailTemplateBodyDa
localestringNe

Odgovor

Vraća: RenderEmailTemplate200Response

Primjer

Primjer 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

ažurirajPredložakEmaila Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateEmailTemplateBodyUpdateEmailTemplateBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

dohvatiDnevnikDogađaja Internal Link

req tenantId urlId userIdWS

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
userIdWSstringDa
startTimenumberDa
endTimenumberNe

Odgovor

Vraća: GetEventLog200Response

Primjer

getEventLog Primjer
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

dohvatiGlobalniDnevnikDogađaja Internal Link

req tenantId urlId userIdWS

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
userIdWSstringDa
startTimenumberDa
endTimenumberNe

Odgovor

Vraća: GetEventLog200Response

Primjer

getGlobalEventLog Primjer
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

kreirajObjavuFeeda Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
createFeedPostParamsCreateFeedPostParamsDa
broadcastIdstringNe
isLivebooleanNe
doSpamCheckbooleanNe
skipDupCheckbooleanNe

Odgovor

Vraća: CreateFeedPost200Response

Primjer

createFeedPost Primjer
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

kreirajObjavuFeedaJavno Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
createFeedPostParamsCreateFeedPostParamsDa
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: CreateFeedPostPublic200Response

Primjer

Primjer 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

izbrišiObjavuFeedaJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdstringDa
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: DeleteFeedPostPublic200Response

Primjer

Primjer 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

dohvatiObjaveFeeda Internal Link

req tenantId afterId

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
afterIdstringNe
limitnumberNe
tagsArrayNe

Odgovor

Vraća: GetFeedPosts200Response

Primjer

Primjer getFeedPosts
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

dohvatiObjaveFeedaJavno Internal Link

req tenantId afterId

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
afterIdstringNe
limitnumberNe
tagsArrayNe
ssostringNe
isCrawlerbooleanNe
includeUserInfobooleanNe

Odgovor

Vraća: GetFeedPostsPublic200Response

Primjer

getFeedPostsPublic Primjer
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

dohvatiStatistikuObjavaFeeda Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdsArrayDa
ssostringNe

Odgovor

Vraća: GetFeedPostsStats200Response

Primjer

Primjer getFeedPostsStats
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

dohvatiKorisničkeReakcijeJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdsArrayNe
ssostringNe

Odgovor

Vraća: GetUserReactsPublic200Response

Primjer

getUserReactsPublic Primjer
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

reagirajNaObjavuFeedaJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdstringDa
reactBodyParamsReactBodyParamsDa
isUndobooleanNe
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: ReactFeedPostPublic200Response

Primjer

Primjer 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

ažurirajObjavuFeeda Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
feedPostFeedPostDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

ažurirajObjavuFeedaJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
postIdstringDa
updateFeedPostParamsUpdateFeedPostParamsDa
broadcastIdstringNe
ssostringNe

Odgovor

Vraća: CreateFeedPostPublic200Response

Primjer

updateFeedPostPublic Primjer
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

prijaviKomentarJavno Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
isFlaggedbooleanDa
ssostringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

dohvatiVelikiGif Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
largeInternalURLSanitizedstringDa

Odgovor

Vraća: GetGifLarge200Response

Primjer

Primjer 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; // neobavezna preferenca
5const urlToUse: string = preferWebP ? largeInternalURLSanitized.replace(".gif", ".webp") : largeInternalURLSanitized;
6const response: GetGifLarge200Response = await getGifLarge(tenantId, urlToUse);
7

pretražiGifove Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
searchstringDa
localestringNe
ratingstringNe
pagenumberNe

Odgovor

Vraća: GetGifsSearch200Response

Primjer

Primjer 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

dohvatiNajpopularnijeGifove Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
localestringNe
ratingstringNe
pagenumberNe

Odgovor

Vraća: GetGifsTrending200Response

Primjer

Primjer 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

dodajHashtag Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringNe
createHashTagBodyCreateHashTagBodyNe

Odgovor

Vraća: AddHashTag200Response

Primjer

Primjer 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

dodajHashtageMasovno Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringNe
bulkCreateHashTagsBodyBulkCreateHashTagsBodyNe

Odgovor

Vraća: AddHashTagsBulk200Response

Primjer

Primjer addHashTagsBulk
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

izbrišiHashtag Internal Link

Parametri

NameTypeRequiredDescription
tagstringDa
tenantIdstringNe
deleteHashTagRequestDeleteHashTagRequestNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

dohvatiHashtage Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
pagenumberNe

Odgovor

Vraća: GetHashTags200Response

Primjer

Primjer getHashTags
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

djelomičnoIzmijeniHashtag Internal Link

Parametri

NazivTipObaveznoOpis
tagstringDa
tenantIdstringNe
updateHashTagBodyUpdateHashTagBodyNe

Odgovor

Vraća: PatchHashTag200Response

Primjer

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

kreirajModeratora Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createModeratorBodyCreateModeratorBodyDa

Odgovor

Vraća: CreateModerator200Response

Primjer

Primjer 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 neobavezni 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

izbrišiModeratora Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
sendEmailstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteModerator
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

dohvatiModeratora Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetModerator200Response

Primjer

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

dohvatiModeratore Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetModerators200Response

Primjer

Primjer getModerators
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

pošaljiPozivnicu Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
fromNamestringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

ažurirajModeratora Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateModeratorBodyUpdateModeratorBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

izbrišiBrojObavijesti Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringYes
idstringYes

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

dohvatiPredmemoriraniBrojObavijesti Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetCachedNotificationCount200Response

Primjer

getCachedNotificationCount Primjer
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

dohvatiBrojObavijesti Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
userIdstringNe
urlIdstringNe
fromCommentIdstringNe
viewedbooleanNe
typestringNe

Odgovor

Vraća: GetNotificationCount200Response

Primjer

getNotificationCount Primjer
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

dohvatiObavijesti Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
urlIdstringNe
fromCommentIdstringNe
viewedbooleanNe
typestringNe
skipnumberNe

Odgovor

Vraća: GetNotifications200Response

Primjer

Primjer 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

ažurirajObavijest Internal Link

Parametri

NazivTipObveznoOpis
tenantIdstringDa
idstringDa
updateNotificationBodyUpdateNotificationBodyDa
userIdstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

kreirajV1ReakcijuStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
titlestringNe

Odgovor

Vraća: CreateV1PageReact200Response

Primjer

Primjer createV1PageReact
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

kreirajV2ReakcijuStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
idstringDa
titlestringNe

Odgovor

Vraća: CreateV2PageReact200Response

Primjer

Primjer 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

izbrišiV1ReakcijuStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: DeleteV1PageReact200Response

Primjer

Primjer deleteV1PageReact
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

izbrišiV2ReakcijuStranice Internal Link

Parametri

NazivTipObveznoOpis
tenantIdstringDa
urlIdstringDa
idstringDa

Odgovor

Vraća: DeleteV2PageReact200Response

Primjer

Primjer deleteV2PageReact
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; // neobavezna zastavica, koristi se u nekim pozivima
6
7const result: DeleteV2PageReact200Response = await deleteV2PageReact(tenantId, urlId, id);
8console.log(result);
9

dohvatiV1LajkoveStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetV1PageLikes200Response

Primjer

getV1PageLikes Primjer
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

dohvatiV2ReakcijeStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetV2PageReacts200Response

Primjer

Primjer 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

dohvatiKorisnikeV2ReakcijaStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
idstringDa

Odgovor

Vraća: GetV2PageReactUsers200Response

Primjer

getV2PageReactUsers Primjer
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; // neobavezna zastavica (demonstracija)
6
7const result: GetV2PageReactUsers200Response = await getV2PageReactUsers(tenantId, urlId, id);
8

dodajStranicu Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createAPIPageDataCreateAPIPageDataDa

Odgovor

Vraća: AddPageAPIResponse


izbrišiStranicu Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: DeletePageAPIResponse


dohvatiOfflineKorisnike Internal Link

Prošli komentatori na stranici koji trenutno nisu online. Sortirano po displayName. Koristite ovo nakon iscrpljivanja /users/online za prikaz odjeljka "Članovi". Kursor paginacija po commenterName: server prolazi djelomični indeks {tenantId, urlId, commenterName} index od afterName prema naprijed koristeći $gt, bez troška $skip.

Parametri

NameTypeRequiredDescription
tenantIdstringDa
urlIdstringDa
afterNamestringNe
afterUserIdstringNe

Odgovor

Vraća: GetOfflineUsers200Response

Primjer

Primjer getOfflineUsers
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

dohvatiOnlineKorisnike Internal Link


Gledatelji stranice koji su trenutno online: osobe čija je websocket sesija trenutno pretplaćena na stranicu. Vraća anonCount + totalCount (pretplatnici sobe u cijelosti, uključujući anonimne gledatelje koje ne navodimo).

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
afterNamestringNe
afterUserIdstringNe

Odgovor

Vraća: GetOnlineUsers200Response

Primjer

getOnlineUsers Primjer
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

dohvatiStranicuPoURLId Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetPageByURLIdAPIResponse


dohvatiStranice Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa

Odgovor

Vraća: GetPagesAPIResponse

dohvatiStraniceJavno Internal Link

Nabrajanje stranica za najmoprimca. Koristi ga FChat desktop klijent za popunjavanje popisa soba. Zahtijeva da je enableFChat postavljeno na true u razriješenoj prilagođenoj konfiguraciji za svaku stranicu. Stranice koje zahtijevaju SSO filtriraju se prema pristupnim grupama korisnika koji šalje zahtjev.

Parametri

NameTypeRequiredDescription
tenantIdstringDa
cursorstringNe
limitnumberNe
qstringNe
sortByPagesSortByNe
hasCommentsbooleanNe

Odgovor

Vraća: GetPagesPublic200Response

Primjer

getPagesPublic Primjer
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

dohvatiInformacijeOKorisnicima Internal Link

Masovne informacije o korisnicima za tenant. Za zadane userIds vraća prikazne informacije iz User / SSOUser. Koristi widget komentara za obogaćivanje korisnika koji su se upravo pojavili putem događaja prisutnosti. Bez konteksta stranice: privatnost se primjenjuje jednako (privatni profili su maskirani).

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idsstringDa

Odgovor

Vraća: GetUsersInfo200Response

Primjer

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

djelomičnoIzmijeniStranicu Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateAPIPageDataUpdateAPIPageDataDa

Odgovor

Vraća: PatchPageAPIResponse


izbrišiNeobrađeniWebhookDogađaj Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

deletePendingWebhookEvent Primjer
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

dohvatiBrojNeobrađenihWebhookDogađaja Internal Link

Parametri

NameTypeObaveznoOpis
tenantIdstringDa
commentIdstringNe
externalIdstringNe
eventTypestringNe
typestringNe
domainstringNe
attemptCountGTnumberNe

Odgovor

Vraća: GetPendingWebhookEventCount200Response

Primjer

Primjer getPendingWebhookEventCount
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 izostavljen
12 eventType,
13 undefined, // type izostavljen
14 domain,
15 attemptCountGT
16);
17

dohvatiNeobrađeneWebhookDogađaje Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
commentIdstringNe
externalIdstringNe
eventTypestringNe
typestringNe
domainstringNe
attemptCountGTnumberNe
skipnumberNe

Odgovor

Vraća: GetPendingWebhookEvents200Response

Primjer

getPendingWebhookEvents Primjer
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

kreirajKonfiguracijuPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createQuestionConfigBodyCreateQuestionConfigBodyDa

Odgovor

Vraća: CreateQuestionConfig200Response

Primjer

Primjer 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 neobavezni parametar
16};
17
18const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
19

izbrišiKonfiguracijuPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

dohvatiKonfiguracijuPitanja Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetQuestionConfig200Response

Primjer

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

dohvatiKonfiguracijePitanja Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetQuestionConfigs200Response

Primjer

getQuestionConfigs Primjer
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

ažurirajKonfiguracijuPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateQuestionConfigBodyUpdateQuestionConfigBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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, // neobavezni parametar prikazan
15 options
16};
17const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
18

kreirajRezultatPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringYes
createQuestionResultBodyCreateQuestionResultBodyYes

Odgovor

Vraća: CreateQuestionResult200Response

Primjer

Primjer 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, // neobavezni metapodaci
9} as CreateQuestionResultBody;
10const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, body);
11

izbrišiRezultatPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteQuestionResult
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

dohvatiRezultatPitanja Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetQuestionResult200Response

Primjer

Primjer getQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a7c9';
3const questionId: string = 'q_8d4f1b2c3a';
4const options: { includeMeta?: boolean } = { includeMeta: true }; // demonstracija neobveznog 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

dohvatiRezultatePitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringNe
userIdstringNe
startDatestringNe
questionIdstringNe
questionIdsstringNe
skipnumberNe

Odgovor

Vraća: GetQuestionResults200Response

Primjer

Primjer 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

ažurirajRezultatPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateQuestionResultBodyUpdateQuestionResultBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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" // neobavezno polje uključeno
9};
10const result: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
11

agregacijaRezultataPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
questionIdstringNe
questionIdsArrayNe
urlIdstringNe
timeBucketAggregateTimeBucketNe
startDateDateNe
forceRecalculatebooleanNe

Odgovor

Vraća: AggregateQuestionResults200Response

Primjer

aggregateQuestionResults Primjer
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

masovnaAgregacijaRezultataPitanja Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequestDa
forceRecalculatebooleanNe

Odgovor

Vraća: BulkAggregateQuestionResults200Response

Primjer

Primjer 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

kombinirajKomentareSRazultatiPitanja Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
questionIdstringNe
questionIdsArrayNe
urlIdstringNe
startDateDateNe
forceRecalculatebooleanNe
minValuenumberNe
maxValuenumberNe
limitnumberNe

Odgovor

Vraća: CombineCommentsWithQuestionResults200Response

Primjer

Primjer 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

dodajSSOKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createAPISSOUserDataCreateAPISSOUserDataDa

Odgovor

Vraća: AddSSOUserAPIResponse

izbrišiSSOKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
deleteCommentsbooleanNe
commentDeleteModestringNe

Odgovor

Vraća: DeleteSSOUserAPIResponse


dohvatiSSOKorisnikaPoEmailu Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
emailstringDa

Odgovor

Vraća: GetSSOUserByEmailAPIResponse


dohvatiSSOKorisnikaPoId Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetSSOUserByIdAPIResponse


dohvatiSSOKorisnike Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetSSOUsers200Response


djelomičnoIzmijeniSSOKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateAPISSOUserDataUpdateAPISSOUserDataDa
updateCommentsbooleanNe

Odgovor

Vraća: PatchSSOUserAPIResponse


zamijeniSSOKorisnika Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
updateAPISSOUserDataUpdateAPISSOUserDataDa
updateCommentsbooleanNe

Odgovor

Vraća: PutSSOUserAPIResponse

Primjer

putSSOUser Primjer
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

kreirajPretplatu Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createAPIUserSubscriptionDataCreateAPIUserSubscriptionDataDa

Odgovor

Vraća: CreateSubscriptionAPIResponse

Primjer

Primjer 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, // neobavezni parametar prikazan
9 metadata: { campaign: "spring_launch" } // neobavezni parametar prikazan
10};
11const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
12

izbrišiPretplatu Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe

Odgovor

Vraća: DeleteSubscriptionAPIResponse

dohvatiPretplate Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe

Odgovor

Vraća: GetSubscriptionsAPIResponse

Primjer

getSubscriptions Primjer
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

ažurirajPretplatu Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionDataDa
userIdstringNe

Odgovor

Vraća: UpdateSubscriptionAPIResponse

Primjer

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

dohvatiDnevnuUpotrebuNajmoprimca Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
yearNumbernumberNe
monthNumbernumberNe
dayNumbernumberNe
skipnumberNe

Odgovor

Vraća: GetTenantDailyUsages200Response

Primjer

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

kreirajPaketNajmoprimca Internal Link

Parameters

NazivTipObaveznoOpis
tenantIdstringDa
createTenantPackageBodyCreateTenantPackageBodyDa

Odgovor

Vraća: CreateTenantPackage200Response

Primjer

Primjer 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 // neobavezni parametar prikazan: notes nije obavezan, ali je naveden
13 notes: "Onboarding bundle with priority support"
14};
15const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
16

izbrišiPaketNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

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

dohvatiPaketNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetTenantPackage200Response

Primjer

Primjer 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

dohvatiPaketeNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetTenantPackages200Response

Primjer

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

zamijeniPaketNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
replaceTenantPackageBodyReplaceTenantPackageBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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 neobavezna podešavanja
10 voteStyle: { style: "updown" }
11};
12const result: FlagCommentPublic200Response = await replaceTenantPackage(tenantId, id, replaceTenantPackageBody);
13

ažurirajPaketNajmoprimca Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa
updateTenantPackageBodyUpdateTenantPackageBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

updateTenantPackage Primjer
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 // demonstracija neobaveznog parametra
10};
11const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
12

kreirajKorisnikaNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createTenantUserBodyCreateTenantUserBodyDa

Odgovor

Vraća: CreateTenantUser200Response

Primjer

createTenantUser Primjer
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

izbrišiKorisnikaNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
deleteCommentsstringNe
commentDeleteModestringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

dohvatiKorisnikaNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetTenantUser200Response

Primjer

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

dohvatiKorisnikeNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
skipnumberNe

Odgovor

Vraća: GetTenantUsers200Response

Primjer

Primjer 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

zamijeniKorisnikaNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
replaceTenantUserBodyReplaceTenantUserBodyDa
updateCommentsstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

Primjer

Primjer 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

ažurirajKorisnikaNajmoprimca Internal Link

Parametri

ImeTipObaveznoOpis
tenantIdstringDa
idstringDa
updateTenantUserBodyUpdateTenantUserBodyDa
updateCommentsstringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

kreirajNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createTenantBodyCreateTenantBodyDa

Odgovor

Vraća: CreateTenant200Response

Primjer

Primjer 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

izbrišiNajmoprimca Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
surestringNe

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer deleteTenant
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

dohvatiNajmoprimca Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringYes
idstringYes

Odgovor

Vraća: GetTenant200Response

Primjer

Primjer 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

dohvatiNajmoprimce Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
metastringNe
skipnumberNe

Odgovor

Vraća: GetTenants200Response

Primjer

Primjer 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

ažurirajNajmoprimca Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa
updateTenantBodyUpdateTenantBodyDa

Odgovor

Vraća: FlagCommentPublic200Response

Primjer

Primjer 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

promijeniStanjeZahtjeva Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
userIdstringDa
idstringDa
changeTicketStateBodyChangeTicketStateBodyDa

Odgovor

Vraća: ChangeTicketState200Response

Primjer

Primjer 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, // neobavezni parametar
8 comment: 'Resolved by support — follow-up not required.'
9};
10const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
11

kreirajZahtjev Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringDa
createTicketBodyCreateTicketBodyDa

Odgovor

Vraća: CreateTicket200Response

Primjer

Primjer 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 } // primjer opcionalnih metapodataka
10};
11const ticket: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
12

dohvatiZahtjev Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
userIdstringNe

Odgovor

Vraća: GetTicket200Response

Primjer

Primjer getTicket
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

dohvatiZahtjeve Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
statenumberNe
skipnumberNe
limitnumberNe

Odgovor

Vraća: GetTickets200Response

Primjer

Primjer 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

dohvatiPrijevode Internal Link

Parametri

NazivTipObaveznoOpis
namespacestringDa
componentstringDa
localestringNe
useFullTranslationIdsbooleanNe

Odgovor

Vraća: GetTranslations200Response

Primjer

Primjer 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

učitajSliku Internal Link


Otpremi i promijeni veličinu slike

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
fileBlobDa
sizePresetSizePresetNe
urlIdstringNe

Odgovor

Vraća: UploadImageResponse


dohvatiNapredakZnačkePoId Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetUserBadgeProgressById200Response

Primjer

getUserBadgeProgressById Primjer
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

dohvatiNapredakZnačkePoIdKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringDa

Odgovor

Vraća: GetUserBadgeProgressById200Response

Primjer

Primjer 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

dohvatiPopisNapretkaZnačkiKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
userIdstringNe
limitnumberNe
skipnumberNe

Odgovor

Vraća: GetUserBadgeProgressList200Response

Primjer

Primjer 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

kreirajZnačkuKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
createUserBadgeParamsCreateUserBadgeParamsDa

Odgovor

Vraća: CreateUserBadge200Response

Primjer

Primjer 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 } // demonstrira neobavezni parametar
11};
12const result: CreateUserBadge200Response = await createUserBadge(tenantId, createUserBadgeParams);
13

izbrišiZnačkuKorisnika Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
idstringDa

Odgovor

Vraća: UpdateUserBadge200Response

Primjer

Primjer 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

dohvatiZnačkuKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetUserBadge200Response

Primjer

Primjer 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

dohvatiZnačkeKorisnika Internal Link

Parametri

NameTypeRequiredDescription
tenantIdstringDa
userIdstringNe
badgeIdstringNe
typenumberNe
displayedOnCommentsbooleanNe
limitnumberNe
skipnumberNe

Odgovor

Vraća: GetUserBadges200Response

Primjer

getUserBadges Primjer
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

ažurirajZnačkuKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
updateUserBadgeParamsUpdateUserBadgeParamsDa

Odgovor

Vraća: UpdateUserBadge200Response

Primjer

Primjer 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

dohvatiBrojObavijestiKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringYes
ssostringNo

Odgovor

Vraća: GetUserNotificationCount200Response

Primjer

Primjer 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

dohvatiObavijestiKorisnika Internal Link


Parametri

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

Odgovor

Vraća: GetUserNotifications200Response

Primjer

getUserNotifications Primjer
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

poništiBrojObavijestiKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
ssostringNe

Odgovor

Vraća: ResetUserNotifications200Response

Primjer

Primjer 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

poništiObavijestiKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
afterIdstringNe
afterCreatedAtnumberNe
unreadOnlybooleanNe
dmOnlybooleanNe
noDmbooleanNe
ssostringNe

Odgovor

Vraća: ResetUserNotifications200Response

Primjer

Primjer resetUserNotifications
Copy Copy
1
2const tenantId: string = "tenant_9b1f2";
3const afterId: string = "notification_0001";
4const afterCreatedAt: number = Date.now() - 60 * 60 * 1000; // prije 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

ažurirajStatusPretplateNaKomentareKorisnika Internal Link

Omogući ili onemogući obavijesti za određeni komentar.

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
notificationIdstringDa
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumDa
commentIdstringDa
ssostringNe

Odgovor

Vraća: UpdateUserNotificationStatus200Response

Primjer

Primjer 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

ažurirajStatusPretplateNaStranicuKorisnika Internal Link

Omogućite ili onemogućite obavijesti za stranicu. Kada su korisnici pretplaćeni na stranicu, obavijesti se stvaraju za nove glavne komentare, kao i

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
urlstringDa
pageTitlestringDa
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnumDa
ssostringNe

Odgovor

Vraća: UpdateUserNotificationStatus200Response

Primjer

Primjer 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

ažurirajStatusObavijestiKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
notificationIdstringDa
newStatusUpdateUserNotificationStatusNewStatusEnumDa
ssostringNe

Odgovor

Vraća: UpdateUserNotificationStatus200Response

Primjer

Primjer 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

dohvatiStatusePrisutnostiKorisnika Internal Link

Parametri

NazivTipObveznoOpis
tenantIdstringDa
urlIdWSstringDa
userIdsstringDa

Odgovor

Vraća: GetUserPresenceStatuses200Response

Primjer

getUserPresenceStatuses Primjer
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; // primjer neobaveznog parametra
6const presenceStatuses: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

pretražiKorisnike Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
usernameStartsWithstringNe
mentionGroupIdsArrayNe
ssostringNe
searchSectionSearchUsersSearchSectionEnumNe

Odgovor

Vraća: SearchUsers200Response

Primjer

Primjer searchUsers
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

dohvatiKorisnika Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa

Odgovor

Vraća: GetUser200Response

Primjer

getUser Primjer
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

kreirajGlas Internal Link

Parametri

NameTipObaveznoOpis
tenantIdstringDa
commentIdstringDa
directionCreateVoteDirectionEnumDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: VoteComment200Response

Primjer

Primjer 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

izbrišiGlas Internal Link

Parametri

NazivTipObaveznoOpis
tenantIdstringDa
idstringDa
editKeystringNe

Odgovor

Vraća: DeleteCommentVote200Response

Primjer

Primjer deleteVote
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

dohvatiGlasove Internal Link

Parametri

NazivTipObveznoOpis
tenantIdstringDa
urlIdstringDa

Odgovor

Vraća: GetVotes200Response

Primjer

Primjer 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

dohvatiGlasoveZaKorisnika Internal Link


Parametri

NazivTipObaveznoOpis
tenantIdstringDa
urlIdstringDa
userIdstringNe
anonUserIdstringNe

Odgovor

Vraća: GetVotesForUser200Response

Primjer

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

Doprinosi

Doprinosi su dobrodošli! Molimo posjetite GitHub repozitorij za smjernice o doprinosu.