
Idioma 🇪🇸 Español
Recursos de la API
Agregaciones
Registros de auditoría
Comentarios
Plantillas de correo electrónico
Hashtags
Moderadores
Conteo de notificaciones
Notificaciones
Páginas
Eventos de webhook pendientes
Usuarios SSO
Suscripciones
Uso diario del tenant
Tenants
Paquetes de tenant
Usuarios del tenant
Usuarios
Votos
Configuraciones de dominio
Configuraciones de preguntas
Resultados de preguntas
Agregación de resultados de preguntas
Insignias de usuario
Progreso de insignia de usuario
La API de FastComments
FastComments proporciona una API para interactuar con muchos recursos. Crea integraciones con nuestra plataforma, ¡o incluso desarrolla tus propios clientes!
En esta documentación encontrarás todos los recursos compatibles por la API documentados con sus tipos de solicitud y respuesta.
Para clientes Enterprise, todo el acceso a la API queda registrado en el Registro de Auditoría.
SDKs Generados
FastComments ahora genera una Especificación de la API a partir de nuestro código (esto aún no está completo, pero incluye muchas APIs).
También ahora tenemos SDKs para lenguajes populares:
- fastcomments-cpp
- fastcomments-go
- fastcomments-java
- fastcomments-sdk-js
- fastcomments-nim
- fastcomments-php
- fastcomments-php-sso
- fastcomments-python
- fastcomments-ruby
- fastcomments-rust
- fastcomments-swift
Autenticación
La API se autentica pasando tu clave API ya sea como un encabezado X-API-KEY o como un parámetro de consulta API_KEY. También necesitarás tu tenantId para realizar llamadas a la API. Esto puede obtenerse desde la misma página que tu clave API.
Nota de seguridad
Estas rutas están pensadas para ser llamadas desde un servidor. NO las llames desde un navegador. Hacerlo expondrá tu clave API - esto proporcionará acceso total a tu cuenta a cualquiera que pueda ver el código fuente de una página!
Opción de autenticación uno - Encabezados
- Encabezado:
X-API-KEY - Encabezado:
X-TENANT-ID
Opción de autenticación dos - Parámetros de consulta
- Parámetro de consulta:
API_KEY - Parámetro de consulta:
tenantId
Recursos de la API 
Uso de Recursos
Debe tenerse en cuenta que obtener datos de la API se cuenta como uso en su cuenta.
Cada recurso listará cuál es ese uso en su propia sección.
Algunos recursos cuestan más de servir que otros. Cada endpoint tiene un costo fijo de créditos por llamada de API. Para algunos endpoints, el número de créditos varía según las opciones y tamaños de respuesta.
El uso de la API se puede verificar en la página de Análisis de Facturación y se actualiza cada pocos minutos.
¡Nota!
Sugerimos leer primero la documentación de Páginas, para ayudar a limitar la confusión al determinar qué valores pasar para urlId en la API de Comentarios.
Agregue sus datos 
Esta API Agrega documentos agrupándolos (si se proporciona groupBy) y aplicando múltiples operaciones. Se soportan diferentes operaciones (por ejemplo, sum, countDistinct, avg, etc.).
El costo es variable. Cada 500 objetos escaneados cuesta 1 crédito de API.
El uso máximo de memoria permitido por llamada de API por defecto es de 64MB, y por defecto solo puede tener una agregación ejecutándose a la vez. Si envía múltiples agregaciones simultáneamente, se pondrán en cola y se ejecutarán en el orden enviado. Las agregaciones pendientes esperarán un máximo de 60 segundos, después de eso la solicitud expirará. Las agregaciones individuales pueden ejecutarse hasta por 5 minutos.
Si tiene inquilinos administrados, puede agregar todos los recursos de inquilinos secundarios en una llamada pasando el parámetro de consulta parentTenantId.
Ejemplos
Ejemplo: Contar Únicos


Ejemplo: Contar Distintos

Respuesta:

Ejemplo: Sumar Valores de Múltiples Campos

Respuesta:

Ejemplo: Promediar Valores de Múltiples Campos

Respuesta:

Ejemplo: Valores Mín/Máx de Múltiples Campos

Respuesta:

Ejemplo: Contar Valores Únicos de Múltiples Campos

Respuesta:

Ejemplo: Creación de Consulta

Respuesta:

Ejemplo: Contar Comentarios Pendientes de Revisión

Respuesta:

Ejemplo: Desglose de Comentarios Aprobados, Revisados y Spam

Respuesta:

Estructuras


Los siguientes recursos pueden ser agregados:
- AffiliateEvent
- AnonymousVote
- BannedUser
- BatchJob
- BlockedUser
- Comment
- CommentDeleted
- CommentIdToSyncOutbound
- CommentScheduled
- CommentSyncLog
- CustomConfig
- CustomEmailTemplateRenderError
- EmailToSend
- EventLogEntry
- ImportedCommentScheduled
- ModerationGroup
- Moderator
- Page
- PageReact
- PendingVote
- QuestionResult
- SSOUser
- SentEmail
- SpamEvent
- Tenant
- TenantAuditLog
- TenantBadge
- TenantDailyUsage
- TenantInvoiceHistory
- TenantPackage
- User
- UserBadge
- UserBadgeProgress
- UserNotification
- UserSubscription
- UserUsage
- Vote
Estructura de registro de auditoría 
Un AuditLog es un objeto que representa un evento auditado para inquilinos que tienen acceso a esta función.
La estructura para el objeto AuditLog es la siguiente:

El registro de auditoría es inmutable. Tampoco se puede escribir manualmente. FastComments.com es el único que puede decidir cuándo escribir en el registro de auditoría. Sin embargo, puede leer de él a través de esta API.
Los eventos en el registro de auditoría expiran después de dos años.
GET /api/v1/audit-logs 
Esta API usa paginación, proporcionada por los parámetros skip, before y after. Los AuditLogs se devuelven en páginas de 1000, ordenados por when e id.
Obtener cada 1000 registros tiene un costo de crédito de 10.
Por defecto, recibirá una lista con los elementos más nuevos primero. De esta manera, puede consultar comenzando con skip=0, paginando hasta encontrar el último registro que ha consumido.
Alternativamente, puede ordenar del más antiguo al más nuevo, y paginar hasta que no haya más registros.
La ordenación se puede hacer configurando order a ASC o DESC. El valor predeterminado es ASC.
La consulta por fecha es posible a través de before y after como marcas de tiempo con milisegundos. before y after NO son inclusivos.



Estructura de comentario 
Un objeto Comment representa un comentario dejado por un usuario.
La relación entre comentarios padre e hijo se define a través de parentId.
La estructura para el objeto Comment es la siguiente:

Algunos de estos campos están marcados como READONLY - estos son devueltos por la API pero no pueden ser establecidos.
Estructura del Texto del Comentario
Los comentarios se escriben en un sabor de markdown de FastComments, que es simplemente markdown más etiquetas tradicionales estilo bbcode para imágenes, como [img]ruta[/img].
El texto se almacena en dos campos. El texto que el usuario ingresó se almacena sin modificar en el campo comment. Esto se renderiza y almacena en el campo commentHTML.
Las etiquetas HTML permitidas son b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, y br.
Se recomienda renderizar el HTML, ya que es un subconjunto muy pequeño de HTML, construir un renderizador es bastante sencillo. Hay múltiples bibliotecas para React Native y Flutter, por ejemplo, para ayudar con esto.
Puede elegir renderizar el valor no normalizado del campo comment. Un ejemplo de analizador está aquí..
El ejemplo de analizador también podría ajustarse para trabajar con HTML, y transformar las etiquetas HTML en elementos esperados para renderizar para su plataforma.
Etiquetado
Cuando los usuarios son etiquetados en un comentario, la información se almacena en una lista llamada mentions. Cada objeto en esa lista
tiene la siguiente estructura.
Run 
HashTags
Cuando se usan hashtags y se analizan con éxito, la información se almacena en una lista llamada hashTags. Cada objeto en esa lista
tiene la siguiente estructura. Los hashtags también pueden agregarse manualmente al array hashTags del comentario para consultas, si se establece retain.
Run 
GET /api/v1/comments 
Esta API se usa para obtener comentarios para mostrar a un usuario. Por ejemplo, filtra automáticamente los comentarios no aprobados o spam.
Paginación
La paginación se puede hacer de dos maneras, dependiendo de los requisitos de rendimiento y caso de uso:
- Más rápido: Paginación Precalculada:
- Así es como funciona FastComments cuando usa nuestros widgets y clientes preconstruidos.
- Hacer clic en "siguiente" simplemente aumenta el conteo de páginas.
- Puede pensar en esto como ser recuperado por un almacén de clave-valor.
- De esta manera, simplemente defina un parámetro
pagecomenzando en0y una dirección de ordenamiento comodirection. - Los tamaños de página se pueden personalizar a través de reglas de personalización.
- Más flexible: Paginación Flexible:
- De esta manera puede definir parámetros personalizados
limityskip. No pasepage. - También se soporta la
directionde ordenamiento. limites el total a devolver después de que se aplicaskip.- Ejemplo: establezca
skip = 200, limit = 100cuandotamaño de página = 100ypage = 2.
- Ejemplo: establezca
- Los comentarios hijos aún cuentan en la paginación. Puede evitar esto usando la opción
asTree.- Puede paginar hijos a través de
limitChildrenyskipChildren. - Puede limitar la profundidad de los hilos devueltos a través de
maxTreeDepth.
- Puede paginar hijos a través de
- De esta manera puede definir parámetros personalizados
Hilos
- Cuando usa
Paginación Precalculada, los comentarios se agrupan por página y los comentarios en hilos afectan la página general.- De esta manera, los hilos se pueden determinar en el cliente basándose en
parentId. - Por ejemplo, con una página con un comentario de nivel superior, y 29 respuestas, y configurando
page=0en la API - obtendrá solo el comentario de nivel superior y los 29 hijos. - Imagen de ejemplo aquí ilustrando múltiples páginas.
- De esta manera, los hilos se pueden determinar en el cliente basándose en
- Cuando usa
Paginación Flexible, puede definir un parámetroparentId.- Establezca esto a null para obtener solo comentarios de nivel superior.
- Luego para ver hilos, llame a la API nuevamente y pase
parentId. - Una solución común es hacer una llamada a la API para los comentarios de nivel superior y luego hacer llamadas paralelas a la API para obtener comentarios para los hijos de cada comentario.
- ¡NUEVO Desde Feb 2023! Obtener como árbol usando
&asTree=true.- Puede pensar en esto como
Paginación Flexible como Árbol. - Solo los comentarios de nivel superior cuentan en la paginación.
- Establezca
parentId=nullpara iniciar el árbol en la raíz (debe establecerparentId). - Establezca
skipylimitpara paginación. - Establezca
asTreeatrue. - El costo de créditos aumenta por
2x, ya que nuestro backend tiene que hacer mucho más trabajo en este escenario. - Establezca
maxTreeDepth,limitChildrenyskipChildrensegún lo deseado.
- Puede pensar en esto como
Árboles Explicados
Cuando usa asTree, puede ser difícil razonar sobre la paginación. Aquí hay un gráfico útil:
Obtener Comentarios en el Contexto de un Usuario
La API /comments se puede usar en dos contextos, para diferentes casos de uso:
- Para devolver comentarios ordenados y etiquetados con información para construir su propio cliente.
- En este caso, defina un parámetro de consulta
contextUserId.
- En este caso, defina un parámetro de consulta
- Para obtener comentarios desde su backend para integraciones personalizadas.
- La plataforma usará esto por defecto sin
contextUserId.
- La plataforma usará esto por defecto sin




Obtener Comentarios como Árbol
Es posible obtener los comentarios devueltos como un árbol, con la paginación contando solo los comentarios de nivel superior.

¿Quiere obtener solo los comentarios de nivel superior y los hijos inmediatos? Aquí hay una forma:

Sin embargo, en su UI podría necesitar saber si mostrar un botón de "mostrar respuestas" en
cada comentario. Cuando obtiene comentarios a través de un árbol hay una propiedad hasChildren etiquetada
en los comentarios cuando aplica.
Obtener Comentarios como Árbol, Buscando por Hash Tag
Es posible buscar por hashtag usando la API, a través de todo su inquilino (no limitado a una página, o urlId).
En este ejemplo, omitimos urlId, y buscamos por múltiples hashtags. La API solo devolverá comentarios que tengan todos los hashtags solicitados.

Todos los Parámetros de Solicitud

La Respuesta

Consejos Útiles
URL ID
Probablemente quiera usar la API Comment con el parámetro urlId. Puede llamar a la API Pages primero, para ver cómo lucen los valores urlId disponibles para usted.
Acciones Anónimas
Para comentarios anónimos probablemente quiera pasar anonUserId cuando obtiene comentarios, y cuando realiza marcado y bloqueo.
(!) Esto es requerido para muchas tiendas de aplicaciones ya que los usuarios deben poder marcar contenido creado por usuarios que pueden ver, incluso si no han iniciado sesión. No hacerlo puede causar que su aplicación sea eliminada de dicha tienda.
Comentarios No Devueltos
Verifique que sus comentarios estén aprobados, y no sean spam.
GET /api/v1/comments/:id 
Esta API proporciona la capacidad de obtener un único comentario por id.



POST /api/v1/comments 
Este endpoint de API proporciona la capacidad de crear comentarios.
Los casos de uso comunes son interfaces personalizadas, integraciones o importaciones.
Notas:
- Esta API puede actualizar el widget de comentarios "en vivo" si se desea (esto aumenta
creditsCostde1a2). - Esta API creará automáticamente objetos de usuario en nuestro sistema si se proporciona email.
- Intentar guardar dos comentarios con diferentes emails, pero el mismo nombre de usuario, resultará en un error para el segundo comentario.
- Si está especificando
parentId, y un comentario hijo tienenotificationSentForParentcomo false, enviaremos notificaciones para el comentario padre. Esto se hace cada hora (agrupamos las notificaciones para disminuir el número de emails enviados). - Si desea enviar emails de bienvenida al crear usuarios, o emails de verificación de comentarios, establezca
sendEmailsatrueen los parámetros de consulta. - Los comentarios creados a través de esta API aparecerán en las páginas de Análisis y Moderación de la aplicación de administración.
- Las "malas palabras" aún se enmascaran en los nombres de los comentaristas y el texto del comentario si la configuración está activada.
- Los comentarios creados a través de esta API aún pueden ser verificados para spam si se desea.
- La configuración como longitud máxima del comentario, si se configura a través de la página de administración de Reglas de Personalización, se aplicará aquí.
Los datos mínimos requeridos para enviar que se mostrarán en el widget de comentarios, son los siguientes:

Una solicitud más realista podría verse así:



PATCH /api/v1/comments/:id 
Este endpoint de API proporciona la capacidad de actualizar un único comentario.
Notas:
- Esta API puede actualizar el widget de comentarios "en vivo" si se desea (esto aumenta el
creditsCostbase de1a2).- Esto puede hacer que la migración de comentarios entre páginas sea "en vivo" (cambiando
urlId). - Las migraciones cuestan
2créditos adicionales ya que las páginas son precalculadas y esto es intensivo en CPU.
- Esto puede hacer que la migración de comentarios entre páginas sea "en vivo" (cambiando
- A diferencia de la API de creación, esta API NO creará automáticamente objetos de usuario en nuestro sistema si se proporciona email.
- Los comentarios actualizados a través de esta API aún pueden ser verificados para spam si se desea.
- La configuración como longitud máxima del comentario, si se configura a través de la página de administración de Reglas de Personalización, se aplicará aquí.
- Para permitir a los usuarios actualizar el texto de su comentario, puede simplemente especificar
commenten el cuerpo de la solicitud. Generaremos elcommentHTMLresultante.- Si define tanto
commentcomocommentHTMLno generaremos automáticamente el HTML. - Si el usuario agrega menciones o hashtags en su nuevo texto, se procesará como la API
POST.
- Si define tanto
- Cuando actualice
commenterEmailen un comentario, es mejor también especificaruserId. De lo contrario, debe asegurarse de que el usuario con este email pertenezca a su inquilino, o la solicitud fallará.



DELETE /api/v1/comments/:id 
Este endpoint de API proporciona la capacidad de eliminar un comentario.
Notas:
- Esta API puede actualizar el widget de comentarios "en vivo" si se desea (esto aumenta
creditsCostde1a2). - Esta API eliminará todos los comentarios secundarios.



POST /api/v1/comments/:id/flag 
Este endpoint de API proporciona la capacidad de marcar un comentario para un usuario específico.
Notas:
- Esta llamada siempre debe hacerse en el contexto de un usuario. El usuario puede ser un Usuario de FastComments.com, Usuario SSO o Usuario de Inquilino.
- Si se establece un umbral de marcar para ocultar, el comentario se ocultará automáticamente en vivo después de haber sido marcado el número definido de veces.
- Después de ser automáticamente desaprobado (oculto) - el comentario solo puede ser re-aprobado por un administrador o moderador. Desmarcar no re-aprobará el comentario.

Para marcar anónimamente, debemos especificar un anonUserId. Este puede ser un ID que representa la sesión anónima, o un UUID aleatorio.
Esto nos permite soportar marcar y desmarcar comentarios incluso si un usuario no ha iniciado sesión. De esta manera, el comentario puede ser marcado como
marcado cuando los comentarios se obtienen con el mismo anonUserId.



POST /api/v1/comments/:id/un-flag 
Este endpoint de API proporciona la capacidad de desmarcar un comentario para un usuario específico.
Notas:
- Esta llamada siempre debe hacerse en el contexto de un usuario. El usuario puede ser un Usuario de FastComments.com, Usuario SSO o Usuario de Inquilino.
- Después de que un comentario es automáticamente desaprobado (oculto) - el comentario solo puede ser re-aprobado por un administrador o moderador. Desmarcar no re-aprobará el comentario.

Para desmarcar anónimamente, debemos especificar un anonUserId. Este puede ser un ID que representa la sesión anónima, o un UUID aleatorio.



POST /api/v1/comments/:id/block 
Este endpoint de API proporciona la capacidad de bloquear a un usuario que escribió un comentario dado. Soporta el bloqueo de comentarios escritos por Usuarios de FastComments.com, Usuarios SSO y Usuarios de Inquilino.
Soporta un parámetro de cuerpo commentIdsToCheck para verificar si algún otro comentario potencialmente visible en el cliente debe ser bloqueado/desbloqueado después de realizar esta acción.
Notas:
- Esta llamada siempre debe hacerse en el contexto de un usuario. El usuario puede ser un Usuario de FastComments.com, Usuario SSO o Usuario de Inquilino.
- El
userIden la solicitud es el usuario que está haciendo el bloqueo. Por ejemplo:Usuario Aquiere Bloquear aUsuario B. PaseuserId=Usuario Ay el id del comentario que escribióUsuario B. - Los comentarios completamente anónimos (sin id de usuario, sin email) no pueden ser bloqueados y se devolverá un error.

Para bloqueo anónimo, debemos especificar un anonUserId. Este puede ser un ID que representa la sesión anónima, o un UUID aleatorio.
Esto nos permite soportar el bloqueo de comentarios incluso si un usuario no ha iniciado sesión obteniendo los comentarios con el mismo anonUserId.



POST /api/v1/comments/:id/un-block 
Este endpoint de API proporciona la capacidad de desbloquear a un usuario que escribió un comentario dado. Soporta el desbloqueo de comentarios escritos por Usuarios de FastComments.com, Usuarios SSO y Usuarios de Inquilino.
Soporta un parámetro de cuerpo commentIdsToCheck para verificar si algún otro comentario potencialmente visible en el cliente debe ser bloqueado/desbloqueado después de realizar esta acción.
Notas:
- Esta llamada siempre debe hacerse en el contexto de un usuario. El usuario puede ser un Usuario de FastComments.com, Usuario SSO o Usuario de Inquilino.
- El
userIden la solicitud es el usuario que está haciendo el desbloqueo. Por ejemplo:Usuario Aquiere Desbloquear aUsuario B. PaseuserId=Usuario Ay el id del comentario que escribióUsuario B. - Los comentarios completamente anónimos (sin id de usuario, sin email) no pueden ser bloqueados y se devolverá un error.




Estructura de plantilla de correo electrónico 
Un objeto EmailTemplate representa la configuración para una plantilla de email personalizada, para un inquilino.
El sistema seleccionará la plantilla de email a usar mediante:
- Su identificador de tipo, lo llamamos
emailTemplateId. Estos son constantes. - El
domain. Primero intentaremos encontrar una plantilla para el dominio al que está vinculado el objeto relacionado (como unComment), y si no se encuentra una coincidencia entonces intentaremos encontrar una plantilla donde domain sea null o*.
La estructura del objeto EmailTemplate es la siguiente:

Notas
- Puede obtener los valores válidos de
emailTemplateIddesde el endpoint/definitions. - El endpoint
/definitionstambién incluye las traducciones predeterminadas y datos de prueba. - Las plantillas fallarán al guardar con estructura o datos de prueba inválidos.
GET /api/v1/email-templates/:id 
Los EmailTemplates individuales pueden obtenerse por su id correspondiente (NO emailTemplateId).



GET /api/v1/email-templates 
Esta API usa paginación, proporcionada por el parámetro de consulta page. Los EmailTemplates se devuelven en páginas de 100, ordenados por createdAt y luego id.



PATCH /api/v1/email-templates/:id 
Este endpoint de API proporciona la capacidad de actualizar una plantilla de email especificando solo el id y los atributos a actualizar.
Tenga en cuenta que todas las mismas validaciones para crear una plantilla también aplican, por ejemplo:
- La plantilla debe renderizarse. Esto se verifica con cada actualización.
- No puede tener plantillas duplicadas para el mismo dominio (de lo contrario una sería ignorada silenciosamente).



POST /api/v1/email-templates 
Este endpoint de API proporciona la capacidad de crear plantillas de email.
Notas:
- No puede tener múltiples plantillas con el mismo
emailTemplateIdcon el mismo dominio. - Pero puede tener una plantilla comodín (
domain=*y una plantilla específica de dominio para el mismoemailTemplateId). - Especificar
domainsolo es relevante si tiene diferentes dominios, o quiere usar plantillas específicas para pruebas (domainestablecido alocalhostetc). - Si especifica
domaindebe coincidir con unDomainConfig. En caso de error se proporciona una lista de dominios válidos. - La sintaxis de plantilla es EJS y se renderiza con un timeout de 500ms. P99 para renderizado es <5ms, así que si llega a 500ms algo está mal.
- Su plantilla debe renderizarse con su
testDatadado para guardar. Los errores de renderizado se agregan y reportan en el dashboard (pronto disponible vía API).
Los datos mínimos requeridos para agregar una plantilla son los siguientes:

Puede querer tener plantillas por sitio, en cuyo caso define domain:



POST /api/v1/email-templates/render 
Este endpoint de API proporciona la capacidad de previsualizar plantillas de email.



DELETE /api/v1/email-templates/:id 
Esta ruta proporciona la eliminación de un único EmailTemplate por id.



Estructura de hashtag 
Un objeto HashTag representa una etiqueta que puede ser dejada por un usuario. Los HashTags pueden usarse para vincular a una pieza externa de contenido o para
vincular comentarios relacionados juntos.
La estructura del objeto HashTag es la siguiente:

Notas:
- En algunos endpoints de API verá que el hashtag se usa en la URL. Recuerde usar valores codificados en URI. Por ejemplo,
#debe representarse como%23. - Algunos de estos campos están marcados como
READONLY- estos son devueltos por la API pero no pueden ser establecidos.
GET /api/v1/hash-tags 
Esta API usa paginación, proporcionada por el parámetro de consulta page. Los HashTags se devuelven en páginas de 100, ordenados por tag.



PATCH /api/v1/hash-tags/:tag 
Esta ruta proporciona la capacidad de actualizar un único HashTag.



POST /api/v1/hash-tags 
Esta ruta proporciona la capacidad de agregar un único HashTag.



POST /api/v1/hash-tags/bulk 
Esta ruta proporciona la capacidad de agregar hasta 100 objetos HashTag a la vez.



DELETE /api/v1/hash-tags/:tag 
Esta ruta proporciona la eliminación de un HashTag usuario por la etiqueta proporcionada.
Tenga en cuenta que a menos que la creación automática de HashTag esté deshabilitada, los hashtags pueden ser recreados por un usuario que proporcione el hashtag al comentar.



Estructura de moderador 
Un objeto Moderator representa la configuración para un moderador.
Hay tres tipos de moderadores:
- Usuarios administradores que tienen la bandera
isCommentModeratorAdmin. - Usuarios SSO con la bandera
isCommentModeratorAdmin. - Comentaristas regulares, o usuarios de FastComments.com, que son invitados como Moderadores.
La estructura Moderator se usa para representar el Estado de Moderación del caso de uso 3.
Si quiere invitar a un usuario a ser moderador, vía la API, use la API de Moderator creando un Moderator e invitándolo.
Si el usuario no tiene una cuenta de FastComments.com, el email de invitación les ayudará a configurarse. Si ya tienen una cuenta, se les dará acceso de moderación a su inquilino y el userId del objeto Moderator se actualizará para apuntar a su usuario. No tendrá acceso API a su usuario, ya que en este caso les pertenece a ellos mismos y es gestionado por FastComments.com.
Si requiere gestión completa de la cuenta del usuario, recomendamos usar SSO, o agregarlos como un Usuario de Inquilino y
luego agregar un objeto Moderator para rastrear sus estadísticas.
La estructura Moderator puede usarse como un mecanismo de seguimiento de estadísticas para los casos de uso 1 y 2. Después de crear el usuario, agregue un objeto Moderator con su userId definido y sus estadísticas serán rastreadas en la Página de Moderadores de Comentarios.
La estructura del objeto Moderator es la siguiente:

GET /api/v1/moderators/:id 
Esta ruta devuelve un único moderador por su id.



GET /api/v1/moderators 
Esta API usa paginación, proporcionada por el parámetro de consulta skip. Los Moderators se devuelven en páginas de 100, ordenados por createdAt e id.
El costo se basa en el número de moderadores devueltos, costando 1 crédito por cada 10 moderadores devueltos.



PATCH /api/v1/moderators/:id 
Este endpoint de API proporciona la capacidad de actualizar un Moderator por id.
Actualizar un Moderator tiene las siguientes restricciones:
- Los siguientes valores no pueden proporcionarse al actualizar un
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Cuando se especifica un
userId, ese usuario debe existir. - Cuando se especifica un
userId, deben pertenecer al mismotenantIdespecificado en los parámetros de consulta. - Dos moderadores en el mismo inquilino no pueden agregarse con el mismo
email. - No puede cambiar el
tenantIdasociado con unModerator.



POST /api/v1/moderators 
Esta ruta proporciona la capacidad de agregar un único Moderator.
Crear un Moderator tiene las siguientes restricciones:
- Siempre debe proporcionarse un
nameyemail. UnuserIdes opcional. - Los siguientes valores no pueden proporcionarse al crear un
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Cuando se especifica un
userId, ese usuario debe existir. - Cuando se especifica un
userId, deben pertenecer al mismotenantIdespecificado en los parámetros de consulta. - Dos moderadores en el mismo inquilino no pueden agregarse con el mismo
email.
Podemos crear un Moderator para un usuario del cual solo conocemos el email:

O podemos crear un Moderator para un usuario que pertenece a nuestro inquilino, para rastrear sus estadísticas de moderación:



POST /api/v1/moderators/:id/send-invite 
Esta ruta proporciona la capacidad de invitar a un único Moderator.
Las siguientes restricciones existen para enviar un email de invitación a un Moderator:
- El
Moderatorya debe existir. - El
fromNameno puede tener más de100 caracteres.
Notas:
- Si un usuario con el email proporcionado ya existe, será invitado a moderar los comentarios de su inquilino.
- Si un usuario con el email proporcionado no existe el enlace de invitación los guiará a través de la creación de su cuenta.
- La invitación expirará después de
30 días.
Podemos crear un Moderator para un usuario del cual solo conocemos el email:

Esto enviará un email como Bob de TenantName te está invitando a ser moderador...


DELETE /api/v1/moderators/:id 
Esta ruta proporciona la eliminación de un Moderator por id.



Estructura de conteo de notificaciones 
Un objeto NotificationCount representa el conteo de notificaciones no leídas y metadatos para un usuario.
Si no hay notificaciones no leídas, no habrá un NotificationCount para el usuario.
Los objetos NotificationCount se crean automáticamente y no pueden crearse vía la API. También expiran después de un año.
Puede limpiar el conteo de notificaciones no leídas de un usuario eliminando su NotificationCount.
La estructura del objeto NotificationCount es la siguiente:

GET /api/v1/notification-count/:user_id 
Esta ruta devuelve un único NotificationCount por id de usuario. Con SSO, el id de usuario está en el formato <tenant id>:<user id>.
Si no hay notificaciones no leídas, no habrá un NotificationCount - así que obtendrá un 404.
Esto es diferente de notifications/count en que es mucho más rápido, pero no permite filtrado.



DELETE /api/v1/notification-count/:user_id 
Esta ruta elimina un único NotificationCount por id de usuario. Con SSO, el id de usuario está en el formato <tenant id>:<user id>.
Esto limpiará el conteo de notificaciones no leídas del usuario (la campana roja en el widget de comentarios se desvanecerá y el conteo desaparecerá).



Estructura de notificación 
Un objeto Notification representa una notificación para un usuario.
Los objetos Notification se crean automáticamente y no pueden crearse vía la API. También expiran después de un año.
Las notificaciones no pueden eliminarse. Sin embargo, pueden actualizarse para establecer viewed a false, y puede consultar por viewed.
Un usuario también puede optar por no recibir notificaciones para un comentario específico estableciendo optedOut en la notificación a true. Puede optar por participar nuevamente estableciéndolo a false.
Hay diferentes tipos de notificaciones - consulte relatedObjectType y type.
Las formas en que se crean las notificaciones es bastante flexible y puede ser activada por muchos escenarios (ver NotificationType).
A día de hoy, la existencia de una Notification no implica realmente que un email se envíe o deba enviarse. Más bien, las notificaciones
se usan para el feed de notificaciones e integraciones relacionadas.
La estructura del objeto Notification es la siguiente:

GET /api/v1/notifications 
Esta ruta devuelve hasta 30 objetos Notification ordenados por createdAt, los más nuevos primero.
Puede filtrar por userId. Con SSO, el id de usuario está en el formato <tenant id>:<user id>.



GET /api/v1/notifications/count 
Esta ruta devuelve un objeto que contiene el número de notificaciones bajo un parámetro count.
Es más lento que /notification-count/ y el doble del costo de créditos, pero permite filtrar en más dimensiones.
Puede filtrar por los mismos parámetros que el endpoint /notifications como userId. Con SSO, el id de usuario está en el formato <tenant id>:<user id>.




PATCH /api/v1/notifications/:id 
Este endpoint de API proporciona la capacidad de actualizar una Notification por id.
Actualizar una Notification tiene las siguientes restricciones:
- Solo puede actualizar los siguientes campos:
viewedoptedOut



Estructura de página 
Un objeto Page representa la página a la que pueden pertenecer muchos comentarios. Esta relación se define por
urlId.
Una Page almacena información como el título de la página, el conteo de comentarios, y urlId.
La estructura del objeto Page es la siguiente:

GET /api/v1/pages 
Actualmente solo puede obtener todas las páginas (o una sola página vía /by-url-id) asociadas con su cuenta. Si desea búsqueda más detallada, contáctenos.



Consejo Útil
La API de Comment requiere un urlId. Puede llamar primero a la API de Pages, para ver cómo lucen los valores de urlId disponibles para usted.
GET /api/v1/pages/by-url-id 
Las páginas individuales pueden obtenerse por su correspondiente urlId. Esto puede ser útil para buscar títulos de páginas o conteos de comentarios.



Consejo Útil
Recuerde codificar en URI valores como el urlId.
PATCH /api/v1/pages/:id 
Esta ruta proporciona la capacidad de actualizar una única Page. Los comentarios correspondientes serán actualizados.



Nota
Algunos parámetros en el objeto Page se actualizan automáticamente. Estos son los atributos de conteos y título. Los conteos no pueden actualizarse
vía la API ya que son valores calculados. El title de la página puede establecerse vía la API, pero sería sobrescrito si el widget de comentarios se usa en
una página con el mismo urlId y un título de página diferente.
POST /api/v1/pages 
Este endpoint de API proporciona la capacidad de crear páginas.
Un caso de uso común es el control de acceso.
Notas:
- Si ha comentado en un hilo de comentarios, o llamado a la API para crear un
Comment, ¡ya ha creado un objetoPage! Puede intentar obtenerlo vía la ruta dePage/by-url-id, pasando el mismourlIdpasado al widget de comentarios. - La estructura de
Pagecontiene algunos valores calculados. Actualmente, estos soncommentCountyrootCommentCount. Se llenan automáticamente y no pueden ser establecidos por la API. Intentar hacerlo causará que la API devuelva un error.



DELETE /api/v1/pages/:id 
Esta ruta proporciona la eliminación de una única página por id.
Tenga en cuenta que interactuar con el widget de comentarios para una página con el mismo urlId simplemente recreará la Page sin problemas.



Estructura de evento webhook pendiente 
Un objeto PendingWebhookEvent representa un evento de webhook en cola que está pendiente.
Los objetos PendingWebhookEvent se crean automáticamente y no pueden crearse manualmente vía la API. También expiran después de un año.
Pueden eliminarse lo que remueve la tarea de la cola.
Hay diferentes tipos de eventos - consulte eventType (OutboundSyncEventType) y type (OutboundSyncType).
Un caso de uso común para esta API es implementar monitoreo personalizado. Puede querer llamar al endpoint /count periódicamente
para sondear el conteo pendiente para filtros dados.
La estructura del objeto PendingWebhookEvent es la siguiente:

GET /api/v1/pending-webhook-events 
Esta ruta devuelve una lista de eventos de webhook pendientes bajo un parámetro pendingWebhookEvents.
Esta API usa paginación, proporcionada por el parámetro skip. Los PendingWebhookEvents se devuelven en páginas de 100, ordenados por createdAt los más nuevos primero.



GET /api/v1/pending-webhook-events/count 
Esta ruta devuelve un objeto que contiene el número de eventos de webhook pendientes bajo un parámetro count.
Puede filtrar por los mismos parámetros que el endpoint /pending-webhook-events



DELETE /api/v1/pending-webhook-events/:id 
Esta ruta permite la eliminación de un único PendingWebhookEvent.
Si necesita una eliminación masiva, llame a la API GET con paginación y luego llame a esta API secuencialmente.



Estructura de usuario SSO 
FastComments proporciona una solución SSO fácil de usar. Actualizar la información de un usuario con la integración basada en HMAC es tan simple como hacer que el usuario cargue la página con un payload actualizado.
Sin embargo, puede ser deseable gestionar un usuario fuera de ese flujo, para mejorar la consistencia de su aplicación.
La API de Usuario SSO proporciona una forma de hacer CRUD en objetos que llamamos SSOUsers. Estos objetos son diferentes de los Usuarios regulares y se mantienen separados por seguridad de tipos.
La estructura del objeto SSOUser es la siguiente:

Facturación para Usuarios SSO
Los usuarios SSO se facturan de manera diferente según sus banderas de permisos:
- Usuarios SSO Regulares: Los usuarios sin permisos de administrador o moderador se facturan como usuarios SSO regulares
- Administradores SSO: Los usuarios con banderas
isAccountOwneroisAdminAdminse facturan por separado como Administradores SSO (misma tarifa que los administradores de inquilino regulares) - Moderadores SSO: Los usuarios con bandera
isCommentModeratorAdminse facturan por separado como Moderadores SSO (misma tarifa que los moderadores regulares)
Importante: Para prevenir doble facturación, el sistema automáticamente deduplica usuarios SSO contra usuarios de inquilino regulares y moderadores por dirección de email. Si un usuario SSO tiene el mismo email que un usuario de inquilino regular o moderador, no serán facturados dos veces.
Control de Acceso
Los usuarios pueden dividirse en grupos. Esto es para lo que es el campo groupIds, y es opcional.
@Menciones
Por defecto @mentions usará username para buscar otros usuarios sso cuando se escribe el carácter @. Si se usa displayName, entonces los resultados que coincidan con
username serán ignorados cuando haya una coincidencia para displayName, y los resultados de búsqueda de @mention usarán displayName.
Suscripciones
Con FastComments, los usuarios pueden suscribirse a una página haciendo clic en el icono de campana en el widget de comentarios y haciendo clic en Suscribirse.
Con un usuario regular, les enviamos emails de notificación basados en sus configuraciones de notificación.
Con Usuarios SSO, dividimos esto para compatibilidad hacia atrás. Los usuarios solo recibirán estos emails de notificación de suscripción adicionales
si establece optedInSubscriptionNotifications a true.
Insignias
Puede asignar insignias a usuarios SSO usando la propiedad badgeConfig. Las insignias son indicadores visuales que aparecen junto al nombre de un usuario en los comentarios.
badgeIds- Un array de IDs de insignias para asignar al usuario. Estos deben ser IDs de insignias válidos creados en su cuenta de FastComments. Limitado a 30 insignias.override- Si es verdadero, todas las insignias existentes mostradas en comentarios serán reemplazadas con las proporcionadas. Si es falso u omitido, las insignias proporcionadas se agregarán a cualquier insignia existente.update- Si es verdadero, las propiedades de visualización de insignias se actualizarán desde la configuración del inquilino cada vez que el usuario inicie sesión.
GET /api/v1/sso-users 
Esta ruta devuelve Usuarios SSO en páginas de 100. La paginación se proporciona por el parámetro skip. Los usuarios están ordenados por su signUpDate e id.



GET /api/v1/sso-users/by-id/:id 
Esta ruta devuelve un único usuario SSO por su id.



GET /api/v1/sso-users/by-email/:email 
Esta ruta devuelve un único usuario SSO por su email.



PATCH /api/v1/sso-users/:id 
Esta ruta proporciona la capacidad de actualizar un único usuario SSO.



POST /api/v1/sso-users 
Esta ruta proporciona la creación de un único usuario SSO.
Intentar crear dos usuarios con el mismo ID resultará en un error.

En este ejemplo especificamos groupIds para control de acceso, pero esto es opcional.


Nota de Integración
Los datos pasados por la API pueden ser sobrescritos simplemente pasando un payload de Usuario SSO HMAC diferente. Por ejemplo, si establece un nombre de usuario vía la API, pero luego pasa uno diferente vía el flujo SSO al cargar la página, actualizaremos automáticamente su nombre de usuario.
No actualizaremos parámetros de usuario en este flujo a menos que los especifique explícitamente o los establezca a null (no undefined).
PUT /api/v1/sso-users/:id 
Esta ruta proporciona la capacidad de actualizar un único usuario SSO.

En este ejemplo especificamos groupIds para control de acceso, pero esto es opcional.


DELETE /api/v1/sso-users/:id 
Esta ruta proporciona la eliminación de un único usuario SSO por su id.
Tenga en cuenta que cargar el widget de comentarios nuevamente con un payload para este usuario simplemente recreará el usuario sin problemas.
Eliminar los comentarios del usuario es posible vía el parámetro de consulta deleteComments. Tenga en cuenta que si esto es verdadero:
- Todos los comentarios del usuario serán eliminados en vivo.
- Todos los comentarios hijos (ahora huérfanos) serán eliminados o anonimizados basándose en la configuración de página asociada de cada comentario. Por ejemplo si el modo de eliminación de hilo es "anonimizar", entonces las respuestas permanecerán, y los comentarios del usuario serán anonimizados. Esto solo aplica cuando
commentDeleteModeesRemove(el valor predeterminado). - El
creditsCostse convierte en2.
Comentarios Anonimizados
Puede retener los comentarios del usuario pero simplemente anonimizarlos estableciendo commentDeleteMode=1.
Si los comentarios del usuario son anonimizados entonces los siguientes valores se establecen a null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted e isDeletedUser se establecen a true.
Al renderizar, el widget de comentarios usará DELETED_USER_PLACEHOLDER (predeterminado: "[deleted]") para el nombre del usuario y DELETED_CONTENT_PLACEHOLDER para el comentario. Estos pueden personalizarse vía la UI de Personalización del Widget.
Ejemplos



Estructura de suscripción 
Un objeto Subscription representa una suscripción para un usuario.
Los objetos Subscription se crean cuando un usuario hace clic en la campana de notificación en el widget de comentarios y hace clic en "Suscribirse a esta página".
Las suscripciones también pueden crearse vía la API.
Tener un objeto Subscription causa que se generen objetos Notification, y se envíen emails, cuando se dejan nuevos comentarios en la raíz de la página asociada
para la cual es la Subscription. El envío de emails depende del tipo de usuario. Para usuarios regulares esto depende de optedInNotifications. Para Usuarios SSO esto depende de optedInSubscriptionNotifications. Tenga en cuenta que algunas aplicaciones pueden no tener el concepto de una página accesible por web, en cuyo caso simplemente establezca urlId al
id del elemento al que se está suscribiendo (mismo valor para urlId que pasaría al widget de comentarios).
La estructura del objeto Subscription es la siguiente:

GET /api/v1/subscriptions/:id 
Esta ruta devuelve hasta 30 objetos Subscription ordenados por createdAt, los más nuevos primero.
Puede filtrar por userId. Con SSO, el id de usuario está en el formato <tenant id>:<user id>.



POST /api/v1/subscriptions 
Este endpoint de API proporciona la capacidad de crear una Subscription. Tenga en cuenta que un usuario solo puede tener una suscripción por página, ya que más es redundante, e intentar
crear más de una suscripción para el mismo usuario para la misma página resultará en un error.
Crear una suscripción resultará en objetos Notification siendo creados cuando se deje un nuevo comentario en la raíz del urlId suscrito (cuando parentId del comentario es null).



DELETE /api/v1/subscriptions/:id 
Esta ruta elimina un único objeto Subscription por id.



Estructura de uso diario del tenant 
Un objeto TenantDailyUsage representa el uso para un inquilino en un día dado. Si no hubo actividad para un inquilino dado en un día
dado, ese día no tendrá un objeto TenantDailyUsage.
El objeto TenantDailyUsage no es en tiempo real y puede estar minutos detrás del uso real.
La estructura del objeto TenantDailyUsage es la siguiente:

GET /api/v1/tenant-daily-usage 
Esta ruta permite buscar el uso de un inquilino por año, mes y día. Pueden devolverse hasta 365 objetos, y el costo es 1 crédito de api por cada 10 objetos.
Los objetos de respuesta están ordenados por la fecha en que fueron creados (los más antiguos primero).



Estructura de tenant 
El Tenant define un cliente de FastComments.com. Pueden ser creados a través de la API por inquilinos con acceso de marca blanca. Los inquilinos de marca blanca
no pueden crear otros inquilinos de marca blanca (solo se permite un nivel de anidación).
La estructura del objeto Tenant es la siguiente:

GET /api/v1/tenants/:id 
Esta ruta devuelve un único Tenant por id.



GET /api/v1/tenants 
Esta API devuelve inquilinos que son gestionados por su inquilino.
La paginación se proporciona mediante el parámetro de consulta skip. Los inquilinos se devuelven en páginas de 100, ordenados por signUpDate e id.
El costo se basa en el número de inquilinos devueltos, costando 1 crédito por cada 10 inquilinos devueltos.

Puede definir parámetros meta en los objetos Tenant y consultar inquilinos coincidentes. Por ejemplo, para la clave someKey y el valor meta some-value, podemos
construir un objeto JSON con este par clave/valor y luego codificarlo como URI como parámetro de consulta para filtrar:



POST /api/v1/tenants 
Esta ruta proporciona la capacidad de agregar un único Tenant.
Crear un Tenant tiene las siguientes restricciones:
- Se requiere un
name. - Se requiere
domainConfiguration. - Los siguientes valores no pueden ser proporcionados al crear un
Tenant:hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmount
- El
signUpDateno puede estar en el futuro. - El
nameno puede tener más de200 caracteres. - El
emailno puede tener más de300 caracteres. - El
emaildebe ser único en todos los inquilinos de FastComments.com. - No puede crear inquilinos si el inquilino padre no tiene un
TenantPackageválido definido.- Si su inquilino fue creado a través de FastComments.com, esto no debería ser un problema.
- No puede crear más inquilinos de los definidos en
maxWhiteLabeledTenantsen su paquete. - Debe especificar el parámetro de consulta
tenantIdque es el id de suinquilino padrecon marca blanca habilitada.
Podemos crear un Tenant con solo unos pocos parámetros:



PATCH /api/v1/tenants/:id 
Este endpoint de API proporciona la capacidad de actualizar un Tenant por id.
Actualizar un Tenant tiene las siguientes restricciones:
- Los siguientes valores no pueden ser actualizados:
hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmountmanagedByTenantId
- El
signUpDateno puede estar en el futuro. - El
nameno puede tener más de200 caracteres. - El
emailno puede tener más de300 caracteres. - El
emaildebe ser único en todos los inquilinos de FastComments.com. - Al establecer
billingInfoValidentrue, se debe proporcionarbillingInfoen la misma solicitud. - No puede actualizar el
packageIdasociado con su propio inquilino. - No puede actualizar la
paymentFrequencyasociada con su propio inquilino.



DELETE /api/v1/tenants/:id 
Esta ruta proporciona la eliminación de un Tenant y todos los datos asociados (usuarios, comentarios, etc) por id.
Las siguientes restricciones existen alrededor de eliminar inquilinos:
- El inquilino debe ser el suyo propio, o un inquilino de marca blanca que usted gestiona.
- El parámetro de consulta
suredebe establecerse atrue.



Estructura de paquete de tenant 
El TenantPackage define la información del paquete disponible para un Tenant. Un inquilino puede tener muchos paquetes disponibles, pero solo
uno en uso en un momento dado.
Un Tenant no puede ser utilizado para ningún producto hasta que su packageId apunte a un TenantPackage válido.
Hay dos tipos de objetos TenantPackage:
- Paquetes de precio fijo - donde
hasFlexPricinges falso. - Precios flexibles - donde
hasFlexPricinges verdadero.
En ambos casos se definen límites en la cuenta que usa el paquete, sin embargo con Flex el inquilino paga un precio base más
lo que usó, definido por los parámetros flex*.
Un inquilino puede tener múltiples paquetes de inquilino y tener la capacidad de cambiar el paquete ellos mismos desde la Página de Información de Facturación.
Si usted manejará la facturación de los inquilinos por su cuenta, aún necesitará definir un paquete para cada inquilino para definir sus límites. Simplemente establezca billingHandledExternally en true en el Tenant y ellos
no podrán cambiar su información de facturación, o paquete activo, por sí mismos.
No puede crear paquetes con límites más altos que el inquilino padre.
La estructura del objeto TenantPackage es la siguiente:

GET /api/v1/tenant-packages/:id 
Esta ruta devuelve un único Paquete de Inquilino por id.



GET /api/v1/tenant-packages 
Esta API utiliza paginación, proporcionada por el parámetro de consulta skip. Los TenantPackages se devuelven en páginas de 100, ordenados por createdAt e id.
El costo se basa en el número de paquetes de inquilino devueltos, costando 1 crédito por cada 10 paquetes de inquilino devueltos.



POST /api/v1/tenant-packages 
Esta ruta proporciona la capacidad de agregar un único TenantPackage.
Crear un TenantPackage tiene las siguientes restricciones:
- Los siguientes parámetros son requeridos:
nametenantIdmonthlyCostUSD- Puede ser null.yearlyCostUSD- Puede ser null.maxMonthlyPageLoadsmaxMonthlyAPICreditsmaxMonthlyCommentsmaxConcurrentUsersmaxTenantUsersmaxSSOUsersmaxModeratorsmaxDomainshasDebrandingforWhoTextfeatureTaglineshasFlexPricing- Si es verdadero, entonces todos los parámetrosflex*son requeridos.
- El
nameno puede tener más de50 caracteres. - Cada elemento de
forWhoTextno puede tener más de200 caracteres. - Cada elemento de
featureTaglinesno puede tener más de100 caracteres. - El
TenantPackagedebe ser "más pequeño" que el inquilino padre. Por ejemplo, todos los parámetrosmax*deben tener valores más bajos que el inquilino padre. - Un inquilino de marca blanca puede tener un máximo de cinco paquetes.
- Solo inquilinos con acceso de marca blanca pueden crear un
TenantPackage. - No puede agregar paquetes a su propio inquilino. :)
Podemos crear un TenantPackage de la siguiente manera:



PATCH /api/v1/tenant-packages/:id 
Este endpoint de API proporciona la capacidad de actualizar un TenantPackage por id.
Actualizar un TenantPackage tiene las siguientes restricciones:
- Si está estableciendo
hasFlexPricinga verdadero, entonces todos los parámetrosflex*son requeridos en esa misma solicitud. - El
nameno puede tener más de50 caracteres. - Cada elemento de
forWhoTextno puede tener más de200 caracteres. - Cada elemento de
featureTaglinesno puede tener más de100 caracteres. - El
TenantPackagedebe ser "más pequeño" que el inquilino padre. Por ejemplo, todos los parámetrosmax*deben tener valores más bajos que el inquilino padre. - No puede cambiar el
tenantIdasociado con unTenantPackage.



DELETE /api/v1/tenant-packages/:id 
Esta ruta proporciona la eliminación de un TenantPackage por id.
No puede eliminar un TenantPackage que está en uso (el packageId de un inquilino apunta al paquete). Actualice el Tenant primero.



Estructura de usuario del tenant 
El TenantUser define un User que es gestionado por un inquilino específico. Su cuenta está bajo control completo del inquilino
al que están asociados, y su cuenta puede ser actualizada o eliminada a través de la UI o API.
Los usuarios de inquilino pueden ser administradores con todos los permisos y acceso al Tenant, o pueden estar limitados a permisos específicos para
moderar comentarios, acceder a claves de API, etc.
La estructura del objeto TenantUser es la siguiente:

GET /api/v1/tenant-users/:id 
Esta ruta devuelve un único TenantUser por id.



GET /api/v1/tenant-users 
Esta API utiliza paginación, proporcionada por el parámetro de consulta skip. Los TenantUsers se devuelven en páginas de 100, ordenados por signUpDate, username e id.
El costo se basa en el número de usuarios de inquilino devueltos, costando 1 crédito por cada 10 usuarios de inquilino devueltos.



POST /api/v1/tenant-users 
Esta ruta proporciona la capacidad de agregar un único TenantUser.
Crear un TenantUser tiene las siguientes restricciones:
- Se requiere un
username. - Se requiere un
email. - El
signUpDateno puede estar en el futuro. - El
localedebe estar en la lista de Locales Soportados. - El
usernamedebe ser único en todo FastComments.com. Si esto es un problema, sugerimos usar SSO en su lugar. - El
emaildebe ser único en todo FastComments.com. Si esto es un problema, sugerimos usar SSO en su lugar. - No puede crear más usuarios de inquilino de los definidos en
maxTenantUsersen su paquete.
Podemos crear un TenantUser de la siguiente manera



POST /api/v1/tenant-users/:id/send-login-link 
Esta ruta proporciona la capacidad de enviar un enlace de inicio de sesión a un único TenantUser.
Útil al crear usuarios por lotes sin tener que instruirles sobre cómo iniciar sesión en FastComments.com. Esto simplemente les enviará un "enlace mágico" para iniciar sesión que
expira después de 30 días.
Las siguientes restricciones existen para enviar un enlace de inicio de sesión a un TenantUser:
- El
TenantUserya debe existir. - Debe tener acceso para administrar el
Tenantal que pertenece elTenantUser.
Podemos enviar un enlace de inicio de sesión a un TenantUser de la siguiente manera:

Esto enviará un email como Bob en TenantName te está invitando a ser moderador...


PATCH /api/v1/tenant-users/:id 
Esta ruta proporciona la capacidad de actualizar un único TenantUser.
Actualizar un TenantUser tiene las siguientes restricciones:
- El
signUpDateno puede estar en el futuro. - El
localedebe estar en la lista de Locales Soportados. - El
usernamedebe ser único en todo FastComments.com. Si esto es un problema, sugerimos usar SSO en su lugar. - El
emaildebe ser único en todo FastComments.com. Si esto es un problema, sugerimos usar SSO en su lugar. - No puede actualizar el
tenantIdde un usuario.
Podemos crear un TenantUser de la siguiente manera



DELETE /api/v1/tenant-users/:id 
Esta ruta proporciona la eliminación de un TenantUser por id.
Es posible eliminar los comentarios del usuario mediante el parámetro de consulta deleteComments. Tenga en cuenta que si esto es verdadero:
- Todos los comentarios del usuario serán eliminados en vivo.
- Todos los comentarios hijos (ahora huérfanos) serán eliminados o anonimizados según la configuración de página asociada a cada comentario. Por ejemplo, si el modo de eliminación de hilo es "anonimizar", entonces las respuestas permanecerán, y los comentarios del usuario serán anonimizados. Esto solo aplica cuando
commentDeleteModeesRemove(el valor predeterminado). - El
creditsCostse convierte en2.
Comentarios Anonimizados
Puede retener los comentarios del usuario pero simplemente anonimizarlos estableciendo commentDeleteMode=1.
Si los comentarios del usuario son anonimizados, los siguientes valores se establecen en null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted e isDeletedUser se establecen en true.
Al renderizar, el widget de comentarios usará DELETED_USER_PLACEHOLDER (predeterminado: "[deleted]") para el nombre del usuario y DELETED_CONTENT_PLACEHOLDER para el comentario. Estos pueden ser personalizados a través de la UI de Personalización del Widget.
Ejemplos



Estructura de usuario 
User es un objeto que representa el denominador más común de todos los usuarios.
Tenga en cuenta que en FastComments tenemos varios casos de uso diferentes para usuarios:
- SSO Seguro
- SSO Simple
- Usuarios de Inquilino (Por ejemplo: Administradores)
- Comentaristas
Esta API es para Comentaristas y usuarios creados a través de SSO Simple. Básicamente, cualquier usuario creado
a través de su sitio puede ser accedido a través de esta API. Los Usuarios de Inquilino también pueden ser obtenidos de esta manera, pero obtendrá más información interactuando con la API /tenant-users/.
Para SSO Seguro por favor use la API /sso-users/.
No puede actualizar estos tipos de usuarios. Ellos crearon su cuenta a través de su sitio, por lo que proporcionamos acceso básico de solo lectura, pero
no puede realizar cambios. Si desea tener este tipo de flujo - necesita configurar SSO Seguro.
La estructura del objeto User es la siguiente:

GET /api/v1/users/:id 
Esta ruta devuelve un único User por id.



Estructura de voto 
Un objeto Vote representa un voto dejado por un usuario.
La relación entre comentarios y votos se define mediante commentId.
La estructura del objeto Vote es la siguiente:

GET /api/v1/votes 
Los votos deben ser obtenidos por urlId.
Tipos de Votos
Hay tres tipos de votos:
- Votos Autenticados, que se aplican al comentario correspondiente. Puede crear estos a través de esta API.
- Votos Autenticados, que están pendientes de verificación, y por lo tanto aún no se aplican al comentario. Estos se crean cuando un usuario usa el mecanismo de iniciar sesión para votar de FastComments.com.
- Votos Anónimos, que se aplican al comentario correspondiente. Estos se crean junto con los comentarios anónimos.
Estos se devuelven en listas separadas en la API para reducir la confusión.



Notas sobre Votos Anónimos
Tenga en cuenta que los votos anónimos creados a través de esta API aparecerán en la lista appliedAuthorizedVotes. Se consideran autorizados ya que fueron creados a través de la API con una clave de API.
La estructura appliedAnonymousVotes es para votos creados sin un email, clave de API, etc.
GET /api/v1/votes/for-user 
Permite obtener votos dejados por un usuario en un urlId dado. Toma un userId que puede ser cualquier usuario de FastComments.com o SSO User.
Esto es útil si desea mostrar si un usuario ha votado en un comentario. Al obtener comentarios, simplemente llame a esta API al mismo tiempo para el usuario con el
mismo urlId.
Si está usando votación anónima, entonces querrá pasar anonUserId en su lugar.


Tenga en cuenta que los votos anónimos aparecerán en la lista appliedAuthorizedVotes. Se consideran autorizados ya que fueron creados a través de la API con una clave de API.


POST /api/v1/votes 
Esta ruta proporciona la capacidad de agregar un único Vote autorizado. Los votos pueden ser up (+1) o down (-1).




Creación de Votos Anónimos
Los votos anónimos pueden ser creados estableciendo anonUserId en los parámetros de consulta en lugar de userId.
Este id no tiene que corresponder a un objeto de usuario en ningún lugar (de ahí anónimo). Es simplemente un identificador para la sesión, para que pueda obtener los votos nuevamente en la misma sesión, para verificar si un comentario ha sido votado.
Si no tiene algo como "sesiones anónimas" como FastComments - simplemente puede establecer esto en un ID aleatorio, como un UUID (aunque apreciamos identificadores más pequeños para ahorrar espacio).
Otras Notas
- Esta API obedece la configuración a nivel de inquilino. Por ejemplo, si deshabilita la votación para una página determinada, e intenta crear un voto a través de la API, fallará con el código de error
voting-disabled. - Esta API es en vivo por defecto.
- Esta API actualizará los
votesdelCommentcorrespondiente.
DELETE /api/v1/votes/:id 
Esta ruta proporciona la capacidad de eliminar un único Vote.



Notas:
- Esta API obedece la configuración a nivel de inquilino. Por ejemplo, si deshabilita la votación para una página determinada, e intenta crear un voto a través de la API, fallará con el código de error
voting-disabled. - Esta API es en vivo por defecto.
- Esta API actualizará los
votesdelCommentcorrespondiente.
Estructura de configuración de dominio 
Un objeto DomainConfig representa la configuración para un dominio de un inquilino.
La estructura del objeto DomainConfig es la siguiente:


Para Autenticación
La Configuración de Dominio se usa para determinar qué sitios pueden alojar el widget de FastComments para su cuenta. Esta es una forma básica de autenticación, lo que significa que agregar o eliminar cualquier Configuración de Dominio puede impactar la disponibilidad de su instalación de FastComments en producción.
No elimine ni actualice la propiedad domain de una Domain Config para un dominio que está actualmente en uso a menos que deshabilitar ese dominio sea intencional.
Esto tiene el mismo comportamiento que eliminar un dominio desde /auth/my-account/configure-domains.
También tenga en cuenta que eliminar un dominio desde la UI de Mis Dominios eliminará cualquier configuración correspondiente para ese dominio que pueda haber sido agregada a través de esta UI.
Para Personalización de Email
El enlace de cancelación de suscripción en el pie de página del email, y la función de cancelación de suscripción con un clic ofrecida por muchos clientes de correo electrónico, se pueden configurar a través de esta API definiendo footerUnsubscribeURL y emailHeaders, respectivamente.
Para DKIM
Después de definir sus registros DNS de DKIM, simplemente actualice el DomainConfig con su configuración DKIM usando la estructura definida.
GET /api/v1/domain-configs 
Esta API proporciona la capacidad de obtener todos los objetos DomainConfig para un inquilino.



GET /api/v1/domain-configs/:domain 
Los DomainConfigs individuales pueden obtenerse por su domain correspondiente.



POST /api/v1/domain-configs 
Este endpoint de API proporciona la capacidad de crear configuraciones de dominio.
Agregar configuración para un dominio autoriza ese dominio para la cuenta de FastComments.
Los casos de uso comunes de esta API son la configuración inicial, si se desean agregar muchos dominios, o configuración personalizada para enviar emails.



PATCH /api/v1/domain-configs/:domain 
Este endpoint de API proporciona la capacidad de actualizar una configuración de dominio especificando solo el dominio y el atributo a actualizar.



PUT /api/v1/domain-configs/:domain 
Este endpoint de API proporciona la capacidad de reemplazar una configuración de dominio.



DELETE /api/v1/domain-configs/:domain 
Esta ruta proporciona la eliminación de un único DomainConfig por id.
- Nota: Eliminar un
DomainConfigdesautorizará ese dominio de usar FastComments. - Nota: Re-agregar un dominio a través de la UI recreará el objeto (con solo
domainpoblado).



Estructura de configuración de pregunta 
FastComments proporciona una forma de construir preguntas y agregar sus resultados. Un ejemplo de una pregunta (en adelante llamada QuestionConfig)
podría ser una calificación de estrellas, un deslizador, o una pregunta NPS (determinado vía type).
Los datos de preguntas pueden agregarse individualmente, juntos, a lo largo del tiempo, en general, por página, y así sucesivamente.
El framework tiene todas las capacidades necesarias para construir widgets del lado del cliente (con su servidor frente a esta API), dashboards de administración, y herramientas de informes.
Primero, tenemos que definir un QuestionConfig. La estructura es la siguiente:

GET /api/v1/question-configs 
Esta ruta devuelve hasta 100 objetos QuestionConfig a la vez, paginados. El costo es 1 por cada 100 objetos. Están
ordenados por texto de pregunta ascendente (campo question).



GET /api/v1/question-configs/:id 
Esta ruta devuelve un único QuestionConfig por su id.



POST /api/v1/question-configs 
Este endpoint de API proporciona la capacidad de crear un QuestionConfig.



PATCH /api/v1/question-configs/:id 
Esta ruta proporciona la capacidad de actualizar un único QuestionConfig.
La siguiente estructura representa todos los valores que pueden cambiarse:




DELETE /api/v1/question-configs/:id 
Esta ruta proporciona la eliminación de un QuestionConfig por id.
Esto eliminará todos los resultados de preguntas correspondientes (pero no los comentarios). Esto es parte del alto costo de créditos.



Estructura de resultado de pregunta 
Para guardar resultados de preguntas, crea un QuestionResult. Luego puede agregar resultados de preguntas, y también
vincularlos a comentarios para propósitos de informes.

GET /api/v1/question-results 
Esta ruta devuelve hasta 1000 objetos QuestionResults a la vez, paginados. El costo es 1 por cada 100 objetos. Están
ordenados por createdAt, ascendente. Puede filtrar por varios parámetros.



GET /api/v1/question-results/:id 
Esta ruta devuelve un único QuestionResult por su id.



POST /api/v1/question-results 
Este endpoint de API proporciona la capacidad de crear un QuestionResult.



PATCH /api/v1/question-results/:id 
Esta ruta proporciona la capacidad de actualizar un único QuestionResult.
La siguiente estructura representa todos los valores que pueden cambiarse:




DELETE /api/v1/question-results/:id 
Esta ruta proporciona la eliminación de un QuestionResult por id.



GET /api/v1/question-results-aggregate 
Aquí es donde ocurre la agregación de resultados.
La estructura de respuesta de agregación es la siguiente:

Aquí están los parámetros de consulta disponibles para agregación:

Aquí hay una solicitud de ejemplo:

Respuesta de ejemplo:


Notas de Rendimiento
- Para un fallo de caché las agregaciones generalmente toman cinco segundos por millón de resultados.
- De lo contrario, las solicitudes son de tiempo constante.
Notas de Caché y Costo
- Cuando se especifica
forceRecalculateel costo es siempre10, en lugar del normal2. - Si el caché expira y los datos se recalculan, el costo sigue siendo un constante
2si no se especificaforceRecalculate. El caché expira basándose en el tamaño del conjunto de datos agregado (puede variar entre 30 segundos y 5 minutos). - Esto es para incentivar el uso del caché.
GET /api/v1/question-results-aggregate/combine/comments 
Aquí es donde ocurre la combinación de resultados con comentarios. Útil para crear un gráfico de "comentarios positivos y negativos recientes" para un producto, por ejemplo.
Puede buscar vía un rango de valores (inclusivo), una o más preguntas, y por una fecha de inicio (inclusiva).
La estructura de respuesta es la siguiente:

Aquí están los parámetros de consulta disponibles para agregación:

Aquí hay una solicitud de ejemplo:

Respuesta de ejemplo:


Notas de Caché y Costo
- Cuando se especifica
forceRecalculateel costo es siempre10, en lugar del normal2. - Si el caché expira y los datos se recalculan, el costo sigue siendo un constante
2si no se especificaforceRecalculate. - Esto es para incentivar el uso del caché.
Estructura de insignia de usuario 
UserBadge es un objeto que representa una insignia asignada a un usuario en el sistema FastComments.
Las insignias pueden ser asignadas a usuarios automáticamente basándose en su actividad (como cantidad de comentarios, tiempo de respuesta, estado de veterano) o manualmente por los administradores del sitio.
La estructura del objeto UserBadge es la siguiente:

GET /api/v1/user-badges 
Este endpoint le permite obtener insignias de usuario basadas en varios criterios.
Ejemplo de Solicitud:
Run 
Puede agregar varios parámetros de consulta para filtrar los resultados:
userId- Obtener insignias para un usuario específicobadgeId- Obtener instancias de una insignia específicatype- Filtrar por tipo de insignia (0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, etc. Ver estructura de UserBadge para la lista completa)displayedOnComments- Filtrar por si la insignia se muestra en comentarios (true/false)limit- Número máximo de insignias a devolver (predeterminado 30, máximo 200)skip- Número de insignias a omitir (para paginación)
Ejemplo de Respuesta:

Posibles Respuestas de Error:


GET /api/v1/user-badges/:id 
Este endpoint le permite obtener una insignia de usuario específica por su ID único.
Ejemplo de Solicitud:
Run 
Ejemplo de Respuesta:

Posibles Respuestas de Error:


POST /api/v1/user-badges 
Este endpoint le permite crear una nueva asignación de insignia de usuario.
Ejemplo de Solicitud:
Run 
El cuerpo de la solicitud debe contener los siguientes parámetros:
userId(requerido) - El ID del usuario al que se asignará la insigniabadgeId(requerido) - El ID de la insignia a asignardisplayedOnComments(opcional) - Si la insignia debe mostrarse en los comentarios del usuario (por defecto es true)
Notas Importantes:
- La insignia debe existir y estar habilitada en el catálogo de insignias de su inquilino
- Solo puede asignar insignias a usuarios que pertenecen a su inquilino o han comentado en su sitio
Ejemplo de Respuesta:

Posibles Respuestas de Error:





PUT /api/v1/user-badges/:id 
Este endpoint le permite actualizar una asignación de insignia de usuario.
Actualmente, la única propiedad que puede actualizarse es displayedOnComments, que controla si la insignia se muestra en los comentarios del usuario.
Ejemplo de Solicitud:
Run 
Ejemplo de Respuesta:

Posibles Respuestas de Error:



DELETE /api/v1/user-badges/:id 
Este endpoint le permite eliminar una asignación de insignia de usuario.
Ejemplo de Solicitud:
Run 
Ejemplo de Respuesta:

Posibles Respuestas de Error:



Estructura de progreso de insignia de usuario 
UserBadgeProgress es un objeto que representa el progreso de un usuario hacia la obtención de varias insignias en el sistema FastComments.
Este seguimiento ayuda a determinar cuándo los usuarios deben recibir insignias automáticas basadas en su actividad y participación en su comunidad.
La estructura del objeto UserBadgeProgress es la siguiente:

GET /api/v1/user-badge-progress 
Este endpoint le permite obtener registros de progreso de insignias de usuario basados en varios criterios.
Ejemplo de Solicitud:
Run 
Puede agregar varios parámetros de consulta para filtrar los resultados:
userId- Obtener progreso para un usuario específicolimit- Número máximo de registros a devolver (predeterminado 30, máximo 200)skip- Número de registros a omitir (para paginación)
Ejemplo de Respuesta:

Posibles Respuestas de Error:


GET /api/v1/user-badge-progress/:id 
Este endpoint le permite obtener un registro específico de progreso de insignia de usuario por su ID único.
Ejemplo de Solicitud:
Run 
Ejemplo de Respuesta:

Posibles Respuestas de Error:


GET /api/v1/user-badge-progress/user/:userId 
Este endpoint le permite obtener el registro de progreso de insignias de un usuario por su ID de usuario.
Ejemplo de Solicitud:
Run 
Ejemplo de Respuesta:

Posibles Respuestas de Error:



En conclusión
Esperamos que haya encontrado nuestra documentación de la API detallada y fácil de entender. Si encuentra alguna laguna, háganoslo saber abajo.