FastComments.com

FastComments JavaScript/TypeScript SDK


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

SDK oficial de JavaScript/TypeScript para la API de FastComments

Repositorio

Ver en GitHub


Instalación Internal Link

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

Nombre Tipo Obligatorio Descripción
tenantId string
aggregationRequest AggregationRequest
parentTenantId string No
includeStats boolean No

Respuesta

Devuelve: AggregationResponse


getAuditLogs Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
limit number No
skip number No
order SORTDIR No
after number No
before number No

Respuesta

Devuelve: GetAuditLogs200Response


blockFromCommentPublic Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
publicBlockFromCommentParams PublicBlockFromCommentParams
sso string No

Respuesta

Devuelve: BlockFromCommentPublic200Response


unBlockCommentPublic Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
commentId string
publicBlockFromCommentParams PublicBlockFromCommentParams
sso string No

Respuesta

Devuelve: UnBlockCommentPublic200Response


checkedCommentsForBlocked Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
commentIds string
sso string No

Respuesta

Devuelve: CheckedCommentsForBlocked200Response


blockUserFromComment Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
blockFromCommentParams BlockFromCommentParams
userId string No
anonUserId string No

Respuesta

Devuelve: BlockFromCommentPublic200Response


createCommentPublic Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
urlId string
broadcastId string
commentData CommentData
sessionId string No
sso string No

Respuesta

Devuelve: CreateCommentPublic200Response


deleteComment Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
contextUserId string No
isLive boolean No

Respuesta

Devuelve: DeleteComment200Response


deleteCommentPublic Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
broadcastId string
editKey string No
sso string No

Respuesta

Devuelve: DeleteCommentPublic200Response


deleteCommentVote Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
voteId string
urlId string
broadcastId string
editKey string No
sso string No

Respuesta

Devuelve: DeleteCommentVote200Response


flagComment Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
userId string No
anonUserId string No

Respuesta

Devuelve: FlagComment200Response


getComment Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetComment200Response


getComments Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
page number No
limit number No
skip number No
asTree boolean No
skipChildren number No
limitChildren number No
maxTreeDepth number No
urlId string No
userId string No
anonUserId string No
contextUserId string No
hashTag string No
parentId string No
direction SortDirections No

Respuesta

Devuelve: GetComments200Response


getCommentsPublic Internal Link

req tenantId urlId

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
urlId string
page number No
direction SortDirections No
sso string No
skip number No
skipChildren number No
limit number No
limitChildren number No
countChildren boolean No
fetchPageForCommentId string No
includeConfig boolean No
countAll boolean No
includei10n boolean No
locale string No
modules string No
isCrawler boolean No
includeNotificationCount boolean No
asTree boolean No
maxTreeDepth number No
useFullTranslationIds boolean No
parentId string No
searchText string No
hashTags Array No
userId string No
customConfigStr string No
afterCommentId string No
beforeCommentId string No

Respuesta

Devuelve: GetCommentsPublic200Response

getCommentText Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
editKey string No
sso string No

Respuesta

Devuelve: GetCommentText200Response

getCommentVoteUserNames Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
dir number
sso string No

Respuesta

Devuelve: GetCommentVoteUserNames200Response

lockComment Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
commentId string
broadcastId string
sso string No

Respuesta

Devuelve: LockComment200Response


pinComment Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
commentId string
broadcastId string
sso string No

Respuesta

Devuelve: PinComment200Response


saveComment Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createCommentParams CreateCommentParams
isLive boolean No
doSpamCheck boolean No
sendEmails boolean No
populateNotifications boolean No

Respuesta

Devuelve: SaveComment200Response

saveCommentsBulk Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createCommentParams Array
isLive boolean No
doSpamCheck boolean No
sendEmails boolean No
populateNotifications boolean No

Respuesta

Devuelve: Array<SaveComment200Response


setCommentText Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
broadcastId string
commentTextUpdateRequest CommentTextUpdateRequest
editKey string No
sso string No

Respuesta

Devuelve: SetCommentText200Response

unBlockUserFromComment Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
unBlockFromCommentParams UnBlockFromCommentParams
userId string No
anonUserId string No

Respuesta

Devuelve: UnBlockCommentPublic200Response


unFlagComment Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
userId string No
anonUserId string No

Respuesta

Devuelve: FlagComment200Response


unLockComment Internal Link

Parámetros

Name Type Required Description
tenantId string
commentId string
broadcastId string
sso string No

Respuesta

Devuelve: LockComment200Response


unPinComment Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
broadcastId string
sso string No

Respuesta

Devuelve: PinComment200Response


updateComment Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
body PickAPICommentUpdatableCommentFields
contextUserId string No
doSpamCheck boolean No
isLive boolean No

Respuesta

Devuelve: FlagCommentPublic200Response


voteComment Internal Link

Parámetros

Name Type Required Description
tenantId string
commentId string
urlId string
broadcastId string
voteBodyParams VoteBodyParams
sessionId string No
sso string No

Respuesta

Devuelve: VoteComment200Response


addDomainConfig Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
addDomainConfigParams AddDomainConfigParams

Respuesta

Devuelve: AddDomainConfig200Response


deleteDomainConfig Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
domain string

Respuesta

Devuelve: DeleteDomainConfig200Response


getDomainConfig Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
domain string

Respuesta

Devuelve: GetDomainConfig200Response


getDomainConfigs Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string

Respuesta

Devuelve: GetDomainConfigs200Response


patchDomainConfig Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
domainToUpdate string
patchDomainConfigParams PatchDomainConfigParams

Respuesta

Devuelve: GetDomainConfig200Response


putDomainConfig Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
domainToUpdate string
updateDomainConfigParams UpdateDomainConfigParams

Respuesta

Devuelve: GetDomainConfig200Response


createEmailTemplate Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createEmailTemplateBody CreateEmailTemplateBody

Respuesta

Devuelve: CreateEmailTemplate200Response

Ejemplo

Ejemplo de createEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_7a9f2b3d";
3
4const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: "Comment Notification",
6 subject: "New comment on your article: ",
7 htmlBody: "<p> left a comment:</p><blockquote></blockquote>",
8 enabled: true,
9 defaultLocale: "en-US",
10 metadata: { createdBy: "admin@example.com", purpose: "notify_comment" } // datos adicionales (opcionales)
11};
12
13const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
14

deleteEmailTemplate Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_4b2f6a-4b2f6a2d";
3const templateId: string = "email_template_9f8b7c3e";
4const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
5const status: APIStatus | undefined = result?.status
6

deleteEmailTemplateRenderError Internal Link

Parámetros

Name Type Required Description
tenantId string
id string
errorId string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

deleteEmailTemplateRenderError Ejemplo
Copy Copy
1
2const tenantId: string = "tenant_8f3b2a9c";
3const id: string = "template_4a1c9f7e";
4const errorId: string = "err_20260112_abc123";
5const result: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
6

getEmailTemplate Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetEmailTemplate200Response

Ejemplo

Ejemplo de getEmailTemplate
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-enterprises-123';
4 const id: string = 'welcome-email-template-v2';
5 const locale: string | undefined = 'en-US'; // ejemplo de parámetro opcional
6 const template: GetEmailTemplate200Response = await getEmailTemplate(tenantId, id);
7 console.log(template, locale);
8})();
9

getEmailTemplateDefinitions Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string

Respuesta

Devuelve: GetEmailTemplateDefinitions200Response

Ejemplo

Ejemplo de getEmailTemplateDefinitions
Copy Copy
1
2const tenantId: string = 'acme-enterprises-78f2';
3const emailTemplates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4

getEmailTemplateRenderErrors Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
skip number No

Respuesta

Devuelve: GetEmailTemplateRenderErrors200Response

Ejemplo

Ejemplo de getEmailTemplateRenderErrors
Copy Copy
1
2const tenantId: string = "tenant_7b3f2a9c";
3const id: string = "tmpl_4f1b2c9e";
4const skip: number = 25;
5const result: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
6

getEmailTemplates Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
skip number No

Respuesta

Devuelve: GetEmailTemplates200Response

Ejemplo

Ejemplo de getEmailTemplates
Copy Copy
1
2const tenantId: string = 'tenant_8f4d2b7c';
3const responseWithoutSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
4const skip: number = 20;
5const responseWithSkip: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
6

renderEmailTemplate Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
renderEmailTemplateBody RenderEmailTemplateBody
locale string No

Respuesta

Devuelve: RenderEmailTemplate200Response

Ejemplo

Ejemplo de renderEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-7f3';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'new-comment-notification',
5 recipientEmail: 'jane.doe@acme.com',
6 variables: {
7 commenterName: 'Samir Patel',
8 commentText: 'I found this article really helpful — thanks for sharing!',
9 threadUrl: 'https://acme.com/blog/123#comments'
10 },
11 includeUnsubscribeLink: true
12};
13const locale: string = 'en-US';
14const response: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
15

updateEmailTemplate Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
updateEmailTemplateBody UpdateEmailTemplateBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateEmailTemplate
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const id: string = 'email_tpl_42b7a9';
4const updateEmailTemplateBody: UpdateEmailTemplateBody = {
5 name: 'Comment Flag Notification',
6 subject: 'A comment was flagged on acme.com',
7 html: '<p>A comment by was flagged. Review at </p>',
8 replyTo: 'noreply@acme.com', // campo opcional demostrado
9 enabled: true,
10 customConfig: { priority: 'high' } // parámetros personalizados opcionales
11};
12const response: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
13

getEventLog Internal Link

req tenantId urlId userIdWS

Parámetros

Name Type Requerido Descripción
tenantId string
urlId string
userIdWS string
startTime number
endTime number

Respuesta

Devuelve: GetEventLog200Response

getGlobalEventLog Internal Link

req tenantId urlId userIdWS

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
urlId string
userIdWS string
startTime number
endTime number

Respuesta

Devuelve: GetEventLog200Response

createFeedPost Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
createFeedPostParams CreateFeedPostParams
broadcastId string No
isLive boolean No
doSpamCheck boolean No
skipDupCheck boolean No

Respuesta

Devuelve: CreateFeedPost200Response


createFeedPostPublic Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
createFeedPostParams CreateFeedPostParams
broadcastId string No
sso string No

Respuesta

Devuelve: CreateFeedPostPublic200Response


deleteFeedPostPublic Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
postId string
broadcastId string No
sso string No

Respuesta

Devuelve: DeleteFeedPostPublic200Response

getFeedPosts Internal Link


req tenantId afterId

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
afterId string No
limit number No
tags Array No

Respuesta

Devuelve: GetFeedPosts200Response


getFeedPostsPublic Internal Link

req tenantId afterId

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
afterId string No
limit number No
tags Array No
sso string No
isCrawler boolean No
includeUserInfo boolean No

Respuesta

Devuelve: GetFeedPostsPublic200Response


getFeedPostsStats Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
postIds Array
sso string No

Respuesta

Devuelve: GetFeedPostsStats200Response

getUserReactsPublic Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
postIds Array No
sso string No

Respuesta

Devuelve: GetUserReactsPublic200Response


reactFeedPostPublic Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
postId string
reactBodyParams ReactBodyParams
isUndo boolean No
broadcastId string No
sso string No

Respuesta

Devuelve: ReactFeedPostPublic200Response


updateFeedPost Internal Link

Parámetros

Name Tipo Requerido Descripción
tenantId string
id string
feedPost FeedPost

Respuesta

Devuelve: FlagCommentPublic200Response


updateFeedPostPublic Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
postId string
updateFeedPostParams UpdateFeedPostParams
broadcastId string No
sso string No

Respuesta

Devuelve: CreateFeedPostPublic200Response

flagCommentPublic Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
commentId string
isFlagged boolean
sso string No

Respuesta

Devuelve: FlagCommentPublic200Response


addHashTag Internal Link

Parameters

Nombre Tipo Requerido Descripción
tenantId string No
createHashTagBody CreateHashTagBody No

Response

Devuelve: AddHashTag200Response

Ejemplo

Ejemplo de addHashTag
Copy Copy
1
2const tenantId: string = 'tenant_7b2f6c2b';
3const createBody: CreateHashTagBody = {
4 tag: 'feature-request',
5 label: 'Feature Request',
6 description: 'Requests for new functionality in the web client',
7 isActive: true,
8 visibility: 'public',
9 allowedDomains: ['example.com', 'internal.example.com']
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createBody);
12const resultWithoutTenant: AddHashTag200Response = await addHashTag(undefined, {
13 tag: 'bug',
14 label: 'Bug',
15 description: 'Use for reproducible bugs reported by users',
16 isActive: true,
17 visibility: 'public'
18});
19

addHashTagsBulk Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string No
bulkCreateHashTagsBody BulkCreateHashTagsBody No

Respuesta

Devuelve: AddHashTagsBulk200Response

Ejemplo

Ejemplo de addHashTagsBulk
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_3f2b9a';
4 const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
5 tags: [
6 { name: 'performance', description: 'Comments about site performance', visibleToModeratorsOnly: false },
7 { name: 'feature-request', description: 'Requests for new features', visibleToModeratorsOnly: true }
8 ]
9 };
10 const result: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
11 const resultWithNoTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBody);
12 console.log(result, resultWithNoTenant);
13})();
14

deleteHashTag Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tag string
tenantId string No
deleteHashTagRequest DeleteHashTagRequest No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteHashTag
Copy Copy
1
2const tag: string = 'breaking-news';
3const tenantId: string = 'tenant_42';
4const deleteReq: DeleteHashTagRequest = { removedBy: 'moderator_jane', reason: 'off-topic for this community', deleteAssociatedComments: true } as DeleteHashTagRequest;
5const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteReq);
6

getHashTags Internal Link

Parámetros

Name Type Requerido Description
tenantId string
page number No

Respuesta

Devuelve: GetHashTags200Response

Ejemplo

Ejemplo de getHashTags
Copy Copy
1
2(async () => {
3 const tenantId: string = "acme-corp-7a9f";
4 const tagsPage1: GetHashTags200Response = await getHashTags(tenantId);
5 const tagsPage2: GetHashTags200Response = await getHashTags(tenantId, 2);
6 console.log(tagsPage1, tagsPage2);
7})();
8

patchHashTag Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tag string
tenantId string No
updateHashTagBody UpdateHashTagBody No

Respuesta

Devuelve: PatchHashTag200Response

Ejemplo

Ejemplo de patchHashTag
Copy Copy
1
2const tag: string = 'release-2026';
3const tenantId: string = 'tenant_42';
4const updateHashTagBody: UpdateHashTagBody = {
5 displayName: 'Release 2026',
6 description: 'Discussions and notes for the 2026 product release',
7 isActive: true
8};
9const result: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
10

createModerator Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createModeratorBody CreateModeratorBody

Respuesta

Devuelve: CreateModerator200Response

Ejemplo

Ejemplo de createModerator
Copy Copy
1
2const tenantId: string = "tenant_prod_us-east_01";
3const createModeratorBody: CreateModeratorBody = {
4 email: "maria.lopez+mod@fastcompany.com",
5 username: "mlopez_mod",
6 displayName: "Maria Lopez",
7 roles: ["content_moderator"],
8 notifyOnReports: true,
9 metadata: { region: "us-east", team: "community" }
10};
11const result: CreateModerator200Response = await createModerator(tenantId, createModeratorBody);
12

deleteModerator Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
sendEmail string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteModerator
Copy Copy
1
2const tenantId: string = 'acme-tenant-987';
3const moderatorId: string = 'mod-78b2c9a4-3f1e-4d6a';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, moderatorId, sendEmail);
6

getModerator Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetModerator200Response

Ejemplo

Ejemplo de getModerator
Copy Copy
1
2const tenantId: string = "tenant_eu_4f8d2b9e";
3const maybeModeratorId: string | undefined = "mod_91c3b7a2"; // origen opcional (podría ser undefined)
4const moderator: GetModerator200Response = await getModerator(tenantId, maybeModeratorId!);
5

getModerators Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
skip number No

Respuesta

Devuelve: GetModerators200Response

Ejemplo

Ejemplo de getModerators
Copy Copy
1
2const tenantId: string = "tenant_corp_7f9b2a";
3const moderatorsPage1: GetModerators200Response = await getModerators(tenantId);
4const skip: number = 50;
5const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, skip);
6

sendInvite Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
fromName string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de sendInvite
Copy Copy
1
2const tenantId: string = 'acme-tenant-004';
3const id: string = 'comment_9b7f3a2c';
4const fromName: string = 'María Hernández';
5const response: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName);
6

updateModerator Internal Link

Parámetros

Name Type Required Description
tenantId string
id string
updateModeratorBody UpdateModeratorBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateModerator
Copy Copy
1
2const tenantId: string = '4f8a9c2e-3b6d-4d9e-8c2f-1a2b3c4d5e6f';
3const id: string = 'mod_92a7c4';
4const updateModeratorBodyMinimal: UpdateModeratorBody = { displayName: 'Sophia Patel' };
5const updateModeratorBodyWithOptional: UpdateModeratorBody = {
6 displayName: 'Sophia Patel',
7 email: 'sophia.patel@newsroom.example',
8 permissions: ['remove_comments', 'ban_user'],
9 notifyOnFlag: true // parámetro opcional demostrado
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBodyWithOptional);
12

deleteNotificationCount Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_7f3a1b2c4d9e';
3const notificationId: string = 'notif_8c9d0a1b2f3e4b7';
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, notificationId);
5

getCachedNotificationCount Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string

Respuesta

Devuelve: GetCachedNotificationCount200Response

Ejemplo

Ejemplo de getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const baseNotificationId: string = 'notif-000123';
4const idSuffix: string | undefined = undefined; // ejemplo de parámetro opcional
5const notificationId: string = idSuffix ? `${baseNotificationId}-${idSuffix}` : baseNotificationId;
6const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, notificationId);
7console.log(result);
8

getNotificationCount Internal Link

Parámetros

Name Type Required Description
tenantId string
userId string No
urlId string No
fromCommentId string No
viewed boolean No
type string No

Respuesta

Devuelve: GetNotificationCount200Response

Ejemplo

Ejemplo de getNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_8a9b7c';
3const userId: string = 'user_42b3c';
4const urlId: string = 'https://blog.example.com/posts/introducing-new-editor';
5const fromCommentId: string | undefined = undefined;
6const viewed: boolean = false;
7const type: string = 'mention';
8const result: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, fromCommentId, viewed, type);
9

getNotifications Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
userId string No
urlId string No
fromCommentId string No
viewed boolean No
type string No
skip number No

Respuesta

Devuelve: GetNotifications200Response

Ejemplo

Ejemplo de getNotifications
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_8f3b1a2c';
4 const userId: string = 'user_42';
5 const urlId: string = 'https://news.example.com/articles/2026/01/11/comment-thread';
6 const fromCommentId: string = 'cmt_9a7b';
7 const viewed: boolean = false;
8 const type: string = 'mention';
9 const skip: number = 0;
10 const response: GetNotifications200Response = await getNotifications(tenantId, userId, urlId, fromCommentId, viewed, type, skip);
11 console.log(response);
12})();
13

updateNotification Internal Link

Parámetros

Name Tipo Requerido Descripción
tenantId string
id string
updateNotificationBody UpdateNotificationBody
userId string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateNotification
Copy Copy
1
2const tenantId: string = "tenant_86a7b3";
3const id: string = "notif_20260112_01";
4const userId: string = "moderator_42";
5const updateNotificationBody: UpdateNotificationBody = {
6 name: "Flagged comment alert",
7 enabled: true,
8 channels: ["email"],
9 recipients: ["mod-team@news-site.com"],
10 threshold: 1
11};
12
13(async () => {
14 const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
15 console.log(result);
16})();
17

addPage Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createAPIPageData CreateAPIPageData

Respuesta

Devuelve: AddPageAPIResponse


deletePage Internal Link

Parámetros

Name Type Required Description
tenantId string
id string

Respuesta

Devuelve: DeletePageAPIResponse


getPageByURLId Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
urlId string

Respuesta

Devuelve: GetPageByURLIdAPIResponse


getPages Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string

Respuesta

Devuelve: GetPagesAPIResponse


patchPage Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
updateAPIPageData UpdateAPIPageData

Respuesta

Devuelve: PatchPageAPIResponse

deletePendingWebhookEvent Internal Link

Parámetros

Name Type Obligatorio Description
tenantId string
id string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deletePendingWebhookEvent
Copy Copy
1
2const tenantId: string = 'tenant_7f4e2b';
3const pendingEventId: string = '9f7b6a8c-3b2a-4c0d-a8e5-1234567890ab';
4const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, pendingEventId);
5console.log(result);
6

getPendingWebhookEventCount Internal Link

Parámetros

Name Type Requerido Descripción
tenantId string
commentId string No
externalId string No
eventType string No
type string No
domain string No
attemptCountGT number No

Respuesta

Devuelve: GetPendingWebhookEventCount200Response

Ejemplo

Ejemplo de getPendingWebhookEventCount
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9c3b2b';
4 const commentId: string = 'cmt_f4a1b2';
5 const externalId: string = 'ext-789';
6 const eventType: string = 'comment.created';
7 const type: string = 'delivery';
8 const domain: string = 'app.example.com';
9 const attemptCountGT: number = 2;
10
11 const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
12 tenantId,
13 commentId,
14 externalId,
15 eventType,
16 type,
17 domain,
18 attemptCountGT
19 );
20
21 console.log(result);
22})();
23

getPendingWebhookEvents Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
commentId string No
externalId string No
eventType string No
type string No
domain string No
attemptCountGT number No
skip number No

Respuesta

Devuelve: GetPendingWebhookEvents200Response

Ejemplo

Ejemplo de getPendingWebhookEvents
Copy Copy
1
2const tenantId: string = "tenant_78b2f1";
3const commentId: string = "cmt_0042";
4const eventType: string = "comment.created";
5const domain: string = "blog.example.com";
6const attemptCountGT: number = 1;
7const skip: number = 0;
8
9const pending: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
10 tenantId,
11 commentId,
12 undefined, // externalId
13 eventType,
14 undefined, // type
15 domain,
16 attemptCountGT,
17 skip
18);
19

createQuestionConfig Internal Link

Parámetros

Name Type Required Description
tenantId string
createQuestionConfigBody CreateQuestionConfigBody

Respuesta

Devuelve: CreateQuestionConfig200Response

Ejemplo

Ejemplo de createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_live_7f8b3c2a";
3const customOptions: QuestionConfigCustomOptionsInner[] = [
4 { value: "under18", label: "Under 18" },
5 { value: "18-24", label: "18-24" },
6 { value: "25-34", label: "25-34", defaultSelected: true }
7];
8const createQuestionConfigBody: CreateQuestionConfigBody = {
9 key: "age_range",
10 label: "What is your age range?",
11 required: false, // opcional: demostrar campos opcionales omitidos vs incluidos
12 renderingType: QuestionRenderingType.Dropdown,
13 options: customOptions,
14 whenSave: QuestionWhenSave.Always
15};
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

deleteQuestionConfig Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteQuestionConfig
Copy Copy
1
2async function deleteIfPresent(tenantId: string, id?: string): Promise<FlagCommentPublic200Response | null> {
3 if (!id) return null;
4 const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5 return result;
6}
7const tenantId: string = 'tenant_acme_001';
8const optionalConfigId: string | undefined = 'qcfg_20260112_01';
9(async (): Promise<void> => {
10 const deleted: FlagCommentPublic200Response | null = await deleteIfPresent(tenantId, optionalConfigId);
11 void deleted;
12})();
13

getQuestionConfig Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetQuestionConfig200Response

Ejemplo

Ejemplo de getQuestionConfig
Copy Copy
1
2const tenantId: string = 'acme-corp-47';
3const questionId: string = 'q-2026-01-12-01';
4const result: GetQuestionConfig200Response = await getQuestionConfig(tenantId, questionId);
5function summarizeConfig(cfg: GetQuestionConfig200Response, includeMetadata?: boolean): QuestionConfig | undefined {
6 // includeMetadata es opcional; implementación omitida por brevedad
7 return undefined;
8}
9const summarizedWithMeta: QuestionConfig | undefined = summarizeConfig(result, true);
10const summarizedDefault: QuestionConfig | undefined = summarizeConfig(result);
11

getQuestionConfigs Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
skip number No

Respuesta

Devuelve: GetQuestionConfigs200Response

Ejemplo

Ejemplo de getQuestionConfigs
Copy Copy
1
2const tenantId: string = 'tenant-42a7b9';
3const firstPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const secondPage: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 50);
5

updateQuestionConfig Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
updateQuestionConfigBody UpdateQuestionConfigBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateQuestionConfig
Copy Copy
1
2const tenantId: string = 'tenant-82b3a';
3const id: string = 'qst-20260112';
4const updateQuestionConfigBody: UpdateQuestionConfigBody = { label: 'Age verification', required: true, renderingType: 'singleChoice', customOptions: [{ value: '18-24', label: '18–24' }] } as UpdateQuestionConfigBody;
5const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
6

createQuestionResult Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
createQuestionResultBody CreateQuestionResultBody

Respuesta

Devuelve: CreateQuestionResult200Response

Ejemplo

Ejemplo de createQuestionResult
Copy Copy
1
2const tenantId: string = "fc_tenant_7a3c_us-east-1";
3const metaItem: MetaItem = { key: "referrer", value: "/blog/how-to-comment" };
4const createQuestionResultBody: CreateQuestionResultBody = {
5 questionId: "q_42",
6 commenterId: "user_1984",
7 answer: "yes",
8 score: 4,
9 meta: [metaItem] // metadatos opcionales demostrados
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

deleteQuestionResult Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteQuestionResult
Copy Copy
1
2const tenantId: string = 'acme-tenant-01';
3const questionResultId: string = '6f1a2b3c-4d5e-6789-abcd-ef0123456789';
4const deletedResult: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, questionResultId);
5console.log(deletedResult);
6

getQuestionResult Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetQuestionResult200Response

Ejemplo

Ejemplo de getQuestionResult
Copy Copy
1
2const tenantId: string = "3fa85f64-5717-4562-b3fc-2c963f66afa6";
3const questionId: string = "question_72f1b9c3a4";
4const result: GetQuestionResult200Response = await getQuestionResult(tenantId, questionId);
5console.log(result);
6

getQuestionResults Internal Link

Parámetros

Name Type Required Description
tenantId string
urlId string No
userId string No
startDate string No
questionId string No
questionIds string No
skip number No

Respuesta

Devuelve: GetQuestionResults200Response

Ejemplo

Ejemplo de getQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant_42';
3const urlId: string = 'news/2025/fastcomments-release';
4const userId: string = 'user_8b7f3c';
5const startDate: string = '2025-01-01T00:00:00Z';
6const questionIds: string = 'q123,q124';
7const skip: number = 20;
8const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, undefined, questionIds, skip);
9

updateQuestionResult Internal Link

Parámetros

Name Type Required Description
tenantId string
id string
updateQuestionResultBody UpdateQuestionResultBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_84f2b9';
3const id: string = 'question_3a7c1d';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 result: { verdict: 'helpful', confidence: 0.92 },
6 reviewer: { id: 'mod_102', name: 'Aisha Rahman' },
7 notifyUser: true // parámetro opcional incluido
8};
9const response: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
10

aggregateQuestionResults Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
questionId string No
questionIds Array No
urlId string No
timeBucket AggregateTimeBucket No
startDate Date No
forceRecalculate boolean No

Respuesta

Devuelve: AggregateQuestionResults200Response


bulkAggregateQuestionResults Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest
forceRecalculate boolean No

Respuesta

Devuelve: BulkAggregateQuestionResults200Response


combineCommentsWithQuestionResults Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
questionId string No
questionIds Array No
urlId string No
startDate Date No
forceRecalculate boolean No
minValue number No
maxValue number No
limit number No

Respuesta

Devuelve: CombineCommentsWithQuestionResults200Response


addSSOUser Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createAPISSOUserData CreateAPISSOUserData

Respuesta

Devuelve: AddSSOUserAPIResponse


deleteSSOUser Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
deleteComments boolean No
commentDeleteMode string No

Respuesta

Devuelve: DeleteSSOUserAPIResponse

getSSOUserByEmail Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
email string

Respuesta

Devuelve: GetSSOUserByEmailAPIResponse


getSSOUserById Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetSSOUserByIdAPIResponse


getSSOUsers Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
skip number No

Respuesta

Devuelve: GetSSOUsers200Response


patchSSOUser Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
updateAPISSOUserData UpdateAPISSOUserData
updateComments boolean No

Respuesta

Devuelve: PatchSSOUserAPIResponse

putSSOUser Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
updateAPISSOUserData UpdateAPISSOUserData
updateComments boolean No

Respuesta

Devuelve: PutSSOUserAPIResponse


createSubscription Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createAPIUserSubscriptionData CreateAPIUserSubscriptionData

Respuesta

Devuelve: CreateSubscriptionAPIResponse


deleteSubscription Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
userId string No

Respuesta

Devuelve: DeleteSubscriptionAPIResponse


getSubscriptions Internal Link


Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
userId string No

Respuesta

Devuelve: GetSubscriptionsAPIResponse


getTenantDailyUsages Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
yearNumber number No
monthNumber number No
dayNumber number No
skip number No

Respuesta

Devuelve: GetTenantDailyUsages200Response

Ejemplo

Ejemplo de getTenantDailyUsages
Copy Copy
1
2const tenantId: string = "tenant_89f3c2-prod";
3const yearNumber: number = 2026;
4const monthNumber: number = 1;
5const skip: number = 0;
6const usages: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, yearNumber, monthNumber, undefined, skip);
7

createTenantPackage Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createTenantPackageBody CreateTenantPackageBody

Respuesta

Devuelve: CreateTenantPackage200Response

Ejemplo

Ejemplo de createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_7f3b1a9c";
3const tenantPackage: TenantPackage = { id: "pkg_001", name: "Premium Plan", seats: 100 };
4const customConfig: CustomConfigParameters = { enableImages: true, maxImageSizeMb: 10 };
5const createTenantPackageBody: CreateTenantPackageBody = {
6 packageName: "Premium Plus",
7 tenantPackage,
8 customConfig,
9 notes: "Enable advanced moderation and image uploads" // parámetro opcional mostrado
10};
11const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
12

deleteTenantPackage Internal Link

Parámetros

Name Type Required Description
tenantId string
id string

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteTenantPackage
Copy Copy
1
2const tenantId: string = 'fc-tenant-8a9c2b';
3const packageId: string = 'pkg-47f3c9';
4const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
5

getTenantPackage Internal Link

Parámetros

Name Type Required Description
tenantId string
id string

Respuesta

Devuelve: GetTenantPackage200Response

Ejemplo

Ejemplo de getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_westus_01';
3const packageId: string = 'pkg_premium_annual_2026';
4interface FetchOptions { includeArchived?: boolean }
5const options: FetchOptions = { includeArchived: false };
6const result: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
7

getTenantPackages Internal Link

Parámetros

Name Type Required Description
tenantId string
skip number No

Respuesta

Devuelve: GetTenantPackages200Response

Ejemplo

Ejemplo de getTenantPackages
Copy Copy
1
2const tenantId: string = 'tenant_4f3a9c2d';
3const skip: number = 25;
4const packagesResponse: GetTenantPackages200Response = await getTenantPackages(tenantId);
5const pagedPackagesResponse: GetTenantPackages200Response = await getTenantPackages(tenantId, skip);
6

replaceTenantPackage Internal Link

Parámetros

Name Type Required Description
tenantId string
id string
replaceTenantPackageBody ReplaceTenantPackageBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de replaceTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant-9b72f2';
3const packageId: string = 'pkg-prod-v2';
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 name: 'Premium Moderation Bundle',
6 enabled: true,
7 maxModerators: 4,
8 // campos opcionales como "notes" o "trialExpiry" se omiten intencionalmente aquí
9} as ReplaceTenantPackageBody;
10const result: FlagCommentPublic200Response = await replaceTenantPackage(
11 tenantId,
12 packageId,
13 replaceTenantPackageBody
14);
15

updateTenantPackage Internal Link

Parámetros

Name Type Required Description
tenantId string Yes
id string Yes
updateTenantPackageBody UpdateTenantPackageBody Yes

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_8a4f1c9b';
3const packageId: string = 'pkg_premium_v2';
4const customConfig: CustomConfigParameters = { enableRichText: true, maxImagesPerComment: 5 };
5const updateTenantPackageBody: UpdateTenantPackageBody = {
6 name: 'Premium Moderation Package',
7 enabled: true,
8 description: 'Adds advanced spam rules, image moderation and priority support',
9 customConfigParameters: customConfig
10};
11const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, packageId, updateTenantPackageBody);
12

createTenantUser Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
createTenantUserBody CreateTenantUserBody

Respuesta

Devuelve: CreateTenantUser200Response

Ejemplo

Ejemplo de createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_9a8c7e4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "julia.smith@acme-corp.com",
5 displayName: "Julia Smith",
6 role: "moderator",
7 password: "Str0ngP@ssword!23",
8 sendInviteEmail: true, // parámetro opcional demostrado
9 locale: "en-US",
10 metadata: { department: "Customer Success" }
11};
12const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
13

deleteTenantUser Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
deleteComments string No
commentDeleteMode string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2a9c';
3const id: string = 'user_4e5f6a7b';
4const deleteComments: string = 'true';
5const commentDeleteMode: string = 'hard';
6
7const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8

getTenantUser Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetTenantUser200Response

Ejemplo

Ejemplo de getTenantUser
Copy Copy
1
2const tenantId: string = "tenant_9f7d4b2a-1c3e";
3const id: string = "user_6a12b3c4d5";
4const includeProfile: boolean | undefined = true; // ejemplo de parámetro opcional
5const response: GetTenantUser200Response = await getTenantUser(tenantId, id);
6console.log("Tenant user fetched", response);
7

getTenantUsers Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
skip number No

Respuesta

Devuelve: GetTenantUsers200Response

Ejemplo

Ejemplo de getTenantUsers
Copy Copy
1
2const tenantId: string = 'tenant_8f3b2c1a';
3const skip: number = 50;
4const firstPage: GetTenantUsers200Response = await getTenantUsers(tenantId);
5const nextPage: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
6

replaceTenantUser Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
replaceTenantUserBody ReplaceTenantUserBody
updateComments string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

replaceTenantUser Ejemplo
Copy Copy
1
2const tenantId: string = "tenant_5f8b9a";
3const id: string = "user_92bf21";
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 email: "jane.doe@acme-corp.com",
6 displayName: "Jane Doe",
7 externalId: "acme|12345",
8 roles: ["commenter", "moderator"],
9 isActive: true,
10 metadata: { team: "product", location: "NYC" }
11};
12const updateComments: string = "Update historical comments to reflect new display name";
13const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
14

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
redirectURL string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de sendLoginLink
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const id: string = 'user_9f3b2a';
4const redirectURL: string = 'https://app.example.com/onboard?source=login-email';
5const result: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
6

updateTenantUser Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string
updateTenantUserBody UpdateTenantUserBody
updateComments string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_84f3b2';
3const id: string = 'user_7a9d1c';
4const updateComments: string = 'Promoted to moderator and updated contact email';
5const updateTenantUserBody: UpdateTenantUserBody = {
6 email: 'jane.doe+mod@example.com',
7 displayName: 'Jane D.',
8 roles: ['moderator'],
9 isBanned: false,
10 metadata: { department: 'community' }
11};
12const result: FlagCommentPublic200Response = await updateTenantUser(tenantId, id, updateTenantUserBody, updateComments);
13

createTenant Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createTenantBody CreateTenantBody

Respuesta

Devuelve: CreateTenant200Response

Ejemplo

Ejemplo de createTenant
Copy Copy
1
2const tenantId: string = "acme-corporation";
3const billing: BillingInfo = { planId: "pro", billingContactEmail: "finance@acme-corp.com", currency: "USD" };
4const domainConfig: APIDomainConfiguration = { primaryDomain: "comments.acme-corp.com", allowedDomains: ["acme-corp.com", "www.acme-corp.com"], enforceHttps: true };
5const importedSites: ImportedSiteType[] = [{ siteId: "site-001", url: "https://blog.acme-corp.com", name: "Acme Blog" }]; // optional
6const createBody: CreateTenantBody = { tenantName: "Acme Corporation", adminEmail: "admin@acme-corp.com", billingInfo: billing, domainConfiguration: domainConfig, importedSites, enableModeration: true };
7const response: CreateTenant200Response = await createTenant(tenantId, createBody);
8

deleteTenant Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
sure string No

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de deleteTenant
Copy Copy
1
2const tenantId: string = "tenant_7b3f1a9e";
3const id: string = "flag_9c4d2b1a";
4const sure: string = "yes_confirm_delete";
5
6const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
7console.log(result);
8

getTenant Internal Link

Parámetros

Name Type Required Description
tenantId string
id string

Respuesta

Devuelve: GetTenant200Response

Ejemplo

Ejemplo de getTenant
Copy Copy
1
2const tenantId: string = "tenant_acme_corp";
3const id: string = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
4interface GetOptions { includeDeleted?: boolean; locale?: string; }
5const options: GetOptions = { locale: "en-US" };
6const result: GetTenant200Response = await getTenant(tenantId, id);
7

getTenants Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
meta string No
skip number No

Respuesta

Devuelve: GetTenants200Response

Ejemplo

Ejemplo de getTenants
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9f2d1b7c';
4 const meta: string = 'include=domains,billing,customConfig';
5 const skip: number = 20;
6 const response: GetTenants200Response = await getTenants(tenantId, meta, skip);
7 console.log(response);
8})();
9

updateTenant Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
updateTenantBody UpdateTenantBody

Respuesta

Devuelve: FlagCommentPublic200Response

Ejemplo

Ejemplo de updateTenant
Copy Copy
1
2const tenantId: string = "tenant_01H4ZQ7KABCD";
3const id: string = "site_9f8e7d6c";
4const apiDomainConfiguration: APIDomainConfiguration = {
5 primaryDomain: "comments.acme.com",
6 allowSubdomains: true
7};
8const billingInfo: BillingInfo = {
9 planName: "Business",
10 billingContactEmail: "billing@acme.com",
11 seats: 25
12};
13const updateTenantBody: UpdateTenantBody = {
14 displayName: "Acme Corporation Comments",
15 apiDomainConfiguration,
16 billingInfo, // parámetro opcional demostrado
17 enableModeration: true
18};
19const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
20

uploadImage Internal Link


Subir y redimensionar una imagen

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
file Blob
sizePreset SizePreset No
urlId string No

Respuesta

Devuelve: UploadImageResponse


getUserBadgeProgressById Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetUserBadgeProgressById200Response


getUserBadgeProgressByUserId Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
userId string

Respuesta

Devuelve: GetUserBadgeProgressById200Response


getUserBadgeProgressList Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
userId string No
limit number No
skip number No

Respuesta

Devuelve: GetUserBadgeProgressList200Response


createUserBadge Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
createUserBadgeParams CreateUserBadgeParams

Respuesta

Devuelve: CreateUserBadge200Response


deleteUserBadge Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
id string

Respuesta

Devuelve: UpdateUserBadge200Response


getUserBadge Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string

Respuesta

Devuelve: GetUserBadge200Response


getUserBadges Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
userId string No
badgeId string No
type number No
displayedOnComments boolean No
limit number No
skip number No

Respuesta

Devuelve: GetUserBadges200Response


updateUserBadge Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
updateUserBadgeParams UpdateUserBadgeParams

Respuesta

Devuelve: UpdateUserBadge200Response

getUserNotificationCount Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
sso string No

Respuesta

Devuelve: GetUserNotificationCount200Response


getUserNotifications Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
pageSize number No
afterId string No
includeContext boolean No
afterCreatedAt number No
unreadOnly boolean No
dmOnly boolean No
noDm boolean No
includeTranslations boolean No
sso string No

Respuesta

Devuelve: GetUserNotifications200Response


resetUserNotificationCount Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
sso string No

Respuesta

Devuelve: ResetUserNotifications200Response


resetUserNotifications Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
afterId string No
afterCreatedAt number No
unreadOnly boolean No
dmOnly boolean No
noDm boolean No
sso string No

Respuesta

Devuelve: ResetUserNotifications200Response


updateUserNotificationCommentSubscriptionStatus Internal Link


Habilitar o deshabilitar las notificaciones para un comentario específico.

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
notificationId string
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum
commentId string
sso string No

Respuesta

Devuelve: UpdateUserNotificationStatus200Response


updateUserNotificationPageSubscriptionStatus Internal Link


Habilitar o deshabilitar 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

Nombre Tipo Requerido Descripción
tenantId string
urlId string
url string
pageTitle string
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum
sso string No

Respuesta

Devuelve: UpdateUserNotificationStatus200Response


updateUserNotificationStatus Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
notificationId string
newStatus UpdateUserNotificationStatusNewStatusEnum
sso string No

Respuesta

Devuelve: UpdateUserNotificationStatus200Response


getUserPresenceStatuses Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
urlIdWS string
userIds string

Respuesta

Devuelve: GetUserPresenceStatuses200Response


searchUsers Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
urlId string
usernameStartsWith string
mentionGroupIds Array No
sso string No

Respuesta

Devuelve: SearchUsers200Response


getUser Internal Link

Parámetros

Name Type Required Description
tenantId string
id string

Respuesta

Devuelve: GetUser200Response

Ejemplo

Ejemplo de getUser
Copy Copy
1
2const tenantId: string = "acme-publishing-42";
3const userIdOptional: string | undefined = "user_9d7b4c"; // puede ser undefined en algunos flujos (opcional)
4const id: string = userIdOptional ?? "user_default_0001";
5const result: GetUser200Response = await getUser(tenantId, id);
6console.log(result);
7

createVote Internal Link

Parámetros

Name Type Required Description
tenantId string
commentId string
direction CreateVoteDirectionEnum
userId string No
anonUserId string No

Respuesta

Devuelve: VoteComment200Response

Ejemplo

Ejemplo de createVote
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-tenant-812';
4 const commentId: string = '5e8f8b7a-3d4b-4f1b-9a2e-1c9f2d6a7b8c';
5 const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.UP;
6 const anonUserId: string = 'anon-84b9c2d';
7 const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
8 console.log(voteResult);
9})();
10

deleteVote Internal Link


Parámetros

Nombre Tipo Requerido Descripción
tenantId string
id string
editKey string No

Respuesta

Devuelve: DeleteCommentVote200Response

Ejemplo

Ejemplo de deleteVote
Copy Copy
1
2const tenantId: string = 'tenant_7f3b21c9';
3const id: string = 'vote_4a2d9f1b';
4const editKey: string = 'edit_92b7c6a1';
5
6const resultWithoutEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id);
7const resultWithEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
8

getVotes Internal Link

Parámetros

Nombre Tipo Obligatorio Descripción
tenantId string
urlId string

Respuesta

Devuelve: GetVotes200Response

Ejemplo

Ejemplo de getVotes
Copy Copy
1
2const tenantId: string = 'tenant_9f8b3c_prod';
3const urlId: string = '/news/2026/typescript-ecosystem-update';
4const votes: GetVotes200Response = await getVotes(tenantId, urlId);
5// Si existiera un parámetro opcional, p. ej. includeHidden, podría usarse así:
6// const votesWithHidden: GetVotes200Response = await getVotes(tenantId, urlId, { includeHidden: true });
7

getVotesForUser Internal Link

Parámetros

Nombre Tipo Requerido Descripción
tenantId string
urlId string
userId string No
anonUserId string No

Respuesta

Devuelve: GetVotesForUser200Response

Ejemplo

Ejemplo de getVotesForUser
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const urlId: string = 'news/2026/01/12/product-launch';
4const userId: string = 'user_9c3f2b';
5const anonUserId: string = 'anon_d4e7a1';
6
7const votesForUser: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId);
8const votesForAnon: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, undefined, anonUserId);
9

¿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.