FastComments.com

FastComments 자바스크립트/타입스크립트 SDK


FastComments의 공식 JavaScript/TypeScript SDK입니다.

Node.js 또는 브라우저에서 댓글, 사용자, SSO 및 중재를 관리합니다.

저장소

GitHub에서 보기


설치 Internal Link

npm

npm install fastcomments-sdk

API 문서 Internal Link


전체 API 참조: docs/api/README.md

브라우저 vs 서버 호환성 Internal Link

이 SDK는 최적의 호환성을 보장하고 런타임 오류를 방지하기 위해 이중 진입점을 사용합니다:

  • fastcomments-sdk/browser - 네이티브 fetch를 사용하는 브라우저 안전 버전
  • fastcomments-sdk/server - SSO를 지원하는 전체 Node.js 버전
  • fastcomments-sdk (기본) - 타입 전용, 어디서나 안전하게 임포트 가능

공개 및 보안 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 기능은 Node.js의 crypto 기능을 필요로 하기 때문에 서버 내보내기에서만 사용할 수 있습니다.

간단한 SSO (서버 전용)

간단한 SSO는 서버 측에서 생성되어 클라이언트로 전송되어야 합니다:

// 서버 측 코드 (Node.js/백엔드)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Create simple SSO using the built-in helper  
const userData = {
  username: 'john_doe',
  email: 'john@example.com',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg'
};

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

const ssoToken = sso.createToken();

// ssoToken을 클라이언트 측 코드로 전송
// 클라이언트 측 코드는 이 토큰을 브라우저 SDK와 함께 사용할 수 있음

보안 SSO (서버 측, 권장)

보안 SSO는 서버 측에 구현되어야 하며 더 나은 보안을 제공합니다:

// 서버 측 코드 (Node.js/백엔드)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Create secure SSO using the built-in helper
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

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

const ssoConfig = sso.prepareToSend();

// 서버에서 API 호출과 함께 사용
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// 또는 브라우저 사용을 위해 ssoConfig를 클라이언트로 전송

브라우저에서 SSO 사용 (서버 생성 토큰 포함)

// 클라이언트 측 코드 (브라우저)
import { PublicApi } from 'fastcomments-sdk/browser';

// 서버 엔드포인트에서 SSO 토큰 가져오기
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);
        // 새 댓글로 UI를 업데이트합니다
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // UI의 투표 수를 업데이트합니다
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }
    
    return true; // 이벤트가 처리되었으면 true를 반환합니다
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// 완료되면 구독을 닫습니다
subscription.close();

사용자 이벤트 구독

사용자별 이벤트(알림, 멘션 등)를 수신합니다:

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

const userConfig = {
  userIdWS: 'user-session-id', // getComments 응답에서 가져옵니다
};

// 사용자의 개인 피드를 구독합니다
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);
    
    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // UI에 알림을 표시합니다
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }
    
    return true;
  },
  (isConnected: boolean) => {
    console.log('User feed connection:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// 완료되면 닫습니다
userSubscription.close();

userIdWS 가져오기

The userIdWS parameter is required for live events and can be obtained from API responses:

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

브로드캐스트 ID Internal Link

일부 API 호출에서는 broadcastId를 전달해야 한다는 것을 보게 될 것입니다. 이벤트를 수신하면 이 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() // 이 작업을 위한 고유 ID
  }
});

오류 처리 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 등)이 지원됩니다.

매개변수

이름형식필수설명
tenantIdstring
aggregationRequestAggregationRequest
parentTenantIdstring아니요
includeStatsboolean아니요

응답

반환: AggregationResponse


감사 로그 가져오기 Internal Link

매개변수

이름타입필수설명
tenantIdstring
limitnumber아니요
skipnumber아니요
orderSORTDIR아니요
afternumber아니요
beforenumber아니요

응답

반환: GetAuditLogs200Response

예제

getAuditLogs 예제
Copy Copy
1
2const tenantId: string = 'tenant_9a8b7c';
3const limit: number = 100;
4const skip: number = 0;
5const after: number = Date.now() - 30 * 24 * 60 * 60 * 1000; // 30일 전
6const before: number = Date.now();
7const auditLogs: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, undefined, after, before);
8

공개 댓글 차단 Internal Link

매개변수

이름형식필수설명
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostring아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostring아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
commentIdsstring
ssostring아니오

응답

반환: 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


매개변수

이름유형필수설명
tenantIdstring
idstring
blockFromCommentParamsBlockFromCommentParams
userIdstring아니오
anonUserIdstring아니오

응답

반환: BlockFromCommentPublic200Response

예제

blockUserFromComment 예제
Copy Copy
1
2const tenantId: string = 'acme-corp';
3const id: string = 'comment_7f3b2a9c';
4const blockFromCommentParams: BlockFromCommentParams = {
5 reason: 'Repeated abusive language and targeted harassment',
6 durationDays: 90,
7 preventReposting: true
8};
9const userId: string = 'user_12345';
10const anonUserId: string = 'anon_98765';
11
12const result: BlockFromCommentPublic200Response = await blockUserFromComment(
13 tenantId,
14 id,
15 blockFromCommentParams,
16 userId,
17 anonUserId
18);
19

공개 댓글 생성 Internal Link

매개변수

이름타입필수설명
tenantIdstring
urlIdstring
broadcastIdstring
commentDataCommentData
sessionIdstring아니오
ssostring아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
idstring
contextUserIdstring아니오
isLiveboolean아니오

응답

반환: DeleteComment200Response

예제

deleteComment 예제
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const id: string = "comment_5f3a2b7c";
4const contextUserId: string = "user_1229";
5const isLive: boolean = true;
6const response: DeleteComment200Response = await deleteComment(tenantId, id, contextUserId, isLive);
7

공개 댓글 삭제 Internal Link

매개변수

이름타입필수설명
tenantIdstring
commentIdstring
broadcastIdstring
editKeystring아니오
ssostring아니오

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
commentIdstring
voteIdstring
urlIdstring
broadcastIdstring
editKeystring아니요
ssostring아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
idstring
userIdstring아니요
anonUserIdstring아니요

응답

반환: FlagComment200Response

예제

flagComment 예제
Copy Copy
1
2const tenantId: string = 'tenant_7f3b21';
3const commentId: string = 'cmt_9a2b4';
4const userId: string = 'user_1024';
5const result: FlagComment200Response = await flagComment(tenantId, commentId, userId);
6

댓글 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
pagenumber아니요
limitnumber아니요
skipnumber아니요
asTreeboolean아니요
skipChildrennumber아니요
limitChildrennumber아니요
maxTreeDepthnumber아니요
urlIdstring아니요
userIdstring아니요
anonUserIdstring아니요
contextUserIdstring아니요
hashTagstring아니요
parentIdstring아니요
directionSortDirections아니요

응답

반환: GetComments200Response

예제

getComments 예제
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // 페이지
6 20, // 페이지당 항목 수
7 0, // 건너뛸 항목 수
8 true, // 트리 구조로 반환
9 1, // 건너뛸 자식 개수
10 3, // 자식 제한
11 4, // 트리의 최대 깊이
12 'articles/2026/new-product-launch', // urlId
13 'user_7890', // 사용자 ID
14 'anon_4f3b2', // 익명 사용자 ID
15 undefined, // contextUserId
16 '#launch', // 해시태그
17 undefined // 부모 ID
18);
19

공개 댓글 가져오기 Internal Link


req tenantId urlId

매개변수

NameTypeRequiredDescription
tenantIdstring
urlIdstring
pagenumber아니요
directionSortDirections아니요
ssostring아니요
skipnumber아니요
skipChildrennumber아니요
limitnumber아니요
limitChildrennumber아니요
countChildrenboolean아니요
fetchPageForCommentIdstring아니요
includeConfigboolean아니요
countAllboolean아니요
includei10nboolean아니요
localestring아니요
modulesstring아니요
isCrawlerboolean아니요
includeNotificationCountboolean아니요
asTreeboolean아니요
maxTreeDepthnumber아니요
useFullTranslationIdsboolean아니요
parentIdstring아니요
searchTextstring아니요
hashTagsArray아니요
userIdstring아니요
customConfigStrstring아니요
afterCommentIdstring아니요
beforeCommentIdstring아니요

응답

반환: 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


매개변수

NameType필수설명
tenantIdstring
commentIdstring
editKeystring아니오
ssostring아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
commentIdstring
dirnumber
ssostring아니오

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
commentIdstring
broadcastIdstring
ssostring아니요

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
commentIdstring
broadcastIdstring
ssostring아니요

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
createCommentParamsCreateCommentParams
isLiveboolean아니요
doSpamCheckboolean아니요
sendEmailsboolean아니요
populateNotificationsboolean아니요

응답

반환값: 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

매개변수

이름형식필수설명
tenantIdstring
createCommentParamsArray
isLiveboolean아니요
doSpamCheckboolean아니요
sendEmailsboolean아니요
populateNotificationsboolean아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
commentIdstring
broadcastIdstring
commentTextUpdateRequestCommentTextUpdateRequest
editKeystring아니요
ssostring아니요

응답

반환: SetCommentText200Response

예제

setCommentText 예제
Copy Copy
1
2const tenantId: string = 'tenant-42';
3const commentId: string = 'cmt-8932';
4const broadcastId: string = 'brd-2023-07';
5const updateRequest: CommentTextUpdateRequest = {
6 text: 'Updated comment text for the product launch — congrats team!',
7 mentions: [{ userId: 'user-17', displayName: 'Ava Nguyen' }] as CommentUserMentionInfo[],
8 hashtags: [{ tag: 'ProductLaunch' }] as CommentUserHashTagInfo[]
9};
10const editKey: string = 'edtk-9f7b';
11const sso: string = 'sso-token-abc123';
12const result: SetCommentText200Response = await setCommentText(tenantId, commentId, broadcastId, updateRequest, editKey, sso);
13

댓글에서 사용자 차단 해제 Internal Link

Parameters

이름유형필수설명
tenantIdstring
idstring
unBlockFromCommentParamsUnBlockFromCommentParams
userIdstring아니오
anonUserIdstring아니오

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
idstring
userIdstring아니요
anonUserIdstring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
commentIdstring
broadcastIdstring
ssostring아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
commentIdstring
broadcastIdstring
ssostring아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstringYes
idstringYes
updatableCommentParamsUpdatableCommentParamsYes
contextUserIdstringNo
doSpamCheckbooleanNo
isLivebooleanNo

응답

반환: FlagCommentPublic200Response

예제

updateComment 예제
Copy Copy
1
2const tenantId: string = "tenant_3f47b2a1";
3const id: string = "comment_9a12b3c4";
4const updatableCommentParams: UpdatableCommentParams = {
5 body: "Thanks for the update — I've adjusted my view accordingly."
6};
7const contextUserId: string = "user_8721";
8const doSpamCheck: boolean = true;
9const isLive: boolean = false;
10const result: FlagCommentPublic200Response = await updateComment(tenantId, id, updatableCommentParams, contextUserId, doSpamCheck, isLive);
11

댓글에 투표하기 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstringYes
commentIdstringYes
urlIdstringYes
broadcastIdstringYes
voteBodyParamsVoteBodyParamsYes
sessionIdstringNo
ssostringNo

응답

반환: 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


매개변수

NameTypeRequiredDescription
userIdstring아니오
tenantIdstring아니오
urlIdstring아니오
pagenumber아니오
directionSortDirections아니오
lastGenDatenumber아니오
repliesToUserIdstring아니오
fetchPageForCommentIdstring아니오
includei10nboolean아니오
useFullTranslationIdsboolean아니오
localestring아니오
includeConfigboolean아니오
includeNotificationCountboolean아니오
countAllboolean아니오
ssostring아니오

응답

반환: GetCommentsForUserResponse

예제

getCommentsForUser 예제
Copy Copy
1
2const userId: string = 'user_82f9b';
3const tenantId: string = 'tenant_22';
4const page: number = 2;
5const lastGenDate: number = Date.now();
6const includei10n: boolean = true;
7const useFullTranslationIds: boolean = false;
8const locale: string = 'en-US';
9const includeConfig: boolean = true;
10const includeNotificationCount: boolean = true;
11const countAll: boolean = false;
12const sso: string = 'sso-token-1a2b';
13const commentsResponse: GetCommentsForUserResponse = await getCommentsForUser(userId, tenantId, undefined, page, undefined, lastGenDate, undefined, undefined, includei10n, useFullTranslationIds, locale, includeConfig, includeNotificationCount, countAll, sso);
14

도메인 설정 추가 Internal Link

매개변수

이름유형필수설명
tenantIdstring
addDomainConfigParamsAddDomainConfigParams

응답

반환: AddDomainConfig200Response


도메인 설정 삭제 Internal Link


매개변수

이름형식필수설명
tenantIdstring
domainstring

응답

반환: DeleteDomainConfig200Response


도메인 설정 가져오기 Internal Link


매개변수

이름유형필수설명
tenantIdstring
domainstring

응답

반환: GetDomainConfig200Response


도메인 설정 목록 가져오기 Internal Link


매개변수

이름형식필수설명
tenantIdstring

응답

반환: GetDomainConfigs200Response


도메인 설정 부분 수정 Internal Link


매개변수

이름형식필수설명
tenantIdstring
domainToUpdatestring
patchDomainConfigParamsPatchDomainConfigParams

응답

반환: GetDomainConfig200Response


도메인 설정 전체 대체 Internal Link

매개변수

이름유형필수설명
tenantIdstring
domainToUpdatestring
updateDomainConfigParamsUpdateDomainConfigParams

응답

반환: GetDomainConfig200Response


이메일 템플릿 생성 Internal Link


매개변수

이름유형필수설명
tenantIdstring
createEmailTemplateBodyCreateEmailTemplateBody

응답

반환: CreateEmailTemplate200Response

예제

createEmailTemplate 예제
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9f4a2b';
4 const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: 'Weekly Digest',
6 subject: 'Your weekly discussion highlights',
7 html: '<!doctype html><body><h1>Hello \{{user.name}}</h1><p>Top comments this week...</p></body>',
8 fromAddress: 'no-reply@fastcomments-example.com',
9 replyTo: 'moderation@fastcomments-example.com',
10 isDefault: false
11 };
12 const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
13 console.log(result);
14})();
15

이메일 템플릿 삭제 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: FlagCommentPublic200Response

예제

deleteEmailTemplate 예제
Copy Copy
1
2const tenantId: string = "acme-corp-42";
3const idSuffix: string | undefined = "-archived";
4const templateId: string = "email_tmpl_6a1b2c" + (idSuffix ?? "");
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
6

이메일 템플릿 렌더 오류 삭제 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
errorIdstring

응답

반환: FlagCommentPublic200Response

예제

deleteEmailTemplateRenderError 예제
Copy Copy
1
2const tenantId: string = "tenant_7a1d2f9b";
3const id: string = "email_template_42b1";
4const errorId: string = "render_err_2026-04-24_7f3c";
5const includeStackTrace: boolean | undefined = undefined; // 선택적 플래그 예시
6
7const response: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
8// 선택적 옵션 객체가 지원된다면 다음과 같을 수 있습니다:
9// await deleteEmailTemplateRenderError(tenantId, id, errorId /*, { includeStackTrace } */);
10

이메일 템플릿 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: 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


매개변수

이름유형필수설명
tenantIdstring

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
idstring
skipnumber아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
skipnumber아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
renderEmailTemplateBodyRenderEmailTemplateBody
localestring아니오

응답

반환: RenderEmailTemplate200Response

예제

renderEmailTemplate 예제
Copy Copy
1
2const tenantId: string = 'acme-corp-987';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'user-invite',
5 subject: "You're invited to Acme",
6 placeholders: { firstName: 'Alex' },
7 metadata: { source: 'signup-flow' }
8};
9const locale: string = 'en-US';
10const result: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
11

이메일 템플릿 업데이트 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring
updateEmailTemplateBodyUpdateEmailTemplateBody

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
urlIdstring
userIdWSstring
startTimenumber
endTimenumber

응답

반환: 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

요청 tenantId urlId userIdWS

매개변수

NameTypeRequiredDescription
tenantIdstring
urlIdstring
userIdWSstring
startTimenumber
endTimenumber

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
createFeedPostParamsCreateFeedPostParams
broadcastIdstring아니오
isLiveboolean아니오
doSpamCheckboolean아니오
skipDupCheckboolean아니오

응답

반환: CreateFeedPost200Response

예제

createFeedPost 예제
Copy Copy
1
2const tenantId: string = 'tenant_87f3b2';
3const mediaAsset: FeedPostMediaItemAsset = { url: 'https://cdn.example.com/images/post-123.jpg', mimeType: 'image/jpeg', width: 1200, height: 800, size: 245000 };
4const mediaItem: FeedPostMediaItem = { id: 'media_1', type: 'image', assets: [mediaAsset], altText: 'Conference keynote stage' };
5const link: FeedPostLink = { url: 'https://news.example.com/keynote-recap', title: 'Keynote recap' };
6const createFeedPostParams: CreateFeedPostParams = {
7 title: 'Product Launch Highlights',
8 content: 'Highlights from today’s product launch and roadmap updates.',
9 authorId: 'user_42',
10 mediaItems: [mediaItem],
11 links: [link],
12 tags: ['product', 'launch', 'announcement']
13};
14const broadcastId: string = 'broadcast_20260424';
15const isLive: boolean = true;
16const doSpamCheck: boolean = true;
17const skipDupCheck: boolean = false;
18const result: CreateFeedPost200Response = await createFeedPost(tenantId, createFeedPostParams, broadcastId, isLive, doSpamCheck, skipDupCheck);
19

공개 피드 게시글 생성 Internal Link

매개변수

이름타입필수설명
tenantIdstring
createFeedPostParamsCreateFeedPostParams
broadcastIdstring아니요
ssostring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
postIdstring
broadcastIdstring아니요
ssostring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
afterIdstring아니요
limitnumber아니요
tagsArray아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
afterIdstring아니오
limitnumber아니오
tagsArray아니오
ssostring아니오
isCrawlerboolean아니오
includeUserInfoboolean아니오

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
postIdsArray
ssostring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
postIdsArray아니요
ssostring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
postIdstring
reactBodyParamsReactBodyParams
isUndoboolean아니요
broadcastIdstring아니요
urlIdstring아니요
ssostring아니요

응답

반환: ReactFeedPostPublic200Response

예제

reactFeedPostPublic 예제
Copy Copy
1
2const tenantId: string = "global-markets";
3const postId: string = "8e2c3f9a-4b6d-4f1a-9c2d-e8a1b2c3d4e5";
4const reactBodyParams: ReactBodyParams = { reactionType: "like", clientApp: "web-ui", timestamp: new Date().toISOString() };
5const isUndo: boolean = false;
6const broadcastId: string = "broadcast-2026-05-20";
7const urlId: string = "feed-post-8e2c";
8const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fake.payload";
9
10const result: ReactFeedPostPublic200Response = await reactFeedPostPublic(tenantId, postId, reactBodyParams, isUndo, broadcastId, urlId, sso);
11

피드 게시글 업데이트 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
feedPostFeedPost

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
postIdstring
updateFeedPostParamsUpdateFeedPostParams
broadcastIdstring아니요
ssostring아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstringYes
commentIdstringYes
isFlaggedbooleanYes
ssostringNo

응답

반환: 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

큰 GIF 가져오기 Internal Link

매개변수

이름유형필수설명
tenantIdstring
largeInternalURLSanitizedstring

응답

반환: GifGetLargeResponse

예제

getGifLarge 예제
Copy Copy
1
2const tenantId: string = 'tenant_8a92f4';
3const largeInternalURLSanitized: string = 'https://cdn.streamingco.com/gifs/product-demo-large.gif';
4let maybeStatus: APIStatus | undefined = undefined; // 사용 가능한 경우의 선택적 메타데이터
5const response: GifGetLargeResponse = await getGifLarge(tenantId, largeInternalURLSanitized);
6

GIF 검색 Internal Link

매개변수

이름유형필수설명
tenantIdstring
searchstring
localestring아니오
ratingstring아니오
pagenumber아니오

응답

반환: GifSearchResponse

예제

getGifsSearch 예제
Copy Copy
1
2(async () => {
3 const tenantId: string = "global-media";
4 const search: string = "laughing baby";
5 const locale: string = "en-US";
6 const rating: string = "pg";
7 const page: number = 2;
8 const result: GifSearchResponse = await getGifsSearch(tenantId, search, locale, rating, page);
9 console.log(result);
10})();
11

인기 GIF 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
localestring아니요
ratingstring아니요
pagenumber아니요

응답

반환: GifSearchResponse

예제

getGifsTrending 예제
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const locale: string = 'en-US';
4const rating: string = 'PG';
5const page: number = 1;
6const result: GifSearchResponse = await getGifsTrending(tenantId, locale, rating, page);
7

해시태그 추가 Internal Link

매개변수

이름형식필수설명
tenantIdstring아니요
createHashTagBodyCreateHashTagBody아니요

응답

반환: AddHashTag200Response

예제

addHashTag 예제
Copy Copy
1
2const tenantId: string | undefined = undefined;
3const createHashTagBody: CreateHashTagBody = {
4 name: 'release-2026',
5 description: 'Feedback and bug reports for the April 2026 product release',
6 synonyms: ['v2-release', 'launch-2026'],
7 color: '#1d72b8',
8 isActive: true,
9 createdBy: 'product.manager@acme-corp.com'
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createHashTagBody);
12

해시태그 일괄 추가 Internal Link

매개변수

이름유형필수설명
tenantIdstring아니요
bulkCreateHashTagsBodyBulkCreateHashTagsBody아니요

응답

반환: AddHashTagsBulk200Response

예제

addHashTagsBulk 예제
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_01';
3const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
4 tags: [
5 { name: 'feature-request', slug: 'feature-request', description: 'Requests for new capabilities', isActive: true, customConfig: { visibility: 'public' } as unknown as CustomConfigParameters }
6 ]
7};
8const addHashTagsResponse: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
9
10const bulkCreateHashTagsBodyNoTenant: BulkCreateHashTagsBody = {
11 tags: [
12 { name: 'ux-feedback', slug: 'ux-feedback', description: 'User experience suggestions', isActive: true }
13 ]
14};
15const addHashTagsResponseNoTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBodyNoTenant);
16

해시태그 삭제 Internal Link

매개변수

이름형식필수설명
tagstring
tenantIdstring아니오
deleteHashTagRequestDeleteHashTagRequest아니오

응답

반환: FlagCommentPublic200Response

예제

deleteHashTag 예제
Copy Copy
1
2const tag: string = "spring-sale-2026";
3const tenantId: string = "tenant-9876";
4const deleteHashTagRequest: DeleteHashTagRequest = {
5 requestedBy: "admin@retailco.com",
6 reason: "Campaign ended; remove associated auto-tags",
7 cascadeDelete: true
8};
9const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteHashTagRequest);
10

해시태그 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
pagenumber아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tagstring
tenantIdstring아니오
updateHashTagBodyUpdateHashTagBody아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
createModeratorBodyCreateModeratorBody

응답

반환: CreateModerator200Response

예제

createModerator 예제
Copy Copy
1
2const tenantId: string = "tenant_8f3b6c";
3const optionalConfig: CustomConfigParameters = { moderationThreshold: 5, escalateOnRepeatedOffenses: true };
4const newModerator: CreateModeratorBody = {
5 email: "lina.gomez@dailynews.com",
6 fullName: "Lina Gomez",
7 role: "senior_moderator",
8 enabled: true,
9 notifyByEmail: true,
10 customConfig: optionalConfig
11};
12const response: CreateModerator200Response = await createModerator(tenantId, newModerator);
13

모더레이터 삭제 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
sendEmailstring아니요

응답

반환: FlagCommentPublic200Response

예제

deleteModerator 예제
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c6d';
3const id: string = 'mod_4a3e11ec9d1f0242ac120003';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, id, sendEmail);
6

모더레이터 가져오기 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
skipnumber아니오

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstringYes
idstringYes
fromNamestringYes

응답

반환: FlagCommentPublic200Response

예제

sendInvite 예제
Copy Copy
1
2const tenantId: string = 'acme-corp-128';
3const id: string = 'comment-8421f';
4const fromName: string = 'Marcus Lindström';
5const note: string | undefined = undefined; // 선택적 매개변수 예시
6const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
7

모더레이터 업데이트 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
updateModeratorBodyUpdateModeratorBody

응답

반환: 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" // 선택적 필드 예시
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBody);
12

알림 수 삭제 Internal Link

매개변수

이름타입필수설명
tenantIdstring
idstring

응답

반환: FlagCommentPublic200Response

예제

deleteNotificationCount 예제
Copy Copy
1
2const tenantId: string = "org-72a8f1b9";
3const id: string = "notif-8f9c2e4a";
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, id);
5console.log(result);
6

캐시된 알림 수 가져오기 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstringYes
idstringYes

응답

Returns: 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유형필수설명
tenantIdstring
userIdstring아니요
urlIdstring아니요
fromCommentIdstring아니요
viewedboolean아니요
typestring아니요

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
userIdstring아니오
urlIdstring아니오
fromCommentIdstring아니오
viewedboolean아니오
typestring아니오
skipnumber아니오

응답

반환: 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


매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
updateNotificationBodyUpdateNotificationBody
userIdstring아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
createAPIPageDataCreateAPIPageData

응답

반환: AddPageAPIResponse

페이지 삭제 Internal Link


매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: DeletePageAPIResponse


URL ID로 페이지 가져오기 Internal Link


매개변수

이름유형필수설명
tenantIdstring
urlIdstring

응답

반환: GetPageByURLIdAPIResponse


페이지 목록 가져오기 Internal Link


매개변수

이름유형필수설명
tenantIdstring

응답

반환: GetPagesAPIResponse


페이지 부분 수정 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
updateAPIPageDataUpdateAPIPageData

응답

반환: PatchPageAPIResponse


대기 중인 웹후크 이벤트 삭제 Internal Link


매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: FlagCommentPublic200Response

예제

deletePendingWebhookEvent 예제
Copy Copy
1
2const tenantId: string = "tenant_7f3b2a";
3const webhookEventId: string = "wh_evt_9a8c7d1234";
4const dryRun: boolean | undefined = undefined; // 선택적 플래그 예제 (이 호출에서 필요하지 않음)
5const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, webhookEventId);
6

대기 중인 웹후크 이벤트 수 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
commentIdstring아니요
externalIdstring아니요
eventTypestring아니요
typestring아니요
domainstring아니요
attemptCountGTnumber아니요

응답

반환: 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

대기 중인 웹후크 이벤트 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
commentIdstring아니오
externalIdstring아니오
eventTypestring아니오
typestring아니오
domainstring아니오
attemptCountGTnumber아니오
skipnumber아니오

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstringYes
createQuestionConfigBodyCreateQuestionConfigBodyYes

응답

반환: CreateQuestionConfig200Response

예제

createQuestionConfig 예제
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const createQuestionConfigBody: CreateQuestionConfigBody = {
4 title: "Post-purchase feedback",
5 description: "Quick survey about your recent order",
6 required: true,
7 renderingType: "single_choice",
8 options: [
9 { label: "Very dissatisfied", value: "1" },
10 { label: "Dissatisfied", value: "2" },
11 { label: "Neutral", value: "3" },
12 { label: "Satisfied", value: "4" },
13 { label: "Very satisfied", value: "5" }
14 ] as QuestionConfigCustomOptionsInner[]
15} as CreateQuestionConfigBody;
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

질문 설정 삭제 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: FlagCommentPublic200Response

예제

deleteQuestionConfig 예제
Copy Copy
1
2const tenantId: string = "tenant_42fa9b7c";
3const id: string = "qcfg-0f8fad5b-d9cb-469f-a165-70867728950e";
4const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5

질문 설정 가져오기 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
skipnumber아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
idstring
updateQuestionConfigBodyUpdateQuestionConfigBody

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
createQuestionResultBodyCreateQuestionResultBody

응답

반환: CreateQuestionResult200Response

예제

createQuestionResult 예제
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const createQuestionResultBody: CreateQuestionResultBody = {
4 questionId: 'q-34567',
5 respondentId: 'user-8923',
6 answers: [{ optionId: 'opt_A', text: 'Agree', count: 1 }],
7 score: 5,
8 meta: [{ key: 'platform', value: 'web' }],
9 notifyModerators: false // 선택적 매개변수
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

질문 결과 삭제 Internal Link


매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: FlagCommentPublic200Response

예제

deleteQuestionResult 예제
Copy Copy
1
2const tenantIdEnv: string | undefined = process.env.FASTCOMMENTS_TENANT_ID;
3const tenantId: string = tenantIdEnv ?? 'tenant_78b3f2';
4const id: string = 'qres-9f2a3b1c';
5const response: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, id);
6

질문 결과 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: GetQuestionResult200Response

예제

getQuestionResult 예제
Copy Copy
1
2const tenantId: string = 'acme-corp-42';
3const id: string = 'question-9f8b7c';
4const includeComments: boolean | undefined = true; // 선택적 매개변수 예시
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, id);
6console.log(result);
7

질문 결과 목록 가져오기 Internal Link


매개변수

이름타입필수설명
tenantIdstring
urlIdstring아니요
userIdstring아니요
startDatestring아니요
questionIdstring아니요
questionIdsstring아니요
skipnumber아니요

응답

반환: GetQuestionResults200Response

예제

getQuestionResults 예제
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9b3f";
4 const urlId: string = "survey-2026-spring";
5 const userId: string = "user_00123";
6 const startDate: string = "2026-04-01T00:00:00Z";
7 const questionIds: string = "q_42,q_43";
8 const skip: number = 0;
9 const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
10 console.log(result);
11})();
12

질문 결과 업데이트 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
updateQuestionResultBodyUpdateQuestionResultBody

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
questionIdstring아니요
questionIdsArray아니요
urlIdstring아니요
timeBucketAggregateTimeBucket아니요
startDateDate아니요
forceRecalculateboolean아니요

응답

반환: AggregateQuestionResults200Response

예제

aggregateQuestionResults 예제
Copy Copy
1
2const tenantId: string = "tenant_acme_001";
3const questionIds: string[] = ["q-2026-sales", "q-2026-support"];
4const urlId: string = "url_7f2c";
5const timeBucket: AggregateTimeBucket = { unit: "week", size: 1 };
6const startDate: Date = new Date("2026-01-01T00:00:00Z");
7const forceRecalculate: boolean = true;
8
9const result: AggregateQuestionResults200Response = await aggregateQuestionResults(
10 tenantId,
11 undefined,
12 questionIds,
13 urlId,
14 timeBucket,
15 startDate,
16 forceRecalculate
17);
18

질문 결과 일괄 집계 Internal Link

매개변수

이름형식필수설명
tenantIdstring
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequest
forceRecalculateboolean아니요

응답

반환: BulkAggregateQuestionResults200Response

예제

bulkAggregateQuestionResults 예제
Copy Copy
1
2const tenantId: string = "tenant_acme_42";
3const bulkAggregateQuestionResultsRequest: BulkAggregateQuestionResultsRequest = {
4 questions: [
5 { questionId: "q-001", threadId: "thread-1001", questionType: "rating" },
6 { questionId: "q-002", threadId: "thread-1002", questionType: "yes_no" }
7 ],
8 timeRange: { from: "2026-03-01T00:00:00Z", to: "2026-04-01T00:00:00Z" },
9 groupBy: ["questionId", "threadId"]
10};
11const forceRecalculate: boolean = true;
12const result: BulkAggregateQuestionResults200Response = await bulkAggregateQuestionResults(tenantId, bulkAggregateQuestionResultsRequest, forceRecalculate);
13

댓글과 질문 결과 결합 Internal Link

매개변수

이름타입필수설명
tenantIdstring
questionIdstring아니오
questionIdsArray아니오
urlIdstring아니오
startDateDate아니오
forceRecalculateboolean아니오
minValuenumber아니오
maxValuenumber아니오
limitnumber아니오

응답

반환: CombineCommentsWithQuestionResults200Response

예제

combineCommentsWithQuestionResults 예제
Copy Copy
1
2const tenantId: string = 'tenant-acme-001';
3const questionId: string | undefined = 'q-analytics-42';
4const questionIds: string[] | undefined = ['q-analytics-42', 'q-feedback-17'];
5const urlId: string | undefined = 'url-987654';
6const startDate: Date | undefined = new Date('2026-01-01T00:00:00Z');
7const forceRecalculate: boolean | undefined = true;
8const minValue: number | undefined = 1;
9const maxValue: number | undefined = 5;
10const limit: number | undefined = 250;
11const result: CombineCommentsWithQuestionResults200Response = await combineCommentsWithQuestionResults(
12 tenantId,
13 questionId,
14 questionIds,
15 urlId,
16 startDate,
17 forceRecalculate,
18 minValue,
19 maxValue,
20 limit
21);
22

SSO 사용자 추가 Internal Link


매개변수

이름형식필수설명
tenantIdstring
createAPISSOUserDataCreateAPISSOUserData

응답

반환: AddSSOUserAPIResponse


SSO 사용자 삭제 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
deleteCommentsboolean아니오
commentDeleteModestring아니오

응답

반환: DeleteSSOUserAPIResponse


이메일로 SSO 사용자 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
emailstring

응답

반환: GetSSOUserByEmailAPIResponse


ID로 SSO 사용자 가져오기 Internal Link


매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: GetSSOUserByIdAPIResponse


SSO 사용자 목록 가져오기 Internal Link

매개변수

이름유형필수설명
tenantIdstring
skipnumber아니오

응답

반환: GetSSOUsers200Response


SSO 사용자 부분 수정 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
updateAPISSOUserDataUpdateAPISSOUserData
updateCommentsboolean아니요

응답

반환: PatchSSOUserAPIResponse

SSO 사용자 전체 대체 Internal Link


매개변수

이름형식필수설명
tenantIdstring
idstring
updateAPISSOUserDataUpdateAPISSOUserData
updateCommentsboolean아니오

응답

반환: PutSSOUserAPIResponse

예제

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

구독 생성 Internal Link

매개변수

이름형식필수설명
tenantIdstring
createAPIUserSubscriptionDataCreateAPIUserSubscriptionData

응답

반환: CreateSubscriptionAPIResponse

예제

createSubscription 예제
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-123";
3const createAPIUserSubscriptionData: CreateAPIUserSubscriptionData = {
4 userId: "user_98765",
5 planId: "pro_monthly",
6 paymentMethod: { type: "card", cardId: "card_abc123" },
7 autoRenew: true,
8 trialDays: 14, // 선택적 매개변수 예시
9 metadata: { campaign: "spring_launch" } // 선택적 매개변수 예시
10};
11const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
12

구독 삭제 Internal Link


매개변수

이름형식필수설명
tenantIdstring
idstring
userIdstring아니요

응답

반환: DeleteSubscriptionAPIResponse


구독 목록 가져오기 Internal Link


매개변수

이름유형필수설명
tenantIdstring
userIdstring아니오

응답

반환: GetSubscriptionsAPIResponse

예제

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

구독 업데이트 Internal Link


매개변수

이름형식필수설명
tenantIdstring
idstring
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionData
userIdstring아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
yearNumbernumber아니오
monthNumbernumber아니오
dayNumbernumber아니오
skipnumber아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
createTenantPackageBodyCreateTenantPackageBody

응답

반환: CreateTenantPackage200Response

예제

createTenantPackage 예제
Copy Copy
1
2const tenantId: string = "tenant_acme-corp_001";
3const createTenantPackageBody: CreateTenantPackageBody = {
4 name: "Acme Standard Package",
5 description: "Default package for Acme Corp comments with moderation and SSO enabled",
6 enabled: true,
7 maxCommentsPerThread: 500,
8 voteStyle: "thumbs",
9 gifRating: "PG-13",
10 tosConfig: { enabled: true, url: "https://acme.example.com/terms" } // 선택적 매개변수 예시
11};
12const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
13

테넌트 패키지 삭제 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: FlagCommentPublic200Response

예제

deleteTenantPackage 예제
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_8f3a2b4c9d01";
4 const packageId: string = "pkg_2026-04-security-patch";
5 const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
6 console.log(result);
7})();
8

테넌트 패키지 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
skipnumber아니오

응답

반환: GetTenantPackages200Response

예제

getTenantPackages 예제
Copy Copy
1
2const tenantId: string = 'tenant-7b3c2f';
3const skipCount: number = 10;
4const packages: GetTenantPackages200Response = await getTenantPackages(tenantId, skipCount);
5const packagesFromStart: GetTenantPackages200Response = await getTenantPackages(tenantId);
6

테넌트 패키지 교체 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
replaceTenantPackageBodyReplaceTenantPackageBody

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
updateTenantPackageBodyUpdateTenantPackageBody

응답

반환: FlagCommentPublic200Response

예제

updateTenantPackage 예제
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_sf_001";
4 const id: string = "pkg-premium-v2";
5 const updateTenantPackageBody: UpdateTenantPackageBody = {
6 name: "San Francisco Premium",
7 enabled: true,
8 customConfig: { maxComments: 500 },
9 tosConfig: { required: true } // 선택적 필드는 예시로 포함됨; 나머지는 생략됨
10 } as UpdateTenantPackageBody;
11 const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
12 console.log(result);
13})();
14

테넌트 사용자 생성 Internal Link

매개변수

이름형식필수설명
tenantIdstring
createTenantUserBodyCreateTenantUserBody

응답

반환: CreateTenantUser200Response

예제

createTenantUser 예제
Copy Copy
1
2const tenantId: string = "tenant_74b3a9f4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "jane.doe@acmecorp.com",
5 displayName: "Jane Doe",
6 role: "moderator",
7 sendWelcomeEmail: true, // 선택적 매개변수 예시
8 metadata: { department: "Customer Support" }
9};
10const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
11

테넌트 사용자 삭제 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
deleteCommentsstring아니오
commentDeleteModestring아니오

응답

반환: FlagCommentPublic200Response

예제

deleteTenantUser 예제
Copy Copy
1
2async function run(): Promise<void> {
3 const tenantId: string = "acme_corp_tenant_9f1a2b";
4 const id: string = "user_4d2a1b6c";
5 const deleteComments: string = "true"; // 사용자의 댓글도 함께 제거
6 const commentDeleteMode: string = "permanent"; // "permanent" 또는 "soft"
7 const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8 console.log(result);
9}
10run();
11

테넌트 사용자 가져오기 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: 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; // 페이로드에 접근
6const userEmail: string | undefined = user?.email;
7console.log('Fetched user email:', userEmail);
8

테넌트 사용자 목록 가져오기 Internal Link


Parameters

NameTypeRequiredDescription
tenantIdstring
skipnumber아니요

Response

반환: 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

매개변수

이름형식필수설명
tenantIdstring
idstring
replaceTenantUserBodyReplaceTenantUserBody
updateCommentsstring아니요

응답

반환: FlagCommentPublic200Response

예제

replaceTenantUser 예제
Copy Copy
1
2const tenantId: string = "tenant_acmeCorp";
3const id: string = "user_84b2";
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 email: "alice.jenkins@acmecorp.com",
6 displayName: "Alice Jenkins",
7 roles: ["moderator", "editor"],
8 disabled: false
9} as ReplaceTenantUserBody;
10const updateComments: string = "Migrated user account and reattributed historical comments";
11
12const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
13

매개변수

이름형식필수설명
tenantIdstring
idstring
redirectURLstring아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
idstring
updateTenantUserBodyUpdateTenantUserBody
updateCommentsstring아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
createTenantBodyCreateTenantBody

응답

반환: CreateTenant200Response

예제

createTenant 예제
Copy Copy
1
2const tenantId: string = 'acme-corp-001';
3const createTenantBody: CreateTenantBody = {
4 name: 'Acme Corporation',
5 domainConfiguration: { primaryDomain: 'comments.acme.com', enforceHttps: true } as APIDomainConfiguration,
6 billingInfo: { planId: 'enterprise', contactEmail: 'billing@acme.com' } as BillingInfo
7 // ssoConfig 또는 customConfig와 같은 선택적 필드는 의도적으로 생략됨
8} as CreateTenantBody;
9
10const result: CreateTenant200Response = await createTenant(tenantId, createTenantBody);
11

테넌트 삭제 Internal Link

매개변수

이름유형필수설명
tenantIdstring
idstring
surestring아니오

응답

반환: FlagCommentPublic200Response

예제

deleteTenant 예제
Copy Copy
1
2const tenantId: string = 'tenant_42c9f1';
3const id: string = 'flag_9a7b3c';
4const sure: string = 'confirm-delete';
5const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
6

테넌트 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

이름형식필수설명
tenantIdstring
metastring아니요
skipnumber아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstringYes
idstringYes
updateTenantBodyUpdateTenantBodyYes

응답

반환: FlagCommentPublic200Response

예제

updateTenant 예제
Copy Copy
1
2const tenantId: string = 'acme-corp-001';
3const id: string = 'tenant-42';
4const billingInfo: BillingInfo = { billingEmail: 'billing@acme.com', address: '123 Market St' } as BillingInfo;
5const updateTenantBody: UpdateTenantBody = { displayName: 'Acme Corporation', billingInfo } as UpdateTenantBody;
6const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
7

티켓 상태 변경 Internal Link

매개변수

이름타입필수설명
tenantIdstringYes
userIdstringYes
idstringYes
changeTicketStateBodyChangeTicketStateBodyYes

응답

반환: ChangeTicketState200Response

예제

changeTicketState 예제
Copy Copy
1
2const tenantId: string = "tenant_7f3b2c9a";
3const userId: string = "user_5a1d9fb2";
4const id: string = "ticket_3e8a1b6f";
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: "closed",
7 reason: "Fixed in backend release 2.4.1",
8 notifyUsers: true,
9 metadata: { resolutionOwner: "agent_12", priority: "high" } // 선택적 필드 예시
10};
11const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
12

티켓 생성 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstringYes
userIdstringYes
createTicketBodyCreateTicketBodyYes

응답

반환: CreateTicket200Response

예제

createTicket 예제
Copy Copy
1
2const tenantId: string = 'acme-company-001';
3const userId: string = 'u_78f4b2';
4const createTicketBody: CreateTicketBody = {
5 title: 'Unable to access project dashboard',
6 description: 'Receiving 403 when accessing /dashboard for project X',
7 priority: 'high',
8 tags: ['dashboard', 'access'] // optional field demonstrated
9};
10const result: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
11

티켓 가져오기 Internal Link


매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
userIdstring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstringYes
userIdstringNo
statenumberNo
skipnumberNo
limitnumberNo

응답

반환: 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

매개변수

이름형식필수설명
namespacestring
componentstring
localestring아니요
useFullTranslationIdsboolean아니요

응답

반환: GetTranslationsResponse

예제

getTranslations 예제
Copy Copy
1
2const translationsDefault: GetTranslationsResponse = await getTranslations("payments", "checkout");
3const translationsFrenchDetailed: GetTranslationsResponse = await getTranslations("payments", "checkout", "fr-FR", true);
4

이미지 업로드 Internal Link


이미지 업로드 및 크기 조정

매개변수

이름유형필수설명
tenantIdstring
fileBlob
sizePresetSizePreset아니요
urlIdstring아니요

응답

반환: UploadImageResponse


ID로 사용자 배지 진행도 가져오기 Internal Link

매개변수

이름Type필수설명
tenantIdstring
idstring

응답

반환: 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

사용자 ID로 사용자 배지 진행도 가져오기 Internal Link

매개변수

이름유형필수설명
tenantIdstring
userIdstring

응답

반환: GetUserBadgeProgressById200Response

예제

getUserBadgeProgressByUserId 예제
Copy Copy
1
2const tenantId: string = 'tenant_7f9c2d3b';
3const maybeUserId: string | undefined = 'user_4b8e1f9a'; // 선택적 소스(없을 수 있음)
4const userId: string = maybeUserId ?? 'user_fallback0001';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressByUserId(tenantId, userId);
6console.log(result);
7

사용자 배지 진행도 목록 가져오기 Internal Link

매개변수

이름형식필수설명
tenantIdstring
userIdstring아니오
limitnumber아니오
skipnumber아니오

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
createUserBadgeParamsCreateUserBadgeParams

응답

반환: CreateUserBadge200Response

예제

createUserBadge 예제
Copy Copy
1
2const tenantId: string = "tenant_9a8b7c";
3const params: CreateUserBadgeParams = {
4 name: "Top Contributor",
5 slug: "top-contributor",
6 description: "Awarded for 100 approved comments",
7 iconUrl: "https://cdn.fastcomments.com/badges/top-contributor.png",
8 active: true,
9 criteria: { approvedComments: 100 },
10 customConfig: { showOnProfile: true } // 선택적 매개변수
11};
12const result: CreateUserBadge200Response = await createUserBadge(tenantId, params);
13

사용자 배지 삭제 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
idstring

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
userIdstring아니오
badgeIdstring아니오
typenumber아니오
displayedOnCommentsboolean아니오
limitnumber아니오
skipnumber아니오

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
idstring
updateUserBadgeParamsUpdateUserBadgeParams

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
ssostring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
pageSizenumber아니요
afterIdstring아니요
includeContextboolean아니요
afterCreatedAtnumber아니요
unreadOnlyboolean아니요
dmOnlyboolean아니요
noDmboolean아니요
includeTranslationsboolean아니요
ssostring아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
ssostring아니요

응답

반환: 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

매개변수

이름타입필수설명
tenantIdstring
afterIdstring아니오
afterCreatedAtnumber아니오
unreadOnlyboolean아니오
dmOnlyboolean아니오
noDmboolean아니오
ssostring아니오

응답

반환: 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


특정 댓글에 대한 알림을 활성화하거나 비활성화합니다.

매개변수

이름유형필수설명
tenantIdstringYes
notificationIdstringYes
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnumYes
commentIdstringYes
ssostringNo

응답

반환: 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

페이지에 대한 알림을 활성화하거나 비활성화합니다. 사용자가 페이지를 구독하면 새 루트 댓글에 대한 알림이 생성되며, 또한

매개변수

이름유형필수설명
tenantIdstring
urlIdstring
urlstring
pageTitlestring
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum
ssostring아니요

응답

반환: 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

매개변수

NameTypeRequiredDescription
tenantIdstring
notificationIdstring
newStatusUpdateUserNotificationStatusNewStatusEnum
ssostring아니요

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
urlIdWSstring
userIdsstring

응답

반환: 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

매개변수

이름유형필수설명
tenantIdstring
urlIdstring
usernameStartsWithstring아니오
mentionGroupIdsArray아니오
ssostring아니오
searchSectionSearchUsersSearchSectionEnum아니오

응답

반환: 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


매개변수

이름형식필수설명
tenantIdstring
idstring

응답

반환: GetUser200Response

예제

getUser 예제
Copy Copy
1
2const idSuffix: string | undefined = undefined;
3const tenantId: string = "acme-enterprises";
4const id: string = idSuffix ?? "user_98765";
5const response: GetUser200Response = await getUser({ tenantId, id });
6

투표 생성 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstring
commentIdstring
directionCreateVoteDirectionEnum
userIdstring아니오
anonUserIdstring아니오

응답

반환: VoteComment200Response

예제

createVote 예제
Copy Copy
1
2const tenantId: string = 'tenant_5f2a9b';
3const commentId: string = 'cmt_3b7e21';
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.Up;
5const anonUserId: string = 'anon_9x7k2p';
6const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
7

투표 삭제 Internal Link

매개변수

이름형식필수설명
tenantIdstring
idstring
editKeystring아니요

응답

반환: DeleteCommentVote200Response

예제

deleteVote 예제
Copy Copy
1
2const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
3const id: string = 'vote-7a1b2c3d-9f8e-4b6a-8123-abcdef012345';
4const editKey: string = 'editKey_4f3e2d1c';
5
6const resultWithEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
7const resultWithoutEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id);
8

투표 목록 가져오기 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstring
urlIdstring

응답

반환: GetVotes200Response

예제

getVotes 예제
Copy Copy
1
2const tenantId: string = 'tenant-42c-eu';
3const urlId: string = 'article-7f9b';
4const includeMetadata: boolean | undefined = true;
5const votes: GetVotes200Response = await getVotes(tenantId, urlId);
6

사용자 투표 가져오기 Internal Link

매개변수

NameTypeRequiredDescription
tenantIdstring
urlIdstring
userIdstring아니요
anonUserIdstring아니요

응답

반환: 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 저장소를 방문하세요.