FastComments.com

FastComments JavaScript/TypeScript SDK


ื–ื” ื”-SDK ื”ืจืฉืžื™ ืฉืœ JavaScript/TypeScript ืขื‘ื•ืจ FastComments.

SDK ืจืฉืžื™ ืฉืœ JavaScript/TypeScript ืขื‘ื•ืจ ื”-FastComments API

ืžืื’ืจ

ืฆืคื” ื‘-GitHub


ื”ืชืงื ื” Internal Link

npm install fastcomments-sdk

ืชื™ืขื•ื“ API Internal Link


ืžื“ืจื™ืš API ืžืœื: docs/api/README.md

ืชืื™ืžื•ืช ื“ืคื“ืคืŸ ืœืขื•ืžืช ืฉืจืช Internal Link


ื”-SDK ื”ื–ื” ืžืฉืชืžืฉ ื‘-ืฉืชื™ ื ืงื•ื“ื•ืช ื›ื ื™ืกื” ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืชืื™ืžื•ืช ืžื™ื˜ื‘ื™ืช ื•ืœืžื ื•ืข ืฉื’ื™ืื•ืช ื‘ื–ืžืŸ ืจื™ืฆื”:

  • fastcomments-sdk/browser - ื’ืจืกื” ื‘ื˜ื•ื—ื” ืœื“ืคื“ืคืŸ ืขื fetch ืžื•ื‘ื ื”
  • fastcomments-sdk/server - ื’ืจืกื” ืžืœืื” ืœ-Node.js ืขื ืชืžื™ื›ื” ื‘-SSO
  • fastcomments-sdk (ื‘ืจื™ืจืช ืžื—ื“ืœ) - ื˜ื™ืคื•ืกื™ื ื‘ืœื‘ื“, ื‘ื˜ื•ื— ืœื™ื™ื‘ื ื‘ื›ืœ ืžืงื•ื

API ืฆื™ื‘ื•ืจื™ ืœืขื•ืžืช API ืžืื•ื‘ื˜ื— Internal Link

The SDK ืžืกืคืง ืฉืœื•ืฉ ืžื—ืœืงื•ืช API ืขื™ืงืจื™ื•ืช:

  • DefaultApi - ื ืงื•ื“ื•ืช ืงืฆื” ืžืื•ื‘ื˜ื—ื•ืช ืฉื“ื•ืจืฉื•ืช ืืช ืžืคืชื— ื”-API ืฉืœืš ืœืื™ืžื•ืช. ื”ืฉืชืžืฉ ื‘ื”ืŸ ืขื‘ื•ืจ ืคืขื•ืœื•ืช ื‘ืฆื“ ื”ืฉืจืช.
  • PublicApi - ื ืงื•ื“ื•ืช ืงืฆื” ืฆื™ื‘ื•ืจื™ื•ืช ืฉื ื™ืชืŸ ืœื’ืฉืช ืืœื™ื”ืŸ ืœืœื ืžืคืชื— API. ื ื™ืชืŸ ืœืงืจื•ื ืœื”ืŸ ื™ืฉื™ืจื•ืช ืžื“ืคื“ืคื ื™ื/ืžื›ืฉื™ืจื™ื ื ื™ื™ื“ื™ื/ื•ื›ื•'.
  • HiddenApi - ื ืงื•ื“ื•ืช ืงืฆื” ืคื ื™ืžื™ื•ืช/ืžื ื”ืœื™ื•ืช ืœืฉื™ืžื•ืฉื™ื ืžืชืงื“ืžื™ื.

ื“ื•ื’ืžื”: ืฉื™ืžื•ืฉ ื‘-Public API (ื‘ื˜ื•ื— ืœื“ืคื“ืคืŸ)

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

const publicApi = new PublicApi();

// ืงื‘ืœ ืชื’ื•ื‘ื•ืช ืขื‘ื•ืจ ื“ืฃ (ืื™ืŸ ืฆื•ืจืš ื‘ืžืคืชื— API)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

ื“ื•ื’ืžื”: ืฉื™ืžื•ืฉ ื‘-Default API (ืฆื“ ืฉืจืช ื‘ืœื‘ื“)

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

const config = new Configuration({
  apiKey: 'your-api-key' // ืฉืžื•ืจ ื–ืืช ื‘ืกื•ื“!
});
const defaultApi = new DefaultApi(config);

// ืงื‘ืœ ืชื’ื•ื‘ื•ืช ืขื ื’ื™ืฉื” ืžื ื”ืœื™ืช ืžืœืื”
const response = await defaultApi.getComments({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

ืื™ื ื˜ื’ืจืฆื™ื” ืฉืœ SSO (ื›ื ื™ืกื” ื™ื—ื™ื“ื”) Internal Link

FastComments ืชื•ืžืš ื‘-SSO ื›ื“ื™ ืœื”ืฉืชืœื‘ ื‘ืžืขืจื›ืช ืื™ืžื•ืช ื”ืžืฉืชืžืฉื™ื ื”ืงื™ื™ืžืช ืฉืœืš. ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช SSO ื–ืžื™ื ื” ืจืง ื‘ื’ืจืกืช ื”ืฉืจืช ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ื“ื•ืจืฉืช ื™ื›ื•ืœื•ืช crypto ืฉืœ Node.js.

SSO ืคืฉื•ื˜ (ืฆื“ ืฉืจืช ื‘ืœื‘ื“)

ื™ืฉ ืœื™ืฆื•ืจ SSO ืคืฉื•ื˜ ื‘ืฆื“ ื”ืฉืจืช ื•ืœืฉืœื•ื— ืื•ืชื• ืืœ ื”ืœืงื•ื—:

// ืงื•ื“ ืฆื“ ืฉืจืช (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// ื™ืฆื™ืจืช SSO ืคืฉื•ื˜ ื‘ืืžืฆืขื•ืช ืขื–ืจ ืžื•ื‘ื ื”  
const userData = {
  username: 'john_doe',
  email: 'john@example.com',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg'
};

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

const ssoToken = sso.createToken();

// ืฉืœื— ืืช ssoToken ืœืงื•ื“ ื‘ืฆื“ ื”ืœืงื•ื—
// ืงื•ื“ ื‘ืฆื“ ื”ืœืงื•ื— ื™ื›ื•ืœ ืื– ืœื”ืฉืชืžืฉ ื‘ื˜ื•ืงืŸ ื–ื” ืขื ื”-SDK ืœื“ืคื“ืคืŸ

SSO ืžืื•ื‘ื˜ื— (ืฆื“ ืฉืจืช, ืžื•ืžืœืฅ)

ื™ืฉ ืœื™ื™ืฉื SSO ืžืื•ื‘ื˜ื— ื‘ืฆื“ ื”ืฉืจืช ื•ื”ื•ื ืžืกืคืง ืื‘ื˜ื—ื” ื˜ื•ื‘ื” ื™ื•ืชืจ:

// ืงื•ื“ ืฆื“ ืฉืจืช (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// ื™ืฆื™ืจืช SSO ืžืื•ื‘ื˜ื— ื‘ืืžืฆืขื•ืช ื”ืขื–ืจ ื”ืžื•ื‘ื ื”
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

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

const ssoConfig = sso.prepareToSend();

// Use with API calls on the server
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// Or send ssoConfig to client for browser usage

ืฉื™ืžื•ืฉ ื‘-SSO ืžื”ื“ืคื“ืคืŸ (ืขื ื˜ื•ืงืŸ ืฉื ื•ืฆืจ ื‘ืฉืจืช)

// ืงื•ื“ ื‘ืฆื“ ื”ืœืงื•ื— (ื“ืคื“ืคืŸ)
import { PublicApi } from 'fastcomments-sdk/browser';

// ืงื‘ืœ ื˜ื•ืงืŸ SSO ืžื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ื”ืฉืจืช ืฉืœืš
const ssoToken = await fetch('/api/sso-token').then(r => r.json());

const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: ssoToken // ื”ืฉืชืžืฉ ื‘ื˜ื•ืงืŸ SSO ืฉื ื•ืฆืจ ื‘ืฉืจืช
});

SSO ืขื ื™ืฆื™ืจืช ืชื’ื•ื‘ื”

// ืฆื“ ืฉืจืช: ืฆื•ืจ SSO ื•ืชื’ื•ื‘ื”
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

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

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

ืžืงืจื™ ืฉื™ืžื•ืฉ ื ืคื•ืฆื™ื Internal Link

ืงื‘ืœืช ืชื’ื•ื‘ื•ืช ืœืขืžื•ื“

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

ื™ืฆื™ืจืช ืชื’ื•ื‘ื”

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

ื”ืฆื‘ืขื” ืขืœ ืชื’ื•ื‘ื”

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 ืœื”ืฆื‘ืขื” ื‘ืขื“, -1 ืœื”ืฆื‘ืขื” ื ื’ื“
  }
});

ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื (ื“ื•ืจืฉ ืžืคืชื— API)

// ื—ืคืฉ ืžืฉืชืžืฉื™ื (ื“ื•ืจืฉ DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

ืื™ืจื•ืขื™ื ื—ื™ื™ื (ืขื“ื›ื•ื ื™ื ื‘ื–ืžืŸ ืืžืช) Internal Link

ื”ื™ืจืฉื ืœืื™ืจื•ืขื™ื ื—ื™ื™ื ื›ื“ื™ ืœืงื‘ืœ ืขื“ื›ื•ื ื™ื ื‘ื–ืžืŸ ืืžืช ืขืœ ืชื’ื•ื‘ื•ืช, ื”ืฆื‘ืขื•ืช ื•ืคืขื™ืœื•ื™ื•ืช ื ื•ืกืคื•ืช.

ืื™ืจื•ืขื™ื ื‘ืจืžืช ื”ื“ืฃ

ื”ืื–ืŸ ืœืื™ืจื•ืขื™ื ื—ื™ื™ื ื‘ื“ืฃ ืžืกื•ื™ื (ืชื’ื•ื‘ื•ืช, ื”ืฆื‘ืขื•ืช ื•ื›ื•ืณ):

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

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

// ื”ื™ืจืฉื ืœืื™ืจื•ืขื™ื ื—ื™ื™ื ืขื‘ื•ืจ ื“ืฃ
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (ืงื‘ืœ ื–ืืช ืžืชื•ืš ื”ืชื’ื•ื‘ื” ืฉืœ getComments)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // ืขื“ื›ืŸ ืืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœืš ืขื ื”ืชื’ื•ื‘ื” ื”ื—ื“ืฉื”
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // ืขื“ื›ืŸ ืืช ืกืคื™ืจื•ืช ื”ื”ืฆื‘ืขื•ืช ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœืš
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // ื”ื—ื–ืจ true ืื ื”ืื™ืจื•ืข ื˜ื•ืคืœ
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// ืกื’ื•ืจ ืืช ื”ืžื ื•ื™ ื›ืฉืกื™ื™ืžืช
subscription.close();

ื”ื™ืจืฉื ืœืื™ืจื•ืขื™ ืžืฉืชืžืฉ

ื”ืื–ืŸ ืœืื™ืจื•ืขื™ื ืกืคืฆื™ืคื™ื™ื ืœืžืฉืชืžืฉ (ื”ืชืจืื•ืช, ืื–ื›ื•ืจื™ื ื•ื›ื•ืณ):

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

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

// ื”ื™ืจืฉื ืœืคื™ื“ ื”ืื™ืฉื™ ืฉืœ ื”ืžืฉืชืžืฉ
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // ื”ืฆื’ ื”ื•ื“ืขื” ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœืš
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }

    return true;
  },
  (isConnected: boolean) => {
    console.log('User feed connection:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// ืกื’ื•ืจ ื›ืฉืกื™ื™ืžืช
userSubscription.close();

ืงื‘ืœืช userIdWS

ืคืจืžื˜ืจ userIdWS ื ื“ืจืฉ ืขื‘ื•ืจ ืื™ืจื•ืขื™ื ื—ื™ื™ื ื•ื ื™ืชืŸ ืœื”ืฉื™ื’ื• ืžืชืฉื•ื‘ื•ืช API:

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

// ื—ืœืฅ ืืช userIdWS ืžื”ืชื’ื•ื‘ื”
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœื”ื™ืจืฉื ืœืื™ืจื•ืขื™ื ื—ื™ื™ื
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

ืžื–ื”ื™ ืฉื™ื“ื•ืจ Internal Link

ืชืจืื” ืฉืขืœื™ืš ืœื”ืขื‘ื™ืจ broadcastId ื‘ื—ืœืง ืžืงืจื™ืื•ืช ื”-API. ื›ืฉืืชื” ืžืงื‘ืœ ืื™ืจื•ืขื™ื, ืชืงื‘ืœ ื—ื–ืจื” ืืช ื”โ€‘ID ื”ื–ื”, ื›ืš ืชื“ืข ืœื”ืชืขืœื ืžื”ืื™ืจื•ืข ืื ืืชื” ืžืชื›ื ืŸ ืœื™ื™ืฉื ืฉื™ื ื•ื™ื™ื ื‘ืื•ืคื˜ื™ืžื™ื•ืช ืžืฆื“ ื”ืœืงื•ื— (ืžื” ืฉืกื‘ื™ืจ ืฉืชืจืฆื” ืœืขืฉื•ืช ื›ื™ื•ื•ืŸ ืฉื–ื” ืžืกืคืง ืืช ื—ื•ื•ื™ื™ืช ื”ืžืฉืชืžืฉ ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ). ื”ืขื‘ืจ ื›ืืŸ UUID. ื”โ€‘ID ืฆืจื™ืš ืœื”ื™ื•ืช ื™ื™ื—ื•ื“ื™ ืžืกืคื™ืง ื›ื“ื™ ืฉืœื ื™ื•ืคื™ืข ืคืขืžื™ื™ื ื‘ืื•ืชื• ืžื•ืฉื‘ ื‘ื“ืคื“ืคืŸ.

import { v4 as uuidv4 } from 'uuid';

const response = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'page-id',
    comment: 'My comment',
    broadcastId: uuidv4() // ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ ืœืคืขื•ืœื” ื–ื•
  }
});

ื˜ื™ืคื•ืœ ื‘ืฉื’ื™ืื•ืช Internal Link

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

ืื’ืจื’ืฆื™ื” Internal Link

ืžืื—ื“ ืžืกืžื›ื™ื ืขืœ ื™ื“ื™ ืงื™ื‘ื•ืฆื (ืื ื ืžืกืจ groupBy) ื•ื™ื™ืฉื•ื ืžืกืคืจ ืคืขื•ืœื•ืช. ื ืชืžื›ื•ืช ืคืขื•ืœื•ืช ืฉื•ื ื•ืช (ืœืžืฉืœ sum, countDistinct, avg ื•ื›ื•').

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
aggregationRequest AggregationRequest ื›ืŸ
parentTenantId string ืœื
includeStats boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AggregationResponse


ืงื‘ืœืช ื™ื•ืžื ื™ ื‘ื™ืงื•ืจืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
limit number ืœื
skip number ืœื
order SORTDIR ืœื
after number ืœื
before number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetAuditLogs200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getAuditLogs
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = 'tenant_9b8f6c';
4 const limit: number = 50;
5 const skip: number = 0;
6 const order: SORTDIR = 'desc';
7 const after: number = Date.now() - 7 * 24 * 60 * 60 * 1000;
8 const response: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, order, after);
9 console.log(response);
10}
11main();
12

ื—ืกื™ืžื” ืžืชื’ื•ื‘ื” ืฆื™ื‘ื•ืจื™ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
publicBlockFromCommentParams PublicBlockFromCommentParams ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: BlockFromCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-blockFromCommentPublic
Copy Copy
1
2const tenantId: string = "site_7f9b2e";
3const commentId: string = "comment_2026-03-25_001";
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: "Repeated harassment and targeted abuse",
6 blockDurationDays: 90,
7 includeHistory: true,
8 notifyModeratorTeam: true
9};
10const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakePayload.signature";
11const result: BlockFromCommentPublic200Response = await blockFromCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

ื‘ื™ื˜ื•ืœ ื—ืกื™ืžื” ืฉืœ ืชื’ื•ื‘ื” ืฆื™ื‘ื•ืจื™ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
publicBlockFromCommentParams PublicBlockFromCommentParams ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UnBlockCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-unBlockCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_42e8a1';
3const commentId: string = 'cmt_9b3f2d';
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: 'abusive_language',
6 blockedByModeratorId: 'mod_17',
7 note: 'Targeted harassment; review complete',
8 unblockRequestedAt: new Date().toISOString()
9};
10const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
11const result: UnBlockCommentPublic200Response = await unBlockCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

ื‘ื“ื™ืงืช ืชื’ื•ื‘ื•ืช ื—ืกื•ืžื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentIds string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CheckedCommentsForBlocked200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-checkedCommentsForBlocked
Copy Copy
1
2const tenantId: string = 'tenant_4f3b2a1e';
3const commentIds: string = 'c_1001,c_1002,c_1003';
4const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIn0.Sf4ke7nQP3mZx9v2';
5
6const resultWithoutSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds);
7const resultWithSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds, ssoToken);
8

ื—ืกื™ืžืช ืžืฉืชืžืฉ ืžืชื•ืš ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
blockFromCommentParams BlockFromCommentParams ื›ืŸ
userId string ืœื
anonUserId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: BlockFromCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-blockUserFromComment
Copy Copy
1
2const tenantId: string = "tenant_12345";
3const id: string = "comment_67890";
4const blockFromCommentParams: BlockFromCommentParams = {
5 reason: "Repeated abusive language",
6 blockDurationHours: 168,
7 blockReplies: true,
8 notifyAuthor: true
9};
10const userId: string = "user_abc123";
11const anonUserId: string = "anon_xyz789";
12const result: BlockFromCommentPublic200Response = await blockUserFromComment(tenantId, id, blockFromCommentParams, userId, anonUserId);
13

ืฆื•ืจ ืชื’ื•ื‘ื” ืฆื™ื‘ื•ืจื™ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlId string ื›ืŸ
broadcastId string ื›ืŸ
commentData CommentData ื›ืŸ
sessionId string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateCommentPublic200Response

ื“ื•ื’ืžื”

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

ืžื—ืง ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
contextUserId string ืœื
isLive boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteComment
Copy Copy
1
2const tenantId: string = 'tenant_7b3f2a';
3const commentId: string = 'cmt_8a1f4d2b';
4const contextUserId: string = 'user_102';
5const isLive: boolean = true;
6const result: DeleteComment200Response = await deleteComment(tenantId, commentId, contextUserId, isLive);
7

ืžื—ืง ืชื’ื•ื‘ื” ืฆื™ื‘ื•ืจื™ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
broadcastId string ื›ืŸ
editKey string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_4f2c9b';
3const commentId: string = 'comment-7c3a9f2d';
4const broadcastId: string = 'article-2026-03-20';
5const editKey: string | undefined = 'ek_pub_abc12345';
6const sso: string | undefined = 'sso_eyJhbGciOiJIUzI1Ni';
7
8const result: DeleteCommentPublic200Response = await deleteCommentPublic(
9 tenantId,
10 commentId,
11 broadcastId,
12 editKey,
13 sso
14);
15

ืžื—ืง ื”ืฆื‘ืขื” ืขืœ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
commentId string ื›ืŸ
voteId string ื›ืŸ
urlId string ื›ืŸ
broadcastId string ื›ืŸ
editKey string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteCommentVote200Response

ื“ื•ื’ืžื”

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

ืกืžืŸ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ
userId string ืœื
anonUserId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-flagComment
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const id: string = 'comment_7f3a2b9e';
4const userId: string = 'user_jdoe_1001';
5const anonUserId: string = 'anon_3f2b_visitor';
6const result: FlagComment200Response = await flagComment(tenantId, id, userId, anonUserId);
7

ืงื‘ืœ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetComment200Response

ื“ื•ื’ืžื”

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

ืงื‘ืœ ืชื’ื•ื‘ื•ืช Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
page number ืœื
limit number ืœื
skip number ืœื
asTree boolean ืœื
skipChildren number ืœื
limitChildren number ืœื
maxTreeDepth number ืœื
urlId string ืœื
userId string ืœื
anonUserId string ืœื
contextUserId string ืœื
hashTag string ืœื
parentId string ืœื
direction SortDirections ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetComments200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getComments
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // page (ืขืžื•ื“)
6 20, // limit (ื”ื’ื‘ืœื”)
7 0, // skip (ื“ื™ืœื•ื’)
8 true, // asTree (ื›ืขืฅ)
9 1, // skipChildren (ื“ื™ืœื•ื’ ืขืœ ื™ืœื“ื™ื)
10 3, // limitChildren (ื”ื’ื‘ืœืช ื™ืœื“ื™ื)
11 4, // maxTreeDepth (ืขื•ืžืง ืžืจื‘ื™ ืฉืœ ื”ืขืฅ)
12 'articles/2026/new-product-launch', // urlId (ืžื–ื”ื” URL)
13 'user_7890', // userId (ืžื–ื”ื” ืžืฉืชืžืฉ)
14 'anon_4f3b2', // anonUserId (ืžื–ื”ื” ืžืฉืชืžืฉ ืื ื•ื ื™ืžื™)
15 undefined, // contextUserId (ืžื–ื”ื” ืžืฉืชืžืฉ ื‘ื”ืงืฉืจ)
16 '#launch', // hashTag (ื”ืืฉื˜ืื’)
17 undefined // parentId (ืžื–ื”ื” ื”ื•ืจื”)
18);
19

ืงื‘ืœ ืชื’ื•ื‘ื•ืช ืฆื™ื‘ื•ืจื™ื•ืช Internal Link

req tenantId urlId

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlId string ื›ืŸ
page number ืœื
direction SortDirections ืœื
sso string ืœื
skip number ืœื
skipChildren number ืœื
limit number ืœื
limitChildren number ืœื
countChildren boolean ืœื
fetchPageForCommentId string ืœื
includeConfig boolean ืœื
countAll boolean ืœื
includei10n boolean ืœื
locale string ืœื
modules string ืœื
isCrawler boolean ืœื
includeNotificationCount boolean ืœื
asTree boolean ืœื
maxTreeDepth number ืœื
useFullTranslationIds boolean ืœื
parentId string ืœื
searchText string ืœื
hashTags Array ืœื
userId string ืœื
customConfigStr string ืœื
afterCommentId string ืœื
beforeCommentId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetCommentsPublic200Response

ื“ื•ื’ืžื”

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

ืงื‘ืœ ื˜ืงืกื˜ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
editKey string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetCommentText200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getCommentText
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const commentId: string = 'cmt_7890b';
4const editKey: string = 'edit_4f2d9b7c';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
6
7const result: GetCommentText200Response = await getCommentText(tenantId, commentId, editKey, sso);
8

ืงื‘ืœืช ืฉืžื•ืช ืžืฉืชืžืฉื™ื ืฉื”ืฆื‘ื™ืขื• ืขืœ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
dir number ื›ืŸ
sso string ืœื

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: GetCommentVoteUserNames200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืฉืœ getCommentVoteUserNames
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_4f2c1e';
4 const commentId: string = 'cmt_9a7b3d';
5 const dir: number = 1;
6 const resultUpvotes: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dir);
7 const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakepayload.signature';
8 const dirDown: number = -1;
9 const resultDownvotes: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dirDown, sso);
10 console.log(resultUpvotes, resultDownvotes);
11})();
12

ื ืขืœ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
broadcastId string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: LockComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-lockComment
Copy Copy
1
2const tenantId: string = "tenant_prod_8f3a2b";
3const commentId: string = "cmt_5d7e9a92";
4const broadcastId: string = "broadcast_2026_03_25_1400";
5const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature";
6const resultWithSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId, ssoToken);
7const resultWithoutSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId);
8

ื ืขืฅ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
broadcastId string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: PinComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช pinComment
Copy Copy
1
2const tenantId: string = "tenant_4f2b9a";
3const commentId: string = "cmt_9f8e7d6c";
4const broadcastId: string = "brd_live_concert_2026-03-25";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_payload_signature";
6
7const result: PinComment200Response = await pinComment(tenantId, commentId, broadcastId, sso);
8

ืฉืžื•ืจ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
createCommentParams CreateCommentParams ื›ืŸ
isLive boolean ืœื
doSpamCheck boolean ืœื
sendEmails boolean ืœื
populateNotifications boolean ืœื

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: SaveComment200Response

ื“ื•ื’ืžื”

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

ืฉืžื™ืจื” ืžืจื•ื‘ื” ืฉืœ ืชื’ื•ื‘ื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
createCommentParams Array ื›ืŸ
isLive boolean ืœื
doSpamCheck boolean ืœื
sendEmails boolean ืœื
populateNotifications boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: Array<SaveComment200Response

ื“ื•ื’ืžื”

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

ื”ื’ื“ืจ ื˜ืงืกื˜ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
broadcastId string ื›ืŸ
commentTextUpdateRequest CommentTextUpdateRequest ื›ืŸ
editKey string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: SetCommentText200Response

ื“ื•ื’ืžื”

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

ื‘ื™ื˜ื•ืœ ื—ืกื™ืžืช ืžืฉืชืžืฉ ืžืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
unBlockFromCommentParams UnBlockFromCommentParams ื›ืŸ
userId string ืœื
anonUserId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UnBlockCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืฉืœ unBlockUserFromComment
Copy Copy
1
2const tenantId: string = 'tenant_87f3e1';
3const id: string = 'comment_9b2a4f';
4const unBlockFromCommentParams: UnBlockFromCommentParams = {
5 reason: 'Reviewed by moderation team โ€” reinstated',
6 moderatorId: 'mod_21',
7 unblockedAt: new Date().toISOString()
8};
9const userId: string = 'user_42';
10const anonUserId: string = 'anon_e7f9';
11const result: UnBlockCommentPublic200Response = await unBlockUserFromComment(tenantId, id, unBlockFromCommentParams, userId, anonUserId);
12

ื‘ื˜ืœ ืกื™ืžื•ืŸ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
userId string ืœื
anonUserId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-unFlagComment
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const commentId: string = 'cmt_9f8e7d6c';
4const userId: string = 'user_72b4a1c9';
5const anonUserId: string = 'anon_3d2c1b0a';
6const response: FlagComment200Response = await unFlagComment(tenantId, commentId, userId, anonUserId);
7

ืคืชื— ื ืขื™ืœืช ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
broadcastId string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: LockComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-unLockComment
Copy Copy
1
2const tenantId: string = 'tenant_9d4f2b';
3const commentId: string = 'cmt_8a3e1f';
4const broadcastId: string = 'broadcast_2026_03_25';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
6
7const result: LockComment200Response = await unLockComment(tenantId, commentId, broadcastId, sso);
8

ื‘ื˜ืœ ื ืขื™ืฆื” ืฉืœ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
commentId string ื›ืŸ
broadcastId string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: PinComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-unPinComment
Copy Copy
1
2const tenantId: string = 'tenant_7f9d2a3b';
3const commentId: string = 'comment_842b9c1f';
4const broadcastId: string = 'bcast_frontpage_202603';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exampleSignature';
6
7const result: PinComment200Response = await unPinComment(tenantId, commentId, broadcastId, sso);
8

ืขื“ื›ืŸ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string Yes
id string Yes
updatableCommentParams UpdatableCommentParams Yes
contextUserId string No
doSpamCheck boolean No
isLive boolean No

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

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

ื”ืฆื‘ื™ืข ืขืœ ืชื’ื•ื‘ื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
commentId string ื›ืŸ
urlId string ื›ืŸ
broadcastId string ื›ืŸ
voteBodyParams VoteBodyParams ื›ืŸ
sessionId string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: VoteComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-voteComment
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c';
3const commentId: string = 'cmt_42f3a1';
4const urlId: string = 'articles/ai-trends-2026';
5const broadcastId: string = 'web';
6const voteBodyParams: VoteBodyParams = { vote: 1, reason: 'Insightful and on-topic' };
7const sessionId: string = 'sess_6d2b4c9e';
8const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
9const result: VoteComment200Response = await voteComment(tenantId, commentId, urlId, broadcastId, voteBodyParams, sessionId, sso);
10

ื”ื•ืกืฃ ืชืฆื•ืจืช ื“ื•ืžื™ื™ืŸ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
addDomainConfigParams AddDomainConfigParams ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AddDomainConfig200Response


ืžื—ืง ืชืฆื•ืจืช ื“ื•ืžื™ื™ืŸ Internal Link


ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
domain string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteDomainConfig200Response


ืงื‘ืœ ืชืฆื•ืจืช ื“ื•ืžื™ื™ืŸ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
domain string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetDomainConfig200Response


ืงื‘ืœ ืชืฆื•ืจื•ืช ื“ื•ืžื™ื™ืŸ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetDomainConfigs200Response


ืขื“ื›ืŸ ื—ืœืงื™ืช ืชืฆื•ืจืช ื“ื•ืžื™ื™ืŸ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
domainToUpdate string ื›ืŸ
patchDomainConfigParams PatchDomainConfigParams ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetDomainConfig200Response


ื”ื—ืœืฃ ืชืฆื•ืจืช ื“ื•ืžื™ื™ืŸ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื“ืจื•ืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
domainToUpdate string ื›ืŸ
updateDomainConfigParams UpdateDomainConfigParams ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetDomainConfig200Response


ืฆื•ืจ ืชื‘ื ื™ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
createEmailTemplateBody CreateEmailTemplateBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateEmailTemplate200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_7a9f3c2b";
3const customConfig: CustomConfigParameters = { smtpHost: "smtp.fastmail.com", smtpPort: 587, useTLS: true };
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Account Notification",
6 subject: "Your ACME account was updated",
7 fromEmail: "no-reply@acme-corp.com",
8 replyTo: "support@acme-corp.com",
9 html: "<p>Hi {{user.firstName}}, your account settings were changed.</p>",
10 text: "Hi {{user.firstName}}, your account settings were changed.",
11 isActive: true,
12 description: "Used for transactional account update emails",
13 customConfig
14};
15const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
16

ืžื—ืง ืชื‘ื ื™ืช ืื™ืžื™ื™ืœ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteEmailTemplate
Copy Copy
1
2const tenantId: string = 'tenant_7f4c9d1e';
3const templateId: string = 'tmpl_welcome_2024-03';
4const notifyAdmin: boolean | undefined = true; // ื“ื•ื’ืžื” ืœืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™
5
6const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
7

ืžื—ืง ืฉื’ื™ืืช ืจื™ื ื“ื•ืจ ืฉืœ ืชื‘ื ื™ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
errorId string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteEmailTemplateRenderError
Copy Copy
1
2const tenantId: string = 'tenant_7f3b4c2a';
3const templateEnvironment: string | undefined = 'production'; // ื‘ื•ืจืจ ืกื‘ื™ื‘ื” ืื•ืคืฆื™ื•ื ืœื™
4const id: string = `emailTemplates/${templateEnvironment ?? 'staging'}/welcome_v2`;
5const errorId: string = 'err_5a9d2f1c';
6const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
7console.log(result);
8

ืงื‘ืœ ืชื‘ื ื™ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetEmailTemplate200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getEmailTemplate
Copy Copy
1
2const tenantId: string = "acme-marketing-042";
3const templateId: string = "tpl_welcome_2026";
4const result: GetEmailTemplate200Response = await getEmailTemplate(tenantId, templateId);
5const template: CustomEmailTemplate | undefined = result.template;
6const subject: string | undefined = template?.subject;
7const customParams: CustomConfigParameters | undefined = template?.customConfigParameters;
8

ืงื‘ืœ ื”ื’ื“ืจื•ืช ืชื‘ื ื™ื•ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetEmailTemplateDefinitions200Response

ื“ื•ื’ืžื”

getEmailTemplateDefinitions ื“ื•ื’ืžื”
Copy Copy
1
2const tenantId: string = 'tenant_acme_eu_01';
3const templates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4console.log('Email template definitions loaded for', tenantId, templates);
5

ืงื‘ืœ ืฉื’ื™ืื•ืช ืจื™ื ื“ื•ืจ ืฉืœ ืชื‘ื ื™ื•ืช ืื™ืžื™ื™ืœ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetEmailTemplateRenderErrors200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getEmailTemplateRenderErrors
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-tenant-42';
4 const id: string = 'tmpl_3fa85f64-5717-4562-b3fc-2c963f66afa6';
5 const skip: number = 20;
6 const result: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
7 console.log(result);
8})();
9

ืงื‘ืœ ืชื‘ื ื™ื•ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetEmailTemplates200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getEmailTemplates
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = 'tenant_5f3a9c2b';
4 const templates: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
5 const skip: number = 20;
6 const pagedTemplates: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
7 console.log(templates, pagedTemplates);
8}
9main();
10

ื”ืจืฅ ืจื™ื ื“ื•ืจ ืฉืœ ืชื‘ื ื™ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
renderEmailTemplateBody RenderEmailTemplateBody ื›ืŸ
locale string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: RenderEmailTemplate200Response

ื“ื•ื’ืžื”

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

ืขื“ื›ืŸ ืชื‘ื ื™ืช ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string Yes
id string Yes
updateEmailTemplateBody UpdateEmailTemplateBody Yes

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

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

ืงื‘ืœ ื™ื•ืžืŸ ืื™ืจื•ืขื™ื Internal Link

req tenantId urlId userIdWS

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
urlId string ื›ืŸ
userIdWS string ื›ืŸ
startTime number ื›ืŸ
endTime number ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetEventLog200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getEventLog
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const urlId: string = 'article-2026-03-25';
4const userIdWS: string | undefined = undefined; // ืขืจืš ืžืงื•ืจ ืื•ืคืฆื™ื•ื ืœื™
5const startTime: number = Date.parse('2026-03-01T00:00:00Z');
6const endTime: number = Date.parse('2026-03-25T23:59:59Z');
7
8const eventLogResponse: GetEventLog200Response = await getEventLog(
9 tenantId,
10 urlId,
11 userIdWS ?? 'ws_user_8b1f',
12 startTime,
13 endTime
14);
15

ืงื‘ืœ ื™ื•ืžืŸ ืื™ืจื•ืขื™ื ื’ืœื•ื‘ืœื™ Internal Link

req tenantId urlId userIdWS

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
urlId string ื›ืŸ
userIdWS string ื›ืŸ
startTime number ื›ืŸ
endTime number ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetEventLog200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getGlobalEventLog
Copy Copy
1
2const tenantId: string = "tenant-84b2f1";
3const urlId: string = "article-6721";
4const userIdWS: string = "ws-conn-9a3c";
5const startTime: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // ืœืคื ื™ 7 ื™ืžื™ื
6const endTimeOptional: number | undefined = undefined; // ืกื•ืฃ ื˜ื•ื•ื— ื–ืžืŸ ืื•ืคืฆื™ื•ื ืœื™
7const endTime: number = endTimeOptional ?? Date.now();
8const eventLog: GetEventLog200Response = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime, endTime);
9

ืฆื•ืจ ืคื•ืกื˜ ืคื™ื“ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
createFeedPostParams CreateFeedPostParams ื›ืŸ
broadcastId string ืœื
isLive boolean ืœื
doSpamCheck boolean ืœื
skipDupCheck boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateFeedPost200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช createFeedPost
Copy Copy
1
2const tenantId: string = "tenant_7f3b9a";
3const createFeedPostParams: CreateFeedPostParams = {
4 title: "Weekly Product Update โ€” March 2026",
5 body: "We've shipped performance improvements and bug fixes across the web client. See the release notes for details.",
6 authorId: "user_86fa2b",
7 allowComments: true,
8 media: [
9 {
10 url: "https://cdn.example.com/images/update-march.png",
11 mimeType: "image/png",
12 caption: "Performance graph",
13 assets: [{ url: "https://cdn.example.com/images/update-march@2x.png", width: 1600, height: 900 }]
14 }
15 ],
16 links: [{ url: "https://www.example.com/release-notes/march-2026", title: "Release notes" }]
17};
18const broadcastId: string = "broadcast_prod_updates_202603";
19const isLive: boolean = false;
20const doSpamCheck: boolean = true;
21const skipDupCheck: boolean = false;
22const result: CreateFeedPost200Response = await createFeedPost(tenantId, createFeedPostParams, broadcastId, isLive, doSpamCheck, skipDupCheck);
23

ืฆื•ืจ ืคื•ืกื˜ ืคื™ื“ ืฆื™ื‘ื•ืจื™ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
createFeedPostParams CreateFeedPostParams ื›ืŸ
broadcastId string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateFeedPostPublic200Response

ื“ื•ื’ืžื”

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

ืžื—ืง ืคื•ืกื˜ ืคื™ื“ ืฆื™ื‘ื•ืจื™ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
postId string ื›ืŸ
broadcastId string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteFeedPostPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_5f8a9b3c";
3const postId: string = "post_a1b2c3d4";
4const broadcastId: string = "broadcast_2026-03-25T10:00:00Z";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwiaWF0IjoxNjE5MjM5MjAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6
7const resultWithOptional: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId, broadcastId, sso);
8const resultRequiredOnly: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId);
9

ืงื‘ืœ ืคื•ืกื˜ื™ื ื‘ืคื™ื“ Internal Link

req tenantId afterId

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
afterId string ืœื
limit number ืœื
tags Array ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetFeedPosts200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getFeedPosts
Copy Copy
1
2const initialPage: GetFeedPosts200Response = await getFeedPosts('tenant_9f1b3d', undefined, 20, ['sports', 'local']);
3const nextPage: GetFeedPosts200Response = await getFeedPosts('tenant_9f1b3d', 'post_abc123', 20, ['sports', 'local']);
4

ืงื‘ืœ ืคื•ืกื˜ื™ื ื‘ืคื™ื“ ืฆื™ื‘ื•ืจื™ื™ื Internal Link

req tenantId afterId

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
afterId string ืœื
limit number ืœื
tags Array ืœื
sso string ืœื
isCrawler boolean ืœื
includeUserInfo boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetFeedPostsPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getFeedPostsPublic
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const afterId: string = 'fp_20260301_042';
4const limit: number = 25;
5const tags: Array<string> = ['technology', 'announcement'];
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiamRvZSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
7const isCrawler: boolean = false;
8const includeUserInfo: boolean = true;
9const response: GetFeedPostsPublic200Response = await getFeedPostsPublic(tenantId, afterId, limit, tags, sso, isCrawler, includeUserInfo);
10

ืงื‘ืœ ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืคื•ืกื˜ื™ื ื‘ืคื™ื“ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
postIds Array ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetFeedPostsStats200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getFeedPostsStats
Copy Copy
1
2const tenantId: string = 'tenant_9b2f1c4a';
3const postIds: Array<string> = [
4 '8f14e45f-ea82-4c7a-b6b2-1a2b3c4d5e6f',
5 'd0e1f2a3-b4c5-6d7e-8f90-1234567890ab'
6];
7const sso: string = 'sso_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.signature';
8const statsWithoutSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds);
9const statsWithSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds, sso);
10

ืงื‘ืœ ืจื™ืืงืฆื™ื•ืช ืžืฉืชืžืฉ ืฆื™ื‘ื•ืจื™ื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
postIds Array ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserReactsPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserReactsPublic
Copy Copy
1
2const tenantId: string = "acme-tenant-8a4d2c";
3const postIds: string[] = ["post-645a2f", "post-645a30"];
4const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImlhdCI6MTY2MTYwMDAwMH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
5const result: GetUserReactsPublic200Response = await getUserReactsPublic(tenantId, postIds, sso);
6

ื‘ืฆืข ืจื™ืืงืฆื™ื” ืœืคื•ืกื˜ ืคื™ื“ ืฆื™ื‘ื•ืจื™ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
postId string ื›ืŸ
reactBodyParams ReactBodyParams ื›ืŸ
isUndo boolean ืœื
broadcastId string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: ReactFeedPostPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช reactFeedPostPublic
Copy Copy
1
2const tenantId: string = 'd290f1ee-6c54-4b01-90e6-d701748f0851';
3const postId: string = 'c1a2b3d4-5678-90ab-cdef-1234567890ab';
4const reactBodyParams: ReactBodyParams = { reaction: 'like', emoji: '๐Ÿ‘', source: 'web' };
5const isUndo: boolean = false;
6const broadcastId: string = 'broadcast-2026-03-25-001';
7const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
8const result: ReactFeedPostPublic200Response = await reactFeedPostPublic(tenantId, postId, reactBodyParams, isUndo, broadcastId, sso);
9

ืขื“ื›ืŸ ืคื•ืกื˜ ืคื™ื“ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
feedPost FeedPost ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateFeedPost
Copy Copy
1
2const tenantId: string = 'acme-global-tenant-42';
3const id: string = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
4
5const asset: FeedPostMediaItemAsset = {
6 url: 'https://cdn.acme.com/images/product-launch.jpg',
7 mimeType: 'image/jpeg',
8 width: 1200,
9 height: 630
10};
11
12const mediaItem: FeedPostMediaItem = {
13 id: 'media-001',
14 type: 'image',
15 asset
16};
17
18const link: FeedPostLink = {
19 url: 'https://acme.com/blog/product-launch',
20 title: 'Product Launch Details'
21};
22
23const feedPost: FeedPost = {
24 title: 'Introducing the Q3 Product Suite',
25 body: 'We are excited to unveil our new lineup for Q3, focusing on performance and security improvements.',
26 media: [mediaItem], // ื›ื•ืœืœ ืžืขืจืš ืื•ืคืฆื™ื•ื ืœื™
27 links: [link], // ื›ื•ืœืœ ืงื™ืฉื•ืจื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื
28 isPublished: true // ื“ื’ืœ ืคืจืกื•ื ืื•ืคืฆื™ื•ื ืœื™ ืžืฉืžืฉ ื›ืืŸ
29};
30
31const result: FlagCommentPublic200Response = await updateFeedPost(tenantId, id, feedPost);
32

ืขื“ื›ืŸ ืคื•ืกื˜ ืคื™ื“ ืฆื™ื‘ื•ืจื™ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
postId string ื›ืŸ
updateFeedPostParams UpdateFeedPostParams ื›ืŸ
broadcastId string ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateFeedPostPublic200Response

ื“ื•ื’ืžื”

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

ืกืžืŸ ืชื’ื•ื‘ื” ืฆื™ื‘ื•ืจื™ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ื›ืŸ
isFlagged boolean ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-flagCommentPublic
Copy Copy
1
2const tenantId: string = "tenant_9f8b3c";
3const commentId: string = "comment_72a1d4";
4const isFlagged: boolean = true;
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1Njc4OSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6const result: FlagCommentPublic200Response = await flagCommentPublic(tenantId, commentId, isFlagged, sso);
7

ื”ื•ืกืฃ ื”ืืฉื˜ืื’ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ืœื
createHashTagBody CreateHashTagBody ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AddHashTag200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-addHashTag
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const createHashTagBody: CreateHashTagBody = {
4 name: 'feature-request',
5 label: 'Feature Request',
6 color: '#FF5722',
7 enabled: true
8};
9const response: AddHashTag200Response = await addHashTag(tenantId, createHashTagBody);
10const responseWithoutTenant: AddHashTag200Response = await addHashTag(undefined, createHashTagBody);
11

ื”ื•ืกืฃ ื”ืืฉื˜ืื’ื™ื ื‘ื›ืžื•ืช ื’ื“ื•ืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ืœื
bulkCreateHashTagsBody BulkCreateHashTagsBody ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AddHashTagsBulk200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-addHashTagsBulk
Copy Copy
1
2// ืฆื•ืจ ืžื–ื”ื” tenant (ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™)
3const tenantId: string = "tenant_9f8c2b7a";
4
5// ื”ื›ื ื” ืฉืœ ืคืจื™ื˜ื™ ืชื’ ื‘ื•ื“ื“ื™ื
6const tag1: BulkCreateHashTagsBodyTagsInner = {
7 name: "product-feedback",
8 label: "Product Feedback",
9 color: "#1f8a70",
10 description: "User suggestions and enhancement requests",
11 isActive: true
12};
13
14const tag2: BulkCreateHashTagsBodyTagsInner = {
15 name: "bug-report",
16 label: "Bug Report",
17 color: "#d64545",
18 description: "User-reported defects and issues",
19 isActive: true
20};
21
22// ื’ื•ืฃ ื”ื‘ืงืฉื” ืœื™ืฆื™ืจื” ื‘ื›ืžื•ืช (ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™)
23const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
24 tags: [tag1, tag2]
25};
26
27// ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” ืืกื™ื ื›ืจื•ื ื™ืช ื’ืœื•ื‘ืœื™ืช ื•ื”ืงืฆืืช ื”ืชื•ืฆืื” ืขื ื˜ื™ืคื•ืก
28const result: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
29

ืžื—ืง ื”ืืฉื˜ืื’ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tag string ื›ืŸ
tenantId string ืœื
deleteHashTagRequest DeleteHashTagRequest ืœื

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteHashTag
Copy Copy
1
2const tag: string = "breaking-news";
3const tenantId: string = "tenant_12345";
4const deleteRequest: DeleteHashTagRequest = { initiatedBy: "moderator@newsorg.com", purgeAllOccurrences: true };
5const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteRequest);
6

ืงื‘ืœ ื”ืืฉื˜ื’ื™ื Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
page number ืœื

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: GetHashTags200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getHashTags
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const pageNumber: number = 2;
4const responseWithPage: GetHashTags200Response = await getHashTags(tenantId, pageNumber);
5const responseWithoutPage: GetHashTags200Response = await getHashTags(tenantId);
6

ืขื“ื›ืŸ ื—ืœืงื™ืช ื”ืืฉื˜ืื’ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tag string ื›ืŸ
tenantId string ืœื
updateHashTagBody UpdateHashTagBody ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: PatchHashTag200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-patchHashTag
Copy Copy
1
2const tag: string = "feature-ux-refresh";
3const tenantId: string = "tenant_4f92c1";
4const updateHashTagBody: UpdateHashTagBody = {
5 label: "UX Refresh",
6 description: "Track comments related to the 2026 UX redesign",
7 isActive: true,
8 metadata: { owner: "product-design", rolloutPhase: "phase-2" }
9};
10const response: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
11

ืฆื•ืจ ืžื ื”ืœ ืžืขืจื›ืช Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
createModeratorBody CreateModeratorBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateModerator200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช createModerator
Copy Copy
1
2const tenantId: string = 'tenant_7d9f2b4a';
3const customConfig: CustomConfigParameters = { timezone: 'UTC', moderationQueueEnabled: true };
4const createModeratorBody: CreateModeratorBody = {
5 email: 'jane.martin@publisher.com',
6 displayName: 'Jane Martin',
7 roles: ['moderator'],
8 sendWelcomeEmail: true,
9 customConfig
10};
11const response: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
12

ืžื—ืง ืžื ื”ืœ ืžืขืจื›ืช Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ
sendEmail string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืฉืœ deleteModerator
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2d4a6c';
3const moderatorId: string = 'moderator_84a1b9c2';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, moderatorId, sendEmail);
6

ืงื‘ืœ ืžื ื”ืœ ืžืขืจื›ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetModerator200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getModerator
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-123';
3const id: string = 'mod-987654321';
4const moderatorResponse: GetModerator200Response = await getModerator(tenantId, id);
5

ืงื‘ืœ ืžื ื”ืœื™ ืžืขืจื›ืช Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
skip number ืœื

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: GetModerators200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getModerators
Copy Copy
1
2const tenantId: string = 'tenant-12345-prod';
3const moderatorsPage1: GetModerators200Response = await getModerators(tenantId);
4const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, 50);
5

ืฉืœื— ื”ื–ืžื ื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
fromName string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-sendInvite
Copy Copy
1
2const tenantId: string = 'tenant_acme-42';
3const id: string = 'comment_8f3b21a7';
4const fromName: string = 'Elena Morales';
5const replyToEmail: string | undefined = undefined;
6
7const result: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName, replyToEmail);
8

ืขื“ื›ืŸ ืžื ื”ืœ ืžืขืจื›ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateModeratorBody UpdateModeratorBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateModerator
Copy Copy
1
2const tenantId: string = "acme-enterprises-42";
3const id: string = "moderator_517";
4const updateModeratorBody: UpdateModeratorBody = {
5 displayName: "Sofia Martinez",
6 email: "sofia.martinez@acme.com",
7 permissions: ["approve_comments", "flag_spam", "suspend_users"],
8 active: true,
9 avatarUrl: "https://cdn.acme.com/avatars/sofia.jpg" // optional field demonstrated
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBody);
12

ืžื—ืง ืกืคื™ืจืช ื”ืชืจืื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteNotificationCount
Copy Copy
1
2const tenantSuffix: string | undefined = undefined;
3const tenantId: string = tenantSuffix ? `tenant-${tenantSuffix}` : 'tenant-9142a7';
4const id: string = '3f9b2a44-1c2e-4d3b-9f6a-8e7c6d5b2a1f';
5const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, id);
6console.log(result);
7

ืงื‘ืœ ืกืคื™ืจืช ื”ืชืจืื•ืช ื‘ืžื˜ืžื•ืŸ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetCachedNotificationCount200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const id: string = 'user_00012345';
4const includeUnreadOnly: boolean | undefined = true; // ื“ื’ืœ ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ (ืœื”ื“ื’ืžื”)
5const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, id);
6

ืงื‘ืœ ืกืคื™ืจืช ื”ืชืจืื•ืช Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
userId string ืœื
urlId string ืœื
fromCommentId string ืœื
viewed boolean ืœื
type string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetNotificationCount200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_abc123';
3const userId: string = 'user_987654321';
4const urlId: string = 'https://example.com/news/2026/new-features';
5const viewed: boolean = false;
6const type: string = 'reply';
7const notificationCountResponse: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, undefined, viewed, type);
8

ืงื‘ืœ ื”ืชืจืื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
userId string ืœื
urlId string ืœื
fromCommentId string ืœื
viewed boolean ืœื
type string ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetNotifications200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getNotifications
Copy Copy
1
2const tenantId: string = "tenant_84b3f2";
3const userId: string = "user_1279";
4const urlId: string = "https://www.example.com/articles/2026/03/25/new-feature";
5const fromCommentId: string = "cmt_5421";
6const viewed: boolean = false;
7const type: string = "mention";
8const skip: number = 0;
9const notifications: GetNotifications200Response = await getNotifications(tenantId, userId, urlId, fromCommentId, viewed, type, skip);
10

ืขื“ื›ืŸ ื”ืชืจืื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateNotificationBody UpdateNotificationBody ื›ืŸ
userId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateNotification
Copy Copy
1
2const tenantId: string = 'tenant_prod_8f4b2c';
3const id: string = 'notification_61a2e9';
4const userId: string = 'moderator_107';
5const updateNotificationBody: UpdateNotificationBody = {
6 name: 'Flagged Comment Notification',
7 enabled: true,
8 channels: ['email', 'inbox'],
9 templateId: 'tmpl_mod_alerts_01',
10 severity: 'high'
11};
12const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
13

ื”ื•ืกืฃ ื“ืฃ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
createAPIPageData CreateAPIPageData ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AddPageAPIResponse


ืžื—ืง ื“ืฃ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: DeletePageAPIResponse


ืงื‘ืœ ื“ืฃ ืœืคื™ ืžื–ื”ื” URL Internal Link


ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
urlId string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetPageByURLIdAPIResponse


ืงื‘ืœ ื“ืคื™ื Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetPagesAPIResponse


ืขื“ื›ืŸ ื—ืœืงื™ืช ื“ืฃ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateAPIPageData UpdateAPIPageData ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: PatchPageAPIResponse


ืžื—ืง ืื™ืจื•ืข Webhook ืžืžืชื™ืŸ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deletePendingWebhookEvent
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_42f7c9b1';
4 const id: string = 'pending_webhook_ev_8f3b9a2d';
5 const reason?: string = undefined; // ื“ื•ื’ืžื” ืœืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ (ืื™ื ื• ื ื“ืจืฉ ืขืœ ื™ื“ื™ ื”ืคื•ื ืงืฆื™ื”)
6 const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, id);
7 console.log(result);
8})();
9

ืงื‘ืœ ืกืคื™ืจืช ืื™ืจื•ืขื™ Webhook ืžืžืชื™ื ื™ื Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
commentId string ืœื
externalId string ืœื
eventType string ืœื
type string ืœื
domain string ืœื
attemptCountGT number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetPendingWebhookEventCount200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getPendingWebhookEventCount
Copy Copy
1
2const tenantId: string = "tenant_8d3b7a2f";
3const commentId: string | undefined = "comment_79a2b";
4const eventType: string | undefined = "comment.created";
5const domain: string | undefined = "forum.acme-corp.com";
6const attemptCountGT: number | undefined = 1;
7const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
8 tenantId,
9 commentId,
10 undefined,
11 eventType,
12 undefined,
13 domain,
14 attemptCountGT
15);
16

ืงื‘ืœ ืื™ืจื•ืขื™ Webhook ืžืžืชื™ื ื™ื Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื“ืจื•ืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
commentId string ืœื
externalId string ืœื
eventType string ืœื
type string ืœื
domain string ืœื
attemptCountGT number ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetPendingWebhookEvents200Response

ื“ื•ื’ืžื”

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

ืฆื•ืจ ืชืฆื•ืจืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
createQuestionConfigBody CreateQuestionConfigBody ื›ืŸ

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: CreateQuestionConfig200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_9f8b2c";
3const option: QuestionConfigCustomOptionsInner = { id: "opt_yes", label: "Yes, helpful", value: "yes" };
4const createQuestionConfigBody: CreateQuestionConfigBody = {
5 title: "Article usefulness",
6 prompt: "Was this article helpful?",
7 type: "singleChoice",
8 required: false, // ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ ืœื“ื•ื’ืžื”
9 options: [option],
10 saveBehavior: "immediate"
11};
12const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
13

ืžื—ืง ืชืฆื•ืจืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteQuestionConfig
Copy Copy
1
2const tenantId: string = "acme-enterprises-01";
3const idOptional: string | undefined = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
4const id: string = idOptional ?? "11111111-1111-1111-1111-111111111111";
5const response: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
6

ืงื‘ืœ ืชืฆื•ืจืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetQuestionConfig200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getQuestionConfig
Copy Copy
1
2const tenantId: string = 'acme-tenant-92';
3const id: string = 'question-2026-07-42';
4const response: GetQuestionConfig200Response = await getQuestionConfig(tenantId, id);
5
6function summarize(cfg: GetQuestionConfig200Response, includeDetails?: boolean): string {
7 return includeDetails ? 'Question config (detailed)' : 'Question config (summary)';
8}
9
10const summary: string = summarize(response);
11

ืงื‘ืœ ืชืฆื•ืจื•ืช ืฉืืœื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetQuestionConfigs200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getQuestionConfigs
Copy Copy
1
2const tenantId: string = "tenant_acme_9876";
3const configsWithoutSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const configsWithSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 20);
5

ืขื“ื›ืŸ ืชืฆื•ืจืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string Yes
id string Yes
updateQuestionConfigBody UpdateQuestionConfigBody Yes

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

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

ืฆื•ืจ ืชื•ืฆืืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
createQuestionResultBody CreateQuestionResultBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateQuestionResult200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createQuestionResult
Copy Copy
1
2const tenantId: string = "tenant-72b1f4";
3const meta: MetaItem[] = [{ key: "platform", value: "web" }];
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "question-83472",
6 commenterId: "user-5521",
7 answers: [{ subQuestionId: "sq-1", value: "Yes" }],
8 meta, // ืžื˜ื-ื ืชื•ื ื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื
9 note: "Follow-up requested" // ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ ืœื“ื•ื’ืžื”
10};
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

ืžื—ืง ืชื•ืฆืืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteQuestionResult
Copy Copy
1
2const tenantId: string = "org-82479";
3const questionId: string = "q-6a3d2e1f";
4const includeArchived?: boolean = false; // ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ ื”ืžื“ื’ื™ื ื‘ื—ื™ืจืช ื™ืขื“ ื—ืœื•ืคื™
5const targetId: string = includeArchived ? "q-archived-112233" : questionId;
6const result: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, targetId);
7

ืงื‘ืœ ืชื•ืฆืืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetQuestionResult200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getQuestionResult
Copy Copy
1
2const post: { title: string; questionId?: string } = { title: 'Product feedback' };
3const tenantId: string = 'acme-corp-tenant-01';
4const id: string = post.questionId ?? 'q-8f3a7b2c4d9e';
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, id);
6

ืงื‘ืœ ืชื•ืฆืื•ืช ืฉืืœื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlId string ืœื
userId string ืœื
startDate string ืœื
questionId string ืœื
questionIds string ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetQuestionResults200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_001";
3const urlId: string = "articles/product-launch-2026";
4const userId: string = "user_2048";
5const startDate: string = "2026-03-01T00:00:00Z";
6const questionId: string | undefined = undefined;
7const questionIds: string | undefined = "q_101,q_102";
8const skip: number | undefined = 0;
9
10const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, questionId, questionIds, skip);
11

ืขื“ื›ืŸ ืชื•ืฆืืช ืฉืืœื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateQuestionResultBody UpdateQuestionResultBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_7f8b3c';
3const id: string = 'questionResult_4621';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 questionId: 'q_1024',
6 result: 'flagged',
7 score: 0.92,
8 notes: 'Automated moderation flagged for review',
9 meta: [{ key: 'source', value: 'ai-moderator' }] as MetaItem[], // ืžื˜ื-ื ืชื•ื ื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื
10 status: { code: 'review_pending' } as APIStatus
11} as UpdateQuestionResultBody;
12const result: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
13

ืื’ืจื’ืฆื™ื™ืช ืชื•ืฆืื•ืช ืฉืืœื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string Yes
questionId string No
questionIds Array No
urlId string No
timeBucket AggregateTimeBucket No
startDate Date No
forceRecalculate boolean No

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AggregateQuestionResults200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืฉืœ aggregateQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_acme_98765';
3const questionIds: Array<string> = ['q-102', 'q-103'];
4const urlId: string = 'url_55b3';
5const timeBucket: AggregateTimeBucket = { unit: 'day', size: 7 };
6const startDate: Date = new Date('2026-01-01T00:00:00Z');
7const forceRecalculate: boolean = true;
8
9const result: AggregateQuestionResults200Response = await aggregateQuestionResults(
10 tenantId,
11 undefined, // questionId ื”ื•ืฉืžื˜, ืžืฉืชืžืฉื™ื ื‘-questionIds ื‘ืžืงื•ื
12 questionIds,
13 urlId,
14 timeBucket,
15 startDate,
16 forceRecalculate
17);
18

ืื’ืจื’ืฆื™ื” ืžืจื•ื‘ื” ืฉืœ ืชื•ืฆืื•ืช ืฉืืœื•ืช Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest ื›ืŸ
forceRecalculate boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: BulkAggregateQuestionResults200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-bulkAggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_live_7c9d";
3const bulkAggregateQuestionResultsRequest: BulkAggregateQuestionResultsRequest = {
4 items: [
5 { questionId: "q_feedback_rating", includeSubQuestions: false, filters: { locale: "en-US" } }
6 ],
7 timeBuckets: [
8 { granularity: "day", startUtc: "2026-03-01T00:00:00Z", endUtc: "2026-03-15T00:00:00Z" }
9 ]
10};
11const forceRecalculate: boolean = true;
12const result: BulkAggregateQuestionResults200Response = await bulkAggregateQuestionResults(tenantId, bulkAggregateQuestionResultsRequest, forceRecalculate);
13

ืฉืœื‘ ืชื’ื•ื‘ื•ืช ืขื ืชื•ืฆืื•ืช ืฉืืœื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
questionId string ืœื
questionIds Array ืœื
urlId string ืœื
startDate Date ืœื
forceRecalculate boolean ืœื
minValue number ืœื
maxValue number ืœื
limit number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CombineCommentsWithQuestionResults200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-combineCommentsWithQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_9f3a2';
3const questionIds: string[] = ['question-42', 'question-43'];
4const urlId: string = 'url_5d7b';
5const startDate: Date = new Date('2026-02-01T00:00:00Z');
6const forceRecalculate: boolean = true;
7const minValue: number = 1;
8const maxValue: number = 5;
9const limit: number = 50;
10const result: CombineCommentsWithQuestionResults200Response = await combineCommentsWithQuestionResults(
11 tenantId,
12 undefined,
13 questionIds,
14 urlId,
15 startDate,
16 forceRecalculate,
17 minValue,
18 maxValue,
19 limit
20);
21

ื”ื•ืกืฃ ืžืฉืชืžืฉ SSO Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
createAPISSOUserData CreateAPISSOUserData ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: AddSSOUserAPIResponse


ืžื—ืง ืžืฉืชืžืฉ SSO Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
deleteComments boolean ืœื
commentDeleteMode string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteSSOUserAPIResponse


ืงื‘ืœ ืžืฉืชืžืฉ SSO ืœืคื™ ืื™ืžื™ื™ืœ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
email string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetSSOUserByEmailAPIResponse


ืงื‘ืœ ืžืฉืชืžืฉ SSO ืœืคื™ ืžื–ื”ื” Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetSSOUserByIdAPIResponse


ืงื‘ืœ ืžืฉืชืžืฉื™ SSO Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetSSOUsers200Response


ืขื“ื›ืŸ ื—ืœืงื™ืช ืžืฉืชืžืฉ SSO Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateAPISSOUserData UpdateAPISSOUserData ื›ืŸ
updateComments boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: PatchSSOUserAPIResponse

ื”ื—ืœืฃ ืžืฉืชืžืฉ SSO Internal Link


ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ
updateAPISSOUserData UpdateAPISSOUserData ื›ืŸ
updateComments boolean ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: PutSSOUserAPIResponse


ืฆื•ืจ ืžื ื•ื™ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
createAPIUserSubscriptionData CreateAPIUserSubscriptionData ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateSubscriptionAPIResponse

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช createSubscription
Copy Copy
1
2const tenantId: string = "acme-corp-123";
3const createAPIUserSubscriptionData: CreateAPIUserSubscriptionData = {
4 userId: "u_987654",
5 planId: "pro_monthly",
6 startDate: new Date().toISOString(),
7 trialDays: 14, // ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ ืœื”ื“ื’ืžื”
8 metadata: { source: "marketing-email" } // ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ ืœื”ื“ื’ืžื”
9};
10const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
11const subscription: APIUserSubscription = result.subscription;
12

ืžื—ืง ืžื ื•ื™ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
userId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteSubscriptionAPIResponse


ืงื‘ืœ ืžื ื•ื™ื™ื Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
userId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetSubscriptionsAPIResponse

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getSubscriptions
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_01';
3const userId: string = 'user_76a3b9f2';
4const subscriptionsForUser: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId, userId);
5const subscriptionsForTenant: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId);
6

ืขื“ื›ืŸ ืžื ื•ื™ Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateAPIUserSubscriptionData UpdateAPIUserSubscriptionData ื›ืŸ
userId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UpdateSubscriptionAPIResponse

ื“ื•ื’ืžื”

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

ืงื‘ืœ ืฉื™ืžื•ืฉ ื™ื•ืžื™ ืฉืœ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
yearNumber number ืœื
monthNumber number ืœื
dayNumber number ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenantDailyUsages200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenantDailyUsages
Copy Copy
1
2const tenantId: string = 'tenant_5f4a3b2c-1d6e-4f9a-b9d8-123456789abc';
3const yearNumber: number = 2026;
4const monthNumber: number = 3;
5const dayNumber: number = 24;
6const skip: number = 0;
7
8const result: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, yearNumber, monthNumber, dayNumber, skip);
9

ืฆื•ืจ ื—ื‘ื™ืœืช ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string Yes
createTenantPackageBody CreateTenantPackageBody Yes

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateTenantPackage200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const createTenantPackageBody: CreateTenantPackageBody = {
4 packageName: 'Standard Moderation',
5 description: 'Suitable for small-to-medium sites: basic moderation, spam rules, and analytics',
6 maxCommentsPerMinute: 50,
7 allowAnonymousComments: false, // ืคืจืžื˜ืจ ืื•ืคืฆื™ื•ื ืœื™ ืฉืกื•ืคืง
8 // optional fields omitted: e.g., advanced moderation rules, custom CSS
9 customConfigParameters: {
10 enableProfanityFilter: true,
11 imageContentProfanityLevel: 'medium' // ืขืจืš ืœื”ืžื—ืฉื”; ืžืฉืชืžืฉ ื‘ืžื‘ื ื” CustomConfigParameters
12 }
13};
14const response: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
15console.log(response);
16

ืžื—ืง ื—ื‘ื™ืœืช ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_987';
3const packageId: string = 'pkg_pro_2026_01';
4type DeleteOptions = { force?: boolean; notify?: boolean };
5const options: DeleteOptions = { force: true }; // ืคืจืžื˜ืจื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื ืœื“ื•ื’ืžื”
6const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
7

ืงื‘ืœ ื—ื‘ื™ืœืช ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenantPackage200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_7f3b2c8';
3const packageId: string = 'pkg_standard_2026';
4const requestOptions: { includeConfig?: boolean } = { includeConfig: true };
5const packageResponse: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
6

ืงื‘ืœ ื—ื‘ื™ืœื•ืช ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenantPackages200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenantPackages
Copy Copy
1
2const tenantId: string = "tenant_7f8e3b4c";
3const skip: number = 20;
4const packagesDefault: GetTenantPackages200Response = await getTenantPackages(tenantId);
5const packagesWithSkip: GetTenantPackages200Response = await getTenantPackages(tenantId, skip);
6

ื”ื—ืœืฃ ื—ื‘ื™ืœืช ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
replaceTenantPackageBody ReplaceTenantPackageBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

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

ืขื“ื›ืŸ ื—ื‘ื™ืœืช ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateTenantPackageBody UpdateTenantPackageBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_3b7f9d-prod";
3const id: string = "pkg_enterprise_2026";
4const updateTenantPackageBody: UpdateTenantPackageBody = {
5 name: "Enterprise Plus",
6 isActive: true,
7 // ืฉื“ื•ืช ืื•ืคืฆื™ื•ื ืœื™ื™ื ื”ื•ืฉืžื˜ื• ื‘ืžื›ื•ื•ืŸ (ืœืžืฉืœ, description, limits)
8} as UpdateTenantPackageBody;
9const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
10

ืฆื•ืจ ืžืฉืชืžืฉ ื˜ื ื ื˜ Internal Link


ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
createTenantUserBody CreateTenantUserBody ื›ืŸ

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: CreateTenantUser200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_6f4b2c';
3const createTenantUserBody: CreateTenantUserBody = {
4 email: 'sara.kim@example.com',
5 displayName: 'Sara Kim',
6 role: 'moderator',
7 notifyOnMentions: true
8};
9const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
10

ืžื—ืง ืžืฉืชืžืฉ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
deleteComments string ืœื
commentDeleteMode string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteTenantUser
Copy Copy
1
2const tenantId: string = '4f3a9b2e-1c6a-4f7b-9e2a-0b8d6f1c2a3e';
3const userId: string = '9d2f7b3a-5c4e-48a2-b1f0-6c7d8e9f0a12';
4const deleteComments: string = 'true';
5const commentDeleteMode: string = 'permanent';
6const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, userId, deleteComments, commentDeleteMode);
7

ืงื‘ืœ ืžืฉืชืžืฉ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenantUser200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_fc5a9b2c';
3const userId: string = 'user_0a12b3';
4const result: GetTenantUser200Response = await getTenantUser(tenantId, userId);
5const user: User | undefined = (result as any).user; // ื’ื™ืฉื” ืœ-payload
6const userEmail: string | undefined = user?.email;
7console.log('Fetched user email:', userEmail);
8

ืงื‘ืœ ืžืฉืชืžืฉื™ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenantUsers200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenantUsers
Copy Copy
1
2const tenantId: string = 'tenant_prod_8a3f2c';
3const skip: number = 50;
4const usersWithSkip: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
5const usersNoSkip: GetTenantUsers200Response = await getTenantUsers(tenantId);
6

ื”ื—ืœืฃ ืžืฉืชืžืฉ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
replaceTenantUserBody ReplaceTenantUserBody ื›ืŸ
updateComments string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

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

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
redirectURL string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-sendLoginLink
Copy Copy
1
2const tenantId: string = "tenant_12a9f3b7";
3const id: string = "user_84b2c7d1";
4const redirectURL: string = "https://app.mycompany.com/welcome?ref=login_email";
5const resultWithoutRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id);
6const resultWithRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
7

ืขื“ื›ืŸ ืžืฉืชืžืฉ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateTenantUserBody UpdateTenantUserBody ื›ืŸ
updateComments string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

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

ืฆื•ืจ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
createTenantBody CreateTenantBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateTenant200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createTenant
Copy Copy
1
2const tenantId: string = "acme-corp-001";
3const createTenantBody: CreateTenantBody = {
4 name: "Acme Corporation",
5 domain: "comments.acme.com",
6 adminContact: { name: "Jane Doe", email: "jane.doe@acme.com" },
7 billingInfo: { planId: "pro-monthly", billingContactEmail: "billing@acme.com" },
8 importedSite: { siteId: "site-123", siteName: "Acme Blog" } // ืืชืจ ืžื™ื•ื‘ื ืื•ืคืฆื™ื•ื ืœื™
9};
10const result: CreateTenant200Response = await createTenant(tenantId, createTenantBody);
11

ืžื—ืง ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
sure string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteTenant
Copy Copy
1
2const tenantId: string = "tenant_7f3d2c";
3const id: string = "flag_8392b1a7";
4const sure: string = "confirmed";
5
6const responseWithoutSure: FlagCommentPublic200Response = await deleteTenant(tenantId, id);
7const responseWithSure: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
8

ืงื‘ืœ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenant200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenant
Copy Copy
1
2const tenantId: string = "tenant_9f4b2c1a";
3const idOverride: string | undefined = undefined; // ื”ื—ืœืคื” ืื•ืคืฆื™ื•ื ืœื™ืช, ืื ื–ืžื™ื ื”
4const id: string = idOverride ?? "site_3e7a6b2f";
5const response: GetTenant200Response = await getTenant(tenantId, id);
6console.log(response);
7

ืงื‘ืœ ื˜ื ื ื˜ื™ื Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
meta string ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTenants200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTenants
Copy Copy
1
2const tenantId: string = 'tenant_8421e7';
3const meta: string = 'include=domains,billing,customConfig';
4const skip: number = 20;
5
6const tenantsBasic: GetTenants200Response = await getTenants(tenantId);
7const tenantsWithOptions: GetTenants200Response = await getTenants(tenantId, meta, skip);
8

ืขื“ื›ืŸ ื˜ื ื ื˜ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ
updateTenantBody UpdateTenantBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: FlagCommentPublic200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateTenant
Copy Copy
1
2const tenantId: string = "tenant_4821";
3const id: string = "flag_7b9e";
4const billingInfo: BillingInfo | undefined = undefined; // ืื•ืคืฆื™ื•ื ืœื™, ื”ืฉืžื˜ ื›ื“ื™ ืœืฉืžื•ืจ ืืช ื”ื’ื“ืจื•ืช ื”ื—ื™ื•ื‘ ื”ื ื•ื›ื—ื™ื•ืช
5const updateTenantBody: UpdateTenantBody = {
6 name: "Acme News Comments",
7 defaultDomain: "comments.acme.com",
8 ...(billingInfo ? { billingInfo } : {})
9};
10const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
11

ืฉื ื” ืกื˜ื˜ื•ืก ื›ืจื˜ื™ืก Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
userId string ื›ืŸ
id string ื›ืŸ
changeTicketStateBody ChangeTicketStateBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: ChangeTicketState200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-changeTicketState
Copy Copy
1
2const tenantId: string = 'tenant_82f9b3';
3const userId: string = 'user_9472';
4const id: string = 'ticket_550e8400-e29b-41d4-a716-446655440000';
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: 'resolved',
7 comment: 'Confirmed fix deployed to production; closing ticket.',
8 notifySubscribers: true
9};
10const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
11

ืฆื•ืจ ื›ืจื˜ื™ืก Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
userId string ื›ืŸ
createTicketBody CreateTicketBody ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateTicket200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช createTicket
Copy Copy
1
2const tenantId: string = "acme-corp-001";
3const userId: string = "user_72b9f4";
4const createTicketBody: CreateTicketBody = {
5 subject: "Subscription renewal failed for card on file",
6 description: "Customer's card was declined by the payment processor during automatic renewal. Transaction ID: txn_9a8b7c. Please review gateway logs and retry.",
7 priority: "high", // ืฉื“ื” ืื•ืคืฆื™ื•ื ืœื™ ืœื”ื“ื’ืžื”
8 contactEmail: "billing@acme-corp.com", // ืคืจื˜ื™ ืงืฉืจ ืื•ืคืฆื™ื•ื ืœื™ื™ื
9 relatedUrl: "https://acme-corp.com/account/billing"
10};
11const ticketResponse: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
12

ืงื‘ืœ ื›ืจื˜ื™ืก Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
userId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTicket200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช getTicket
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const ticketId: string = 'tkt-20260325-42';
4const userId: string = 'user-8452';
5
6const ticketResponseWithUser: GetTicket200Response = await getTicket(tenantId, ticketId, userId);
7const ticketResponseWithoutUser: GetTicket200Response = await getTicket(tenantId, ticketId);
8

ืงื‘ืœ ื›ืจื˜ื™ืกื™ื Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
userId string ืœื
state number ืœื
skip number ืœื
limit number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetTickets200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getTickets
Copy Copy
1
2const tenantId: string = "tenant_92f3b4c1";
3const userId: string = "user_742a9f3e";
4const state: number = 1;
5const skip: number = 0;
6const limit: number = 25;
7const ticketsFull: GetTickets200Response = await getTickets(tenantId, userId, state, skip, limit);
8const ticketsMinimal: GetTickets200Response = await getTickets("tenant_92f3b4c1");
9

ื”ืขืœื” ืชืžื•ื ื” Internal Link

ื”ืขืœื” ื•ืฉื ื” ื’ื•ื“ืœ ืชืžื•ื ื”

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
file Blob ื›ืŸ
sizePreset SizePreset ืœื
urlId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UploadImageResponse


ืงื‘ืœ ื”ืชืงื“ืžื•ืช ืชื’ ืœืคื™ ืžื–ื”ื” Internal Link


ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserBadgeProgressById200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserBadgeProgressById
Copy Copy
1
2const optionalTenantSuffix: string | undefined = undefined;
3const tenantId: string = `5f8d0d55-1234-4ab1-9e2a-3f2b5c6d7e8f${optionalTenantSuffix ?? ''}`;
4const id: string = '3a2b1c4d-5678-4ef0-9abc-def123456789';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressById(tenantId, id);
6

ืงื‘ืœ ื”ืชืงื“ืžื•ืช ืชื’ ืœืคื™ ืžื–ื”ื” ืžืฉืชืžืฉ Internal Link

Parameters

Name Type Required Description
tenantId string ื›ืŸ
userId string ื›ืŸ

Response

ืžื—ื–ื™ืจ: GetUserBadgeProgressById200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserBadgeProgressByUserId
Copy Copy
1
2const tenantId: string = 'tenant_7f9c2d3b';
3const maybeUserId: string | undefined = 'user_4b8e1f9a'; // ืžืงื•ืจ ืื•ืคืฆื™ื•ื ืœื™ (ื™ื›ื•ืœ ืœื”ื™ื•ืช undefined)
4const userId: string = maybeUserId ?? 'user_fallback0001';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressByUserId(tenantId, userId);
6console.log(result);
7

ืงื‘ืœ ืจืฉื™ืžืช ื”ืชืงื“ืžื•ืช ืชื’ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
userId string ืœื
limit number ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserBadgeProgressList200Response

ื“ื•ื’ืžื”

getUserBadgeProgressList ื“ื•ื’ืžื”
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_4f8c2b9d';
4 const userId: string = 'user_9a7e215c';
5 const limit: number = 25;
6 const skip: number = 0;
7 const resultMinimal: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId);
8 const resultFull: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId, userId, limit, skip);
9 console.log(resultMinimal, resultFull);
10})();
11

ืฆื•ืจ ืชื’ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
createUserBadgeParams CreateUserBadgeParams ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: CreateUserBadge200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createUserBadge
Copy Copy
1
2const tenantId: string = 'tenant_84f3b2';
3const createUserBadgeParams: CreateUserBadgeParams = {
4 name: 'Top Contributor',
5 slug: 'top-contributor',
6 imageUrl: 'https://assets.fastcomments.com/badges/top-contributor.png',
7 description: 'Awarded for 100 helpful comments',
8 active: true,
9 criteria: { commentsCount: 100 }, // ืงืจื™ื˜ืจื™ื•ื ื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื
10 displayOrder: 10,
11 metadata: { featured: true } // ืžื˜ื-ื ืชื•ื ื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื
12};
13const result: CreateUserBadge200Response = await createUserBadge(tenantId, createUserBadgeParams);
14console.log(result);
15

ืžื—ืง ืชื’ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UpdateUserBadge200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-deleteUserBadge
Copy Copy
1
2type DeleteOptions = { notifyModerators?: boolean };
3
4const tenantId: string = 'tenant_8a3f21';
5const id: string = 'badge_71f2b';
6const options: DeleteOptions = { notifyModerators: true };
7
8const result: UpdateUserBadge200Response = await deleteUserBadge(tenantId, id);
9

ืงื‘ืœ ืชื’ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserBadge200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserBadge
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const id: string = "badge_8c7d2f";
4const response: GetUserBadge200Response = await getUserBadge(tenantId, id);
5

ืงื‘ืœ ืชื’ื™ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
userId string ืœื
badgeId string ืœื
type number ืœื
displayedOnComments boolean ืœื
limit number ืœื
skip number ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserBadges200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserBadges
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const userId: string = 'user_5f4d3c2a';
4const badgeId: string = 'badge_top_contributor';
5const type: number = 1;
6const displayedOnComments: boolean = true;
7const limit: number = 50;
8const skip: number = 0;
9
10const result: GetUserBadges200Response = await getUserBadges(tenantId, userId, badgeId, type, displayedOnComments, limit, skip);
11

ืขื“ื›ืŸ ืชื’ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
updateUserBadgeParams UpdateUserBadgeParams ื›ืŸ

ืชืฉื•ื‘ื”

ืžื—ื–ื™ืจ: UpdateUserBadge200Response

ื“ื•ื’ืžื”

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

ืงื‘ืœ ืกืคื™ืจืช ื”ืชืจืื•ืช ืœืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string Yes
sso string No

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserNotificationCount200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserNotificationCount
Copy Copy
1
2(async () => {
3 const tenantId: string = '9f1e2d3c-4b5a-6d7e-8f90-123456789abc';
4 const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MjMifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
5 const resultWithSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId, ssoToken);
6 const resultWithoutSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId);
7 console.log(resultWithSSO, resultWithoutSSO);
8})();
9

ืงื‘ืœ ื”ืชืจืื•ืช ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string Yes
pageSize number No
afterId string No
includeContext boolean No
afterCreatedAt number No
unreadOnly boolean No
dmOnly boolean No
noDm boolean No
includeTranslations boolean No
sso string No

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserNotifications200Response

ื“ื•ื’ืžื”

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

ืืคืก ืกืคื™ืจืช ื”ืชืจืื•ืช ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: ResetUserNotifications200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-resetUserNotificationCount
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9f3b2c4a";
4 const ssoToken: string | undefined = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9._sample_payload_.signature";
5 const responseWithSSO: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId, ssoToken);
6 const responseWithoutSSO: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId);
7 console.log(responseWithSSO, responseWithoutSSO);
8})();
9

ืืคืก ื”ืชืจืื•ืช ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
afterId string ืœื
afterCreatedAt number ืœื
unreadOnly boolean ืœื
dmOnly boolean ืœื
noDm boolean ืœื
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: ResetUserNotifications200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-resetUserNotifications
Copy Copy
1
2const tenantId: string = "tenant_prod_4a9f12";
3const afterId: string = "notification_87213";
4const afterCreatedAt: number = Math.floor(Date.now() / 1000) - 3600;
5const unreadOnly: boolean = true;
6const dmOnly: boolean = false;
7const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.payload";
8const result: ResetUserNotifications200Response = await resetUserNotifications(tenantId, afterId, afterCreatedAt, unreadOnly, dmOnly, undefined, sso);
9

ืขื“ื›ืŸ ืกื˜ื˜ื•ืก ืžื ื•ื™ ื”ืชืจืื•ืช ืขืœ ืชื’ื•ื‘ื•ืช ืœืžืฉืชืžืฉ Internal Link


ื”ืคืขืœ ืื• ื”ืฉื‘ืช ื”ืชืจืื•ืช ืขื‘ื•ืจ ืชื’ื•ื‘ื” ืžืกื•ื™ืžืช.

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
notificationId string ื›ืŸ
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum ื›ืŸ
commentId string ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UpdateUserNotificationStatus200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateUserNotificationCommentSubscriptionStatus
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const notificationId: string = 'notif-2026-03-25-01';
4const commentId: string = 'cmt-8f3a2b';
5const optedInOrOut: UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum = UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum.OptIn;
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso-payload.signature';
7const result: UpdateUserNotificationStatus200Response = await updateUserNotificationCommentSubscriptionStatus(tenantId, notificationId, optedInOrOut, commentId, sso);
8

ืขื“ื›ืŸ ืกื˜ื˜ื•ืก ืžื ื•ื™ ื”ืชืจืื•ืช ืขืœ ื“ืคื™ื ืœืžืฉืชืžืฉ Internal Link

ื”ืคืขืœ ืื• ื”ืฉื‘ืช ื”ืชืจืื•ืช ืขื‘ื•ืจ ืขืžื•ื“. ื›ืืฉืจ ืžืฉืชืžืฉื™ื ืžื ื•ื™ื™ื ืœืขืžื•ื“, ื™ื™ื•ื•ืฆืจื• ื”ืชืจืื•ืช ืขื‘ื•ืจ ืชื’ื•ื‘ื•ืช ืฉื•ืจืฉ ื—ื“ืฉื•ืช, ื•ื’ื

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlId string ื›ืŸ
url string ื›ืŸ
pageTitle string ื›ืŸ
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UpdateUserNotificationStatus200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืฉืœ updateUserNotificationPageSubscriptionStatus
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const urlId: string = 'blog-launch-2026';
4const url: string = 'https://acme.example.com/blog/launch-march-2026';
5const pageTitle: string = 'Acme Product Launch โ€” March 2026';
6const subscribedOrUnsubscribed: UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum = UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum.Subscribed;
7const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
8const response: UpdateUserNotificationStatus200Response = await updateUserNotificationPageSubscriptionStatus(tenantId, urlId, url, pageTitle, subscribedOrUnsubscribed, sso);
9

ืขื“ื›ืŸ ืกื˜ื˜ื•ืก ื”ืชืจืื” ืฉืœ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
notificationId string ื›ืŸ
newStatus UpdateUserNotificationStatusNewStatusEnum ื›ืŸ
sso string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: UpdateUserNotificationStatus200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-updateUserNotificationStatus
Copy Copy
1
2const tenantId: string = 'tenant_84a2c3';
3const notificationId: string = 'notif_20260325_01';
4const newStatus: UpdateUserNotificationStatusNewStatusEnum = UpdateUserNotificationStatusNewStatusEnum.Read;
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_signature_example';
6const result: UpdateUserNotificationStatus200Response = await updateUserNotificationStatus(tenantId, notificationId, newStatus, sso);
7

ืงื‘ืœ ืกื˜ื˜ื•ืกื™ื ืฉืœ ื ื•ื›ื—ื•ืช ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlIdWS string ื›ืŸ
userIds string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUserPresenceStatuses200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_7f3a2b';
3const urlIdWS: string = 'articles/2026/03/25/fastcomments-integration';
4const maybeUserIds: string | undefined = 'user_123,user_456'; // ืžืงื•ืจ ืื•ืคืฆื™ื•ื ืœื™
5const userIds: string = maybeUserIds ?? 'user_123';
6const presence: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

ื—ืคืฉ ืžืฉืชืžืฉื™ื Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
urlId string ื›ืŸ
usernameStartsWith string ืœื
mentionGroupIds Array ืœื
sso string ืœื
searchSection SearchUsersSearchSectionEnum ืœื

ืชื’ื•ื‘ื”

ืžื•ื—ื–ืจ: SearchUsers200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-searchUsers
Copy Copy
1
2const tenantId: string = 'tenant_8392';
3const urlId: string = 'articles/2026/03/25/fastcomments-release';
4const usernameStartsWith: string = 'jo';
5const mentionGroupIds: Array<string> = ['editors', 'senior-writers'];
6const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
7const searchSection: SearchUsersSearchSectionEnum = SearchUsersSearchSectionEnum.ALL;
8const result: SearchUsers200Response = await searchUsers(tenantId, urlId, usernameStartsWith, mentionGroupIds, sso, searchSection);
9

ืงื‘ืœ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
id string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetUser200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getUser
Copy Copy
1
2const tenantId: string = 'tenant_7b3f42';
3const id: string = 'user_9c4d2a';
4const userResponse: GetUser200Response = await getUser(tenantId, id);
5console.log(userResponse);
6

ืฆื•ืจ ื”ืฆื‘ืขื” Internal Link

ืคืจืžื˜ืจื™ื

Name Type Required Description
tenantId string ื›ืŸ
commentId string ื›ืŸ
direction CreateVoteDirectionEnum ื›ืŸ
userId string ืœื
anonUserId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: VoteComment200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-createVote
Copy Copy
1
2const tenantId: string = 'tenant_9f8b6a';
3const commentId: string = 'comment_3b7d2e';
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.Up;
5const anonUserId: string = 'anon_4c2a1f';
6
7const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
8

ืžื—ืง ื”ืฆื‘ืขื” Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื—ื•ื‘ื” ืชื™ืื•ืจ
tenantId string ื›ืŸ
id string ื›ืŸ
editKey string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: DeleteCommentVote200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžืช deleteVote
Copy Copy
1
2const tenantId: string = "tenant_7c3f2b4a";
3const voteId: string = "vote_4f8d9a11";
4const editKey: string = "edit_2b9f8c";
5const resultWithoutKey: DeleteCommentVote200Response = await deleteVote(tenantId, voteId);
6const resultWithKey: DeleteCommentVote200Response = await deleteVote(tenantId, voteId, editKey);
7

ืงื‘ืœ ื”ืฆื‘ืขื•ืช Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlId string ื›ืŸ

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetVotes200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getVotes
Copy Copy
1
2const tenantId: string = 'acme-corp-8f3b';
3const refCampaign: string | undefined = 'newsletter-march2026'; // ืคืจืžื˜ืจ ืฉืื™ืœืชื” ืื•ืคืฆื™ื•ื ืœื™
4const urlId: string = `https://www.example.com/articles/2026/03/25/fastcomments-integration${refCampaign ? `?ref=${refCampaign}` : ''}`;
5
6const votes: GetVotes200Response = await getVotes(tenantId, urlId);
7

ืงื‘ืœ ื”ืฆื‘ืขื•ืช ืขื‘ื•ืจ ืžืฉืชืžืฉ Internal Link

ืคืจืžื˜ืจื™ื

ืฉื ืกื•ื’ ื ื“ืจืฉ ืชื™ืื•ืจ
tenantId string ื›ืŸ
urlId string ื›ืŸ
userId string ืœื
anonUserId string ืœื

ืชื’ื•ื‘ื”

ืžื—ื–ื™ืจ: GetVotesForUser200Response

ื“ื•ื’ืžื”

ื“ื•ื’ืžื” ืœ-getVotesForUser
Copy Copy
1
2(async (): Promise<void> => {
3 const tenantId: string = "local-news-ny";
4 const urlId: string = "articles/2026-03-25/ev-infrastructure-update";
5 const userId: string = "user_78b6f3d9";
6 const anonUserId: string = "anon_9c3f7a1b";
7 const result: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId, anonUserId);
8 console.log(result);
9})();
10

ืฆืจื™ื›ื™ื ืขื–ืจื”?

ืื ืืชื ื ืชืงืœื™ื ื‘ื‘ืขื™ื•ืช ืื• ื™ืฉ ืœื›ื ืฉืืœื•ืช ืœื’ื‘ื™ ื”-JavaScript/TypeScript SDK, ืื ื:

ืชืจื•ืžื•ืช

ืชืจื•ืžื•ืช ืžืชืงื‘ืœื•ืช ื‘ื‘ืจื›ื”! ืื ื ื‘ืงืจื• ื‘-ืžืื’ืจ GitHub ืœืงื‘ืœืช ื”ื ื—ื™ื•ืช ืœืชืจื•ืžื”.