FastComments.com

SDK de FastComments para JavaScript/TypeScript


Este es el SDK oficial de JavaScript/TypeScript para FastComments.

Administra comentarios, usuarios, SSO y moderación desde Node.js o el navegador.

Repositorio

Ver en GitHub


Instalación Internal Link


npm

npm install fastcomments-sdk

Documentación de la API Internal Link


Referencia completa de la API: docs/api/README.md

Compatibilidad navegador vs servidor Internal Link


Este SDK utiliza puntos de entrada duales para garantizar la compatibilidad óptima y prevenir errores en tiempo de ejecución:

  • fastcomments-sdk/browser - Versión segura para el navegador con fetch nativo
  • fastcomments-sdk/server - Versión completa para Node.js con soporte SSO
  • fastcomments-sdk (predeterminado) - Solo tipos, seguro de importar en cualquier lugar

APIs públicas vs seguras Internal Link

El SDK proporciona tres clases principales de API:

  • DefaultApi - Endpoints seguros que requieren su clave de API para la autenticación. Úselos para operaciones del lado del servidor.
  • PublicApi - Endpoints públicos a los que se puede acceder sin una clave de API. Pueden llamarse directamente desde navegadores, dispositivos móviles, etc.
  • HiddenApi - Endpoints internos/administrativos para casos de uso avanzados.

Ejemplo: Uso de la API pública (segura para navegadores)

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

const publicApi = new PublicApi();

// Obtener comentarios de una página (no se requiere clave de API)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Ejemplo: Uso de Default API (solo del lado del servidor)

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

const config = new Configuration({
  apiKey: 'your-api-key' // ¡Mantén esto en secreto!
});
const defaultApi = new DefaultApi(config);

// Obtener comentarios con acceso administrativo completo
const response = await defaultApi.getComments({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Integración SSO (Inicio de sesión único) Internal Link

FastComments admite SSO para integrarse con su sistema de autenticación de usuarios existente. La funcionalidad SSO solo está disponible en la exportación del servidor ya que requiere funciones criptográficas de Node.js.

SSO simple (solo en el servidor)

El SSO simple debe generarse en el servidor y enviarse al cliente:

// Código del lado del servidor (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Crear SSO simple usando el auxiliar integrado  
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();

// Envíe ssoToken a su código del lado del cliente
// El código del lado del cliente puede entonces usar este token con el SDK para navegador

SSO seguro (lado del servidor, recomendado)

El SSO seguro debe implementarse en el servidor y ofrece mayor seguridad:

// Código del lado del servidor (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Crear SSO seguro usando el auxiliar integrado
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();

// Usar con llamadas a la API en el servidor
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// O enviar ssoConfig al cliente para uso en el navegador

Uso de SSO desde el navegador (con token generado por el servidor)

// Código del lado del cliente (navegador)
import { PublicApi } from 'fastcomments-sdk/browser';

// Obtener el token SSO desde su endpoint en el servidor
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 // Usar el token SSO generado por el servidor
});

SSO con creación de comentarios

// Lado del servidor: crear SSO y comentario
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)
});

Casos de uso comunes Internal Link

Obtener comentarios para una página

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

Crear un comentario

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

Votar en un comentario

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 para voto a favor, -1 para voto en contra
  }
});

Gestión de usuarios (requiere clave de API)

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

Eventos en vivo (actualizaciones en tiempo real) Internal Link

Suscríbete a eventos en vivo para recibir actualizaciones en tiempo real sobre comentarios, votos y otras actividades.

Eventos a nivel de página

Escucha eventos en vivo en una página específica (comentarios, votos, etc.):

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

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

// Suscribirse a eventos en vivo para una página
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (obtén esto de la respuesta de getComments)
  (event: LiveEvent) => {
    console.log('Live event received:', event);
    
    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Actualiza tu UI con el nuevo comentario
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Actualiza los contadores de votos en tu UI
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }
    
    return true; // Devuelve true si el evento fue procesado
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Cierra la suscripción cuando hayas terminado
subscription.close();

Suscribirse a eventos de usuario

Escucha eventos específicos del usuario (notificaciones, menciones, etc.):

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

const userConfig = {
  userIdWS: 'user-session-id', // Obtén esto de la respuesta de getComments
};

// Suscribirse al feed personal del usuario
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);
    
    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Muestra la notificación en tu 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');
  }
);

// Cierra cuando hayas terminado
userSubscription.close();

Obtener userIdWS

El parámetro userIdWS es requerido para eventos en vivo y puede obtenerse de las respuestas de la API:

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

// Extrae userIdWS de la respuesta
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Ahora puedes suscribirte a eventos en vivo
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

IDs de transmisión Internal Link

Verás que debes pasar un broadcastId en algunas llamadas a la API. Cuando recibas eventos, obtendrás este ID de vuelta, de modo que sepas ignorar el evento si planeas aplicar los cambios de forma optimista en el cliente (lo cual probablemente querrás hacer, ya que ofrece la mejor experiencia). Pasa un UUID aquí. El ID debe ser lo suficientemente único como para no ocurrir dos veces en una sesión del navegador.

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 único para esta operación
  }
});

Manejo de errores Internal Link

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

aggregate Internal Link

Agrega documentos agrupándolos (si se proporciona groupBy) y aplicando múltiples operaciones. Se admiten diferentes operaciones (por ejemplo, sum, countDistinct, avg, etc.).

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
aggregationRequestAggregationRequest
parentTenantIdstringNo
includeStatsbooleanNo

Respuesta

Devuelve: Aggregate200Response

Ejemplo

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

getAuditLogs Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
limitnumberNo
skipnumberNo
orderSORTDIRNo
afternumberNo
beforenumberNo

Respuesta

Devuelve: GetAuditLogs200Response

Ejemplo

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

blockFromCommentPublic Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostringNo

Respuesta

Devuelve: BlockFromCommentPublic200Response

Ejemplo

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

unBlockCommentPublic Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstring
publicBlockFromCommentParamsPublicBlockFromCommentParams
ssostringNo

Respuesta

Devuelve: UnBlockCommentPublic200Response

Ejemplo

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

checkedCommentsForBlocked Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
commentIdsstring
ssostringNo

Respuesta

Devuelve: CheckedCommentsForBlocked200Response

Ejemplo

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

blockUserFromComment Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
blockFromCommentParamsBlockFromCommentParams
userIdstringNo
anonUserIdstringNo

Respuesta

Devuelve: BlockFromCommentPublic200Response

Ejemplo

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

createCommentPublic Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstring
broadcastIdstring
commentDataCommentData
sessionIdstringNo
ssostringNo

Respuesta

Devuelve: CreateCommentPublic200Response

Ejemplo

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

deleteComment Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
contextUserIdstringNo
isLivebooleanNo

Respuesta

Devuelve: DeleteComment200Response

Ejemplo

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

deleteCommentPublic Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
commentIdstring
broadcastIdstring
editKeystringNo
ssostringNo

Respuesta

Devuelve: DeleteCommentPublic200Response

Ejemplo

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

deleteCommentVote Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
commentIdstring
voteIdstring
urlIdstring
broadcastIdstring
editKeystringNo
ssostringNo

Respuesta

Devuelve: DeleteCommentVote200Response

Ejemplo

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

flagComment Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
userIdstringNo
anonUserIdstringNo

Respuesta

Devuelve: FlagComment200Response

Ejemplo

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

getComment Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: GetComment200Response

Ejemplo

Ejemplo de getComment
Copy Copy
1
2const tenantId: string = 'tenant_6f1a2b';
3const commentId: string = 'cmt_4d9e8f';
4const includeReplies: boolean | undefined = true; // ejemplo de parámetro opcional (no se pasa a getComment)
5const result: GetComment200Response = await getComment(tenantId, commentId);
6console.log('Fetched comment for tenant:', tenantId, 'comment id:', commentId);
7console.log('API response received:', result);
8

getComments Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
pagenumberNo
limitnumberNo
skipnumberNo
asTreebooleanNo
skipChildrennumberNo
limitChildrennumberNo
maxTreeDepthnumberNo
urlIdstringNo
userIdstringNo
anonUserIdstringNo
contextUserIdstringNo
hashTagstringNo
parentIdstringNo
directionSortDirectionsNo
fromDatenumberNo
toDatenumberNo

Respuesta

Devuelve: GetComments200Response

Ejemplo

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

getCommentsPublic Internal Link

req tenantId urlId

Parámetros

NameTypeRequiredDescription
tenantIdstring
urlIdstring
pagenumberNo
directionSortDirectionsNo
ssostringNo
skipnumberNo
skipChildrennumberNo
limitnumberNo
limitChildrennumberNo
countChildrenbooleanNo
fetchPageForCommentIdstringNo
includeConfigbooleanNo
countAllbooleanNo
includei10nbooleanNo
localestringNo
modulesstringNo
isCrawlerbooleanNo
includeNotificationCountbooleanNo
asTreebooleanNo
maxTreeDepthnumberNo
useFullTranslationIdsbooleanNo
parentIdstringNo
searchTextstringNo
hashTagsArrayNo
userIdstringNo
customConfigStrstringNo
afterCommentIdstringNo
beforeCommentIdstringNo

Respuesta

Devuelve: GetCommentsPublic200Response

Ejemplo

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

getCommentText Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstring
editKeystringNo
ssostringNo

Respuesta

Devuelve: GetCommentText200Response

Ejemplo

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

getCommentVoteUserNames Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstring
dirnumber
ssostringNo

Respuesta

Devuelve: GetCommentVoteUserNames200Response

Ejemplo

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

lockComment Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstring
broadcastIdstring
ssostringNo

Respuesta

Devuelve: LockComment200Response

Ejemplo

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

pinComment Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
commentIdstring
broadcastIdstring
ssostringNo

Respuesta

Devuelve: PinComment200Response

Ejemplo

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

saveComment Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
createCommentParamsCreateCommentParams
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

Respuesta

Devuelve: SaveComment200Response

Ejemplo

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

saveCommentsBulk Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
createCommentParamsArray
isLivebooleanNo
doSpamCheckbooleanNo
sendEmailsbooleanNo
populateNotificationsbooleanNo

Respuesta

Devuelve: Array<SaveComment200Response

Ejemplo

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

setCommentText Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstringYes
commentIdstringYes
broadcastIdstringYes
commentTextUpdateRequestCommentTextUpdateRequestYes
editKeystringNo
ssostringNo

Respuesta

Devuelve: SetCommentText200Response

Ejemplo

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

unBlockUserFromComment Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
unBlockFromCommentParamsUnBlockFromCommentParams
userIdstringNo
anonUserIdstringNo

Respuesta

Devuelve: UnBlockCommentPublic200Response

Ejemplo

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

unFlagComment Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
userIdstringNo
anonUserIdstringNo

Respuesta

Devuelve: FlagComment200Response

Ejemplo

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

unLockComment Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstring
broadcastIdstring
ssostringNo

Respuesta

Devuelve: LockComment200Response

Ejemplo

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

unPinComment Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
commentIdstring
broadcastIdstring
ssostringNo

Respuesta

Devuelve: PinComment200Response

Ejemplo

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

updateComment Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
updatableCommentParamsUpdatableCommentParams
contextUserIdstringNo
doSpamCheckbooleanNo
isLivebooleanNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

voteComment Internal Link

Parámetros

NameTypeObligatorioDescripción
tenantIdstring
commentIdstring
urlIdstring
broadcastIdstring
voteBodyParamsVoteBodyParams
sessionIdstringNo
ssostringNo

Respuesta

Devuelve: VoteComment200Response

Ejemplo

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

getCommentsForUser Internal Link

Parámetros

NameTypeRequiredDescription
userIdstringNo
directionSortDirectionsNo
repliesToUserIdstringNo
pagenumberNo
includei10nbooleanNo
localestringNo
isCrawlerbooleanNo

Respuesta

Devuelve: GetCommentsForUser200Response

Ejemplo

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

addDomainConfig Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
addDomainConfigParamsAddDomainConfigParams

Respuesta

Devuelve: AddDomainConfig200Response


deleteDomainConfig Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
domainstring

Respuesta

Devuelve: DeleteDomainConfig200Response


getDomainConfig Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
domainstring

Respuesta

Devuelve: GetDomainConfig200Response


getDomainConfigs Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstring

Respuesta

Devuelve: GetDomainConfigs200Response


patchDomainConfig Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
domainToUpdatestring
patchDomainConfigParamsPatchDomainConfigParams

Respuesta

Devuelve: GetDomainConfig200Response


putDomainConfig Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
domainToUpdatestring
updateDomainConfigParamsUpdateDomainConfigParams

Respuesta

Devuelve: GetDomainConfig200Response


createEmailTemplate Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
createEmailTemplateBodyCreateEmailTemplateBody

Respuesta

Devuelve: CreateEmailTemplate200Response

Ejemplo

Ejemplo de createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_4f2b1c9e";
3const createEmailTemplateBody: CreateEmailTemplateBody = {
4 name: "New Comment Notification",
5 subject: "Someone replied to your discussion",
6 fromName: "Community Team",
7 fromAddress: "no-reply@community.example.com",
8 htmlBody: "<p>\{{comment.author}} replied: \{{comment.text}}</p>",
9 plaintextBody: "\{{comment.author}} replied: \{{comment.text}}",
10 previewText: "A new reply on a discussion you follow",
11 isDefault: false // bandera opcional que demuestra el uso de un parámetro opcional
12};
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_9c4f1b2a";
3const id: string = "emailtmpl_4d2b9a5e";
4const requestorNote: string | undefined = undefined; // metadatos opcionales (no requeridos por la función)
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, id);
6

deleteEmailTemplateRenderError Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
errorIdstring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteEmailTemplateRenderError
Copy Copy
1
2const tenantId: string = 'tenant-72f3b4';
3const templateId: string = 'email_template-9c3a1';
4let providedErrorId: string | undefined = undefined; // valor opcional, podría establecerse en otro lugar
5const errorId: string = providedErrorId ?? 'render_err-5d2f7';
6const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, templateId, errorId);
7

getEmailTemplate Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetEmailTemplate200Response

Ejemplo

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

getEmailTemplateDefinitions Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring

Respuesta

Devuelve: GetEmailTemplateDefinitions200Response

Ejemplo

Ejemplo de getEmailTemplateDefinitions
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_acme_001';
4 const options: { includeDrafts?: boolean } = { includeDrafts: true }; // parámetro opcional demostrado
5 const templates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId, options);
6 console.log(templates);
7})();
8

getEmailTemplateRenderErrors Internal Link

Parámetros

NombreTypeRequeridoDescripción
tenantIdstring
idstring
skipnumberNo

Respuesta

Devuelve: GetEmailTemplateRenderErrors200Response

Ejemplo

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

getEmailTemplates Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
skipnumberNo

Respuesta

Devuelve: GetEmailTemplates200Response

Ejemplo

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

renderEmailTemplate Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
renderEmailTemplateBodyRenderEmailTemplateBody
localestringNo

Respuesta

Devuelve: RenderEmailTemplate200Response

Ejemplo

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

updateEmailTemplate Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
updateEmailTemplateBodyUpdateEmailTemplateBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getEventLog Internal Link

req tenantId urlId userIdWS

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstring
userIdWSstring
startTimenumber
endTimenumberNo

Respuesta

Devuelve: GetEventLog200Response

Ejemplo

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

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Parámetros

NameTypeRequiredDescription
tenantIdstring
urlIdstring
userIdWSstring
startTimenumber
endTimenumberNo

Respuesta

Devuelve: GetEventLog200Response

Ejemplo

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

createFeedPost Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
createFeedPostParamsCreateFeedPostParams
broadcastIdstringNo
isLivebooleanNo
doSpamCheckbooleanNo
skipDupCheckbooleanNo

Respuesta

Devuelve: CreateFeedPost200Response

Ejemplo

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

createFeedPostPublic Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
createFeedPostParamsCreateFeedPostParams
broadcastIdstringNo
ssostringNo

Respuesta

Devuelve: CreateFeedPostPublic200Response

Ejemplo

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

deleteFeedPostPublic Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
postIdstring
broadcastIdstringNo
ssostringNo

Respuesta

Devuelve: DeleteFeedPostPublic200Response

Ejemplo

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

getFeedPosts Internal Link


req tenantId afterId

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
afterIdstringNo
limitnumberNo
tagsArrayNo

Respuesta

Devuelve: GetFeedPosts200Response

Ejemplo

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

getFeedPostsPublic Internal Link


req tenantId afterId

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
afterIdstringNo
limitnumberNo
tagsArrayNo
ssostringNo
isCrawlerbooleanNo
includeUserInfobooleanNo

Respuesta

Devuelve: GetFeedPostsPublic200Response

Ejemplo

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

getFeedPostsStats Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
postIdsArray
ssostringNo

Respuesta

Devuelve: GetFeedPostsStats200Response

Ejemplo

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

getUserReactsPublic Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
postIdsArrayNo
ssostringNo

Respuesta

Devuelve: GetUserReactsPublic200Response

Ejemplo

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

reactFeedPostPublic Internal Link


Parámetros

NameTypeRequeridoDescripción
tenantIdstring
postIdstring
reactBodyParamsReactBodyParams
isUndobooleanNo
broadcastIdstringNo
ssostringNo

Respuesta

Devuelve: ReactFeedPostPublic200Response

Ejemplo

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

updateFeedPost Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
feedPostFeedPost

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

updateFeedPostPublic Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstringYes
postIdstringYes
updateFeedPostParamsUpdateFeedPostParamsYes
broadcastIdstringNo
ssostringNo

Respuesta

Devuelve: CreateFeedPostPublic200Response

Ejemplo

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

flagCommentPublic Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstring
isFlaggedboolean
ssostringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getGifLarge Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
largeInternalURLSanitizedstring

Respuesta

Devuelve: GetGifLarge200Response

Ejemplo

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

getGifsSearch Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
searchstring
localestringNo
ratingstringNo
pagenumberNo

Respuesta

Devuelve: GetGifsSearch200Response

Ejemplo

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

getGifsTrending Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
localestringNo
ratingstringNo
pagenumberNo

Respuesta

Devuelve: GetGifsTrending200Response

Ejemplo

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

addHashTag Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstringNo
createHashTagBodyCreateHashTagBodyNo

Respuesta

Devuelve: AddHashTag200Response

Ejemplo

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

addHashTagsBulk Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstringNo
bulkCreateHashTagsBodyBulkCreateHashTagsBodyNo

Respuesta

Devuelve: AddHashTagsBulk200Response

Ejemplo

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

deleteHashTag Internal Link

Parámetros

NameTypeRequiredDescription
tagstring
tenantIdstringNo
deleteHashTagRequestDeleteHashTagRequestNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getHashTags Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
pagenumberNo

Respuesta

Devuelve: GetHashTags200Response

Ejemplo

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

patchHashTag Internal Link

Parámetros

NombreTipoRequeridoDescripción
tagstring
tenantIdstringNo
updateHashTagBodyUpdateHashTagBodyNo

Respuesta

Devuelve: PatchHashTag200Response

Ejemplo

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

createModerator Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createModeratorBodyCreateModeratorBody

Respuesta

Devuelve: CreateModerator200Response

Ejemplo

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

deleteModerator Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
sendEmailstringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getModerator Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: GetModerator200Response

Ejemplo

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

getModerators Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
skipnumberNo

Respuesta

Devuelve: GetModerators200Response

Ejemplo

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

sendInvite Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
fromNamestring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

updateModerator Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
updateModeratorBodyUpdateModeratorBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

deleteNotificationCount Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstringYes
idstringYes

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getCachedNotificationCount Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: GetCachedNotificationCount200Response

Ejemplo

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

getNotificationCount Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
userIdstringNo
urlIdstringNo
fromCommentIdstringNo
viewedbooleanNo
typestringNo

Respuesta

Devuelve: GetNotificationCount200Response

Ejemplo

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

getNotifications Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
userIdstringNo
urlIdstringNo
fromCommentIdstringNo
viewedbooleanNo
typestringNo
skipnumberNo

Respuesta

Devuelve: GetNotifications200Response

Ejemplo

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

updateNotification Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
updateNotificationBodyUpdateNotificationBody
userIdstringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

createV1PageReact Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring
titlestringNo

Respuesta

Devuelve: CreateV1PageReact200Response

Ejemplo

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

createV2PageReact Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstringYes
urlIdstringYes
idstringYes
titlestringNo

Respuesta

Devuelve: CreateV2PageReact200Response

Ejemplo

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

deleteV1PageReact Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring

Respuesta

Devuelve: DeleteV1PageReact200Response

Ejemplo

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

deleteV2PageReact Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstring
idstring

Respuesta

Devuelve: DeleteV2PageReact200Response

Ejemplo

deleteV2PageReact Ejemplo
Copy Copy
1
2const tenantId: string = "tenant_79021";
3const urlId: string = "blog/my-first-post";
4const id: string = "reaction_9f8b7c";
5let includeHistory: boolean | undefined = undefined; // indicador opcional, usado en algunas llamadas
6
7const result: DeleteV2PageReact200Response = await deleteV2PageReact(tenantId, urlId, id);
8console.log(result);
9

getV1PageLikes Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring

Respuesta

Devuelve: GetV1PageLikes200Response

Ejemplo

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

getV2PageReacts Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstring

Respuesta

Devuelve: GetV2PageReacts200Response

Ejemplo

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

getV2PageReactUsers Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring
idstring

Respuesta

Devuelve: GetV2PageReactUsers200Response

Ejemplo

Ejemplo de getV2PageReactUsers
Copy Copy
1
2const tenantId: string = "7421";
3const urlId: string = "sports/london-marathon";
4const id: string = "reactUser-3fa85f64-5717-4562-b3fc-2c963f66afa6";
5const includeDeleted: boolean | undefined = undefined; // bandera opcional (demostración)
6
7const result: GetV2PageReactUsers200Response = await getV2PageReactUsers(tenantId, urlId, id);
8

addPage Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createAPIPageDataCreateAPIPageData

Respuesta

Devuelve: AddPageAPIResponse


deletePage Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: DeletePageAPIResponse


getOfflineUsers Internal Link

Comentaristas anteriores en la página que NO están actualmente en línea. Ordenados por displayName. Utilice esto después de agotar /users/online para mostrar una sección "Miembros". Paginación por cursor en commenterName: el servidor recorre el índice parcial {tenantId, urlId, commenterName} desde afterName hacia adelante mediante $gt, sin coste de $skip.

Parámetros

NameTypeRequiredDescription
tenantIdstring
urlIdstring
afterNamestringNo
afterUserIdstringNo

Respuesta

Devuelve: GetOfflineUsers200Response

Ejemplo

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

getOnlineUsers Internal Link

Actualmente, los espectadores en línea de una página: personas cuya sesión websocket está suscrita a la página en este momento. Devuelve anonCount + totalCount (suscriptores de toda la sala, incluyendo espectadores anónimos que no enumeramos).

Parámetros

NameTypeRequiredDescription
tenantIdstringYes
urlIdstringYes
afterNamestringNo
afterUserIdstringNo

Respuesta

Devuelve: GetOnlineUsers200Response

Ejemplo

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

getPageByURLId Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstring

Respuesta

Devuelve: GetPageByURLIdAPIResponse


getPages Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring

Respuesta

Devuelve: GetPagesAPIResponse


getPagesPublic Internal Link

Lista las páginas de un tenant. Usado por el cliente de escritorio FChat para completar su lista de salas. Requiere que enableFChat sea true en la configuración personalizada resuelta para cada página. Las páginas que requieren SSO se filtran en función del acceso por grupos del usuario que realiza la solicitud.

Parámetros

NameTypeRequiredDescription
tenantIdstring
cursorstringNo
limitnumberNo
qstringNo
sortByPagesSortByNo
hasCommentsbooleanNo

Respuesta

Devuelve: GetPagesPublic200Response

Ejemplo

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

getUsersInfo Internal Link

Información masiva de usuarios para un tenant. Dado userIds, devuelve información de visualización de User / SSOUser. Usado por el widget de comentarios para enriquecer a los usuarios que acaban de aparecer mediante un evento de presencia. Sin contexto de página: la privacidad se aplica de forma uniforme (los perfiles privados se enmascaran).

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idsstring

Respuesta

Devuelve: GetUsersInfo200Response

Ejemplo

Ejemplo de getUsersInfo
Copy Copy
1
2const tenantId: string = 'acme-tenant-007';
3const userIdsList: string[] = ['user_12a', 'user_34b', 'user_56c'];
4const separator: string | undefined = undefined; // opcional; si es undefined, por defecto usa la coma
5const ids: string = userIdsList.join(separator ?? ',');
6const usersInfo: GetUsersInfo200Response = await getUsersInfo(tenantId, ids);
7

patchPage Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
updateAPIPageDataUpdateAPIPageData

Respuesta

Devuelve: PatchPageAPIResponse

deletePendingWebhookEvent Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getPendingWebhookEventCount Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
commentIdstringNo
externalIdstringNo
eventTypestringNo
typestringNo
domainstringNo
attemptCountGTnumberNo

Respuesta

Devuelve: GetPendingWebhookEventCount200Response

Ejemplo

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

getPendingWebhookEvents Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
commentIdstringNo
externalIdstringNo
eventTypestringNo
typestringNo
domainstringNo
attemptCountGTnumberNo
skipnumberNo

Respuesta

Devuelve: GetPendingWebhookEvents200Response

Ejemplo

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

createQuestionConfig Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
createQuestionConfigBodyCreateQuestionConfigBody

Respuesta

Devuelve: CreateQuestionConfig200Response

Ejemplo

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

deleteQuestionConfig Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getQuestionConfig Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetQuestionConfig200Response

Ejemplo

Ejemplo de getQuestionConfig
Copy Copy
1
2const tenantId: string = "acme-corp-47";
3const questionId: string = "q-4f2b9a";
4const includeDrafts: boolean | undefined = undefined; // optional parameter placeholder
5const result: GetQuestionConfig200Response = await getQuestionConfig(tenantId, questionId);
6console.log(result);
7

getQuestionConfigs Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
skipnumberNo

Respuesta

Devuelve: GetQuestionConfigs200Response

Ejemplo

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

updateQuestionConfig Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
updateQuestionConfigBodyUpdateQuestionConfigBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

createQuestionResult Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createQuestionResultBodyCreateQuestionResultBody

Respuesta

Devuelve: CreateQuestionResult200Response

Ejemplo

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

deleteQuestionResult Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getQuestionResult Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetQuestionResult200Response

Ejemplo

Ejemplo de getQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2a7c9';
3const questionId: string = 'q_8d4f1b2c3a';
4const options: { includeMeta?: boolean } = { includeMeta: true }; // demostración de parámetro opcional
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, questionId);
6const apiStatus: APIStatus | undefined = (result as unknown as { apiStatus?: APIStatus }).apiStatus;
7const question: QuestionResult | undefined = (result as unknown as { question?: QuestionResult }).question;
8

getQuestionResults Internal Link

Parameters

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstringNo
userIdstringNo
startDatestringNo
questionIdstringNo
questionIdsstringNo
skipnumberNo

Respuesta

Devuelve: GetQuestionResults200Response

Ejemplo

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

updateQuestionResult Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
updateQuestionResultBodyUpdateQuestionResultBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

aggregateQuestionResults Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
timeBucketAggregateTimeBucketNo
startDateDateNo
forceRecalculatebooleanNo

Respuesta

Devuelve: AggregateQuestionResults200Response

Ejemplo

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

bulkAggregateQuestionResults Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
bulkAggregateQuestionResultsRequestBulkAggregateQuestionResultsRequest
forceRecalculatebooleanNo

Respuesta

Devuelve: BulkAggregateQuestionResults200Response

Ejemplo

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

combineCommentsWithQuestionResults Internal Link

Parámetros

NameTipoRequeridoDescripción
tenantIdstring
questionIdstringNo
questionIdsArrayNo
urlIdstringNo
startDateDateNo
forceRecalculatebooleanNo
minValuenumberNo
maxValuenumberNo
limitnumberNo

Respuesta

Devuelve: CombineCommentsWithQuestionResults200Response

Ejemplo

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

addSSOUser Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createAPISSOUserDataCreateAPISSOUserData

Respuesta

Devuelve: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
deleteCommentsbooleanNo
commentDeleteModestringNo

Respuesta

Devuelve: DeleteSSOUserAPIResponse

getSSOUserByEmail Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
emailstring

Respuesta

Devuelve: GetSSOUserByEmailAPIResponse


getSSOUserById Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
skipnumberNo

Respuesta

Devuelve: GetSSOUsers200Response


patchSSOUser Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
updateAPISSOUserDataUpdateAPISSOUserData
updateCommentsbooleanNo

Respuesta

Devuelve: PatchSSOUserAPIResponse

putSSOUser Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
updateAPISSOUserDataUpdateAPISSOUserData
updateCommentsbooleanNo

Respuesta

Devuelve: PutSSOUserAPIResponse

Ejemplo

Ejemplo de 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

createSubscription Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createAPIUserSubscriptionDataCreateAPIUserSubscriptionData

Respuesta

Devuelve: CreateSubscriptionAPIResponse

Ejemplo

Ejemplo de 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, // parámetro opcional demostrado
9 metadata: { campaign: "spring_launch" } // parámetro opcional demostrado
10};
11const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
12

deleteSubscription Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
userIdstringNo

Respuesta

Devuelve: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
userIdstringNo

Respuesta

Devuelve: GetSubscriptionsAPIResponse

Ejemplo

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

updateSubscription Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
updateAPIUserSubscriptionDataUpdateAPIUserSubscriptionData
userIdstringNo

Respuesta

Devuelve: UpdateSubscriptionAPIResponse

Ejemplo

Ejemplo de 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

getTenantDailyUsages Internal Link


Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
yearNumbernumberNo
monthNumbernumberNo
dayNumbernumberNo
skipnumberNo

Respuesta

Devuelve: GetTenantDailyUsages200Response

Ejemplo

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

createTenantPackage Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createTenantPackageBodyCreateTenantPackageBody

Respuesta

Devuelve: CreateTenantPackage200Response

Ejemplo

Ejemplo de createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_7890";
3const createTenantPackageBody: CreateTenantPackageBody = {
4 packageName: "Growth Plan",
5 maxSeats: 2500,
6 features: {
7 moderation: true,
8 analytics: true,
9 sso: { enabled: true, provider: "saml" }
10 },
11 billing: { interval: "monthly", priceCents: 19900 },
12 // parámetro opcional demostrado: notes no es obligatorio pero se proporciona
13 notes: "Onboarding bundle with priority support"
14};
15const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
16

deleteTenantPackage Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const packageId: string = 'pkg-2026-06-15-001';
4const dryRun: boolean | undefined = undefined; // ejemplo de bandera opcional (no requerido por la función)
5const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
6

getTenantPackage Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetTenantPackage200Response

Ejemplo

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

getTenantPackages Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
skipnumberNo

Respuesta

Devuelve: GetTenantPackages200Response

Ejemplo

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

replaceTenantPackage Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
replaceTenantPackageBodyReplaceTenantPackageBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

updateTenantPackage Internal Link

Parámetros

NameTypeRequeridoDescripción
tenantIdstring
idstring
updateTenantPackageBodyUpdateTenantPackageBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

createTenantUser Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
createTenantUserBodyCreateTenantUserBody

Respuesta

Devuelve: CreateTenantUser200Response

Ejemplo

Ejemplo de createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_7f4a2b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "jane.doe@example.com",
5 firstName: "Jane",
6 lastName: "Doe",
7 role: "commenter",
8 approved: true,
9 displayName: "Jane D." // opcional: proporcionar un nombre para mostrar
10};
11const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
12console.log(result);
13

deleteTenantUser Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
deleteCommentsstringNo
commentDeleteModestringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getTenantUser Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetTenantUser200Response

Ejemplo

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

getTenantUsers Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
skipnumberNo

Respuesta

Devuelve: GetTenantUsers200Response

Ejemplo

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

replaceTenantUser Internal Link


Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
replaceTenantUserBodyReplaceTenantUserBody
updateCommentsstringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

Parámetros

NameTypeRequeridoDescripción
tenantIdstring
idstring
redirectURLstringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

updateTenantUser Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
updateTenantUserBodyUpdateTenantUserBody
updateCommentsstringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

createTenant Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
createTenantBodyCreateTenantBody

Respuesta

Devuelve: CreateTenant200Response

Ejemplo

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

deleteTenant Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
surestringNo

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

getTenant Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetTenant200Response

Ejemplo

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

getTenants Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
metastringNo
skipnumberNo

Respuesta

Devuelve: GetTenants200Response

Ejemplo

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

updateTenant Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring
updateTenantBodyUpdateTenantBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

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

changeTicketState Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
userIdstring
idstring
changeTicketStateBodyChangeTicketStateBody

Respuesta

Devuelve: ChangeTicketState200Response

Ejemplo

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

createTicket Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
userIdstring
createTicketBodyCreateTicketBody

Respuesta

Devuelve: CreateTicket200Response

Ejemplo

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

getTicket Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
idstring
userIdstringNo

Respuesta

Devuelve: GetTicket200Response

Ejemplo

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

getTickets Internal Link

Parámetros

NombreTypeRequeridoDescripción
tenantIdstring
userIdstringNo
statenumberNo
skipnumberNo
limitnumberNo

Respuesta

Devuelve: GetTickets200Response

Ejemplo

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

getTranslations Internal Link

Parámetros

NombreTipoRequeridoDescripción
namespacestring
componentstring
localestringNo
useFullTranslationIdsbooleanNo

Respuesta

Devuelve: GetTranslations200Response

Ejemplo

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

uploadImage Internal Link


Subir y redimensionar una imagen

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
fileBlob
sizePresetSizePresetNo
urlIdstringNo

Respuesta

Devuelve: UploadImageResponse


getUserBadgeProgressById Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
idstring

Respuesta

Devuelve: GetUserBadgeProgressById200Response

Ejemplo

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

getUserBadgeProgressByUserId Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
userIdstring

Respuesta

Devuelve: GetUserBadgeProgressById200Response

Ejemplo

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

getUserBadgeProgressList Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
userIdstringNo
limitnumberNo
skipnumberNo

Respuesta

Devuelve: GetUserBadgeProgressList200Response

Ejemplo

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

createUserBadge Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
createUserBadgeParamsCreateUserBadgeParams

Respuesta

Devuelve: CreateUserBadge200Response

Ejemplo

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

deleteUserBadge Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: UpdateUserBadge200Response

Ejemplo

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

getUserBadge Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetUserBadge200Response

Ejemplo

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

getUserBadges Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
userIdstringNo
badgeIdstringNo
typenumberNo
displayedOnCommentsbooleanNo
limitnumberNo
skipnumberNo

Respuesta

Devuelve: GetUserBadges200Response

Ejemplo

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

updateUserBadge Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
updateUserBadgeParamsUpdateUserBadgeParams

Respuesta

Devuelve: UpdateUserBadge200Response

Ejemplo

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

getUserNotificationCount Internal Link

Parámetros

NameTypeRequiredDescription
tenantIdstring
ssostringNo

Respuesta

Devuelve: GetUserNotificationCount200Response

Ejemplo

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

getUserNotifications Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
urlIdstringNo
pageSizenumberNo
afterIdstringNo
includeContextbooleanNo
afterCreatedAtnumberNo
unreadOnlybooleanNo
dmOnlybooleanNo
noDmbooleanNo
includeTranslationsbooleanNo
includeTenantNotificationsbooleanNo
ssostringNo

Respuesta

Devuelve: GetUserNotifications200Response

Ejemplo

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

resetUserNotificationCount Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
ssostringNo

Respuesta

Devuelve: ResetUserNotifications200Response

Ejemplo

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

resetUserNotifications Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
afterIdstringNo
afterCreatedAtnumberNo
unreadOnlybooleanNo
dmOnlybooleanNo
noDmbooleanNo
ssostringNo

Respuesta

Devuelve: ResetUserNotifications200Response

Ejemplo

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

updateUserNotificationCommentSubscriptionStatus Internal Link

Habilitar o deshabilitar notificaciones para un comentario específico.

Parámetros

NameTypeRequiredDescription
tenantIdstring
notificationIdstring
optedInOrOutUpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum
commentIdstring
ssostringNo

Respuesta

Devuelve: UpdateUserNotificationStatus200Response

Ejemplo

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

updateUserNotificationPageSubscriptionStatus Internal Link

Habilita o deshabilita las notificaciones para una página. Cuando los usuarios están suscritos a una página, se crean notificaciones para nuevos comentarios raíz, y también

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring
urlstring
pageTitlestring
subscribedOrUnsubscribedUpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum
ssostringNo

Respuesta

Devuelve: UpdateUserNotificationStatus200Response

Ejemplo

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

updateUserNotificationStatus Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
notificationIdstring
newStatusUpdateUserNotificationStatusNewStatusEnum
ssostringNo

Respuesta

Devuelve: UpdateUserNotificationStatus200Response

Ejemplo

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

getUserPresenceStatuses Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdWSstring
userIdsstring

Respuesta

Devuelve: GetUserPresenceStatuses200Response

Ejemplo

Ejemplo de getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlIdWS: string = 'wss://comments.fastsite.com/ws/tenant_42';
4const userIds: string = 'user_9012,user_3478';
5const includePresenceMetadata: boolean | undefined = true; // ejemplo de parámetro opcional
6const presenceStatuses: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

searchUsers Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstringYes
urlIdstringYes
usernameStartsWithstringNo
mentionGroupIdsArrayNo
ssostringNo
searchSectionSearchUsersSearchSectionEnumNo

Respuesta

Devuelve: SearchUsers200Response

Ejemplo

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

getUser Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring

Respuesta

Devuelve: GetUser200Response

Ejemplo

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

createVote Internal Link

Parámetros

NameTypeRequeridoDescripción
tenantIdstring
commentIdstring
directionCreateVoteDirectionEnum
userIdstringNo
anonUserIdstringNo

Respuesta

Devuelve: VoteComment200Response

Ejemplo

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

deleteVote Internal Link

Parámetros

NombreTipoRequeridoDescripción
tenantIdstring
idstring
editKeystringNo

Respuesta

Devuelve: DeleteCommentVote200Response

Ejemplo

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

getVotes Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring

Respuesta

Devuelve: GetVotes200Response

Ejemplo

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

getVotesForUser Internal Link

Parámetros

NombreTipoObligatorioDescripción
tenantIdstring
urlIdstring
userIdstringNo
anonUserIdstringNo

Respuesta

Devuelve: GetVotesForUser200Response

Ejemplo

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

¿Necesitas ayuda?

Si encuentras algún problema o tienes preguntas sobre el SDK de JavaScript/TypeScript, por favor:

Contribuciones

¡Las contribuciones son bienvenidas! Visita el repositorio de GitHub para las pautas de contribución.