
Idioma 🇧🇷 Português (Brasil)
Recursos da API
Agregações
Logs de Auditoria
Comentários
Modelos de E-mail
Hashtags
Moderadores
Contagem de Notificações
Notificações
Páginas
Eventos de Webhook Pendentes
Usuários SSO
Assinaturas
Uso Diário do Locatário
Locatários
Pacotes do Locatário
Usuários do Locatário
Usuários
Votos
Configurações de Domínio
Configurações de Pergunta
Resultados de Pergunta
Agregação de Resultados de Pergunta
Insígnias de Usuário
Progresso de Insígnias do Usuário
A API do FastComments
FastComments fornece uma API para interagir com muitos recursos. Crie integrações com nossa plataforma, ou até construa seus próprios clientes!
Nesta documentação, você encontrará todos os recursos suportados pela API documentados com seus tipos de requisição e resposta.
Para clientes Enterprise, todo o acesso à API é registrado no Registro de Auditoria.
SDKs Gerados
O FastComments agora gera uma Especificação da API a partir do nosso código (isso ainda não está completo, mas inclui muitas APIs).
Também agora temos SDKs para linguagens 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
Autenticação
A API é autenticada passando sua chave da API como um cabeçalho X-API-KEY ou parâmetro de consulta API_KEY. Você também precisará do seu tenantId para fazer chamadas à API. Isso pode ser recuperado na mesma página que sua chave da API.
Nota de Segurança
Essas rotas devem ser chamadas a partir de um servidor. NÃO as chame a partir de um navegador. Fazer isso expõe sua chave da API — isso fornecerá acesso total à sua conta para qualquer pessoa que possa ver o código-fonte de uma página!
Opção de Autenticação Um - Cabeçalhos
- Header:
X-API-KEY - Header:
X-TENANT-ID
Opção de Autenticação Dois - Parâmetros de Consulta
- Parâmetro de Consulta:
API_KEY - Parâmetro de Consulta:
tenantId
Recursos da API 
Uso de Recursos
Deve-se observar que buscar dados da API é contabilizado como uso na sua conta.
Cada recurso listará qual é esse uso em sua própria seção.
Alguns recursos custam mais para serem servidos do que outros. Cada endpoint tem um custo fixo de créditos por chamada de API. Para alguns endpoints, o número de créditos varia com base nas opções e no tamanho das respostas.
O uso da API pode ser verificado na página Análise de Faturamento e é atualizado a cada poucos minutos.
Observação!
Sugerimos ler primeiro a documentação do Pages, para ajudar a reduzir a confusão ao determinar quais valores passar para urlId na API de Comentários.
Agregue Seus Dados 
Esta API agrega documentos agrupando-os (se groupBy for fornecido) e aplicando múltiplas operações. Diferentes operações (por exemplo sum, countDistinct, avg, etc.) são suportadas.
O custo é variável. A cada 500 objetos analisados custa 1 crédito de API.
O uso máximo de memória permitido por chamada de API por padrão é 64MB, e por padrão você pode ter apenas uma agregação em execução por vez. Se você enviar múltiplas agregações simultaneamente, elas serão enfileiradas e executadas na ordem em que foram submetidas. Agregações pendentes aguardarão no máximo 60 segundos, após isso a solicitação expirará. Agregações individuais podem executar por até 5 minutos.
Se você tem tenants gerenciados, pode agregar todos os recursos de tenants filhos em uma única chamada passando o parâmetro de query parentTenantId.
Exemplos
Exemplo: Contar valores únicos


Exemplo: Contar distintos

Resposta:

Exemplo: Somar valores de múltiplos campos

Resposta:

Exemplo: Média dos valores de múltiplos campos

Resposta:

Exemplo: Valores mínimos/máximos de múltiplos campos

Resposta:

Exemplo: Contar valores únicos de múltiplos campos

Resposta:

Exemplo: Criação de consulta

Resposta:

Exemplo: Contar comentários pendentes de revisão

Resposta:

Exemplo: Distribuição de comentários aprovados, revisados e spam

Resposta:

Estruturas


Os seguintes recursos podem 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
Estrutura de Log de Auditoria 
Um AuditLog é um objeto que representa um evento auditado para tenants que têm acesso a este recurso.
A estrutura do objeto AuditLog é a seguinte:

O registro de auditoria é imutável. Também não pode ser escrito manualmente. Somente a FastComments.com pode decidir quando gravar no registro de auditoria. No entanto, você pode lê-lo através desta API.
Os eventos no registro de auditoria expiram após dois anos.
GET /api/v1/audit-logs 
Esta API usa paginação, fornecida pelos parâmetros skip, before e after. AuditLogs são retornados em páginas de 1000, ordenados por when e id.
Buscar cada 1000 logs tem um custo de crédito de 10.
Por padrão, você receberá uma lista com os itens mais novos primeiro. Dessa forma, você pode consultar começando com skip=0, paginando até encontrar o último registro que consumiu.
Alternativamente, você pode ordenar do mais antigo para o mais novo e paginar até não haver mais registros.
A ordenação pode ser feita definindo order como ASC ou DESC. O padrão é ASC.
Consultar por data é possível via before e after como timestamps com milissegundos. before e after NÃO são inclusivos.



Estrutura de Comentário 
A Comment object representa um comentário deixado por um usuário.
A relação entre comentários pai e filho é definida via parentId.
A estrutura do objeto Comment é a seguinte:

Alguns destes campos estão marcados READONLY - estes são retornados pela API mas não podem ser definidos.
Estrutura do Texto do Comentário
Os comentários são escritos em uma variante de markdown do FastComments, que é apenas markdown mais tags no estilo bbcode para imagens, como [img]path[/img].
O texto é armazenado em dois campos. O texto que o usuário digitou é armazenado sem modificações no campo comment. Este é renderizado e armazenado no campo commentHTML.
As tags HTML permitidas são b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.
É recomendado renderizar o HTML, já que é um subconjunto muito pequeno de HTML; construir um renderizador é bastante direto. Existem várias bibliotecas para React Native e Flutter, por exemplo, para ajudar com isso
Você pode optar por renderizar o valor não normalizado do campo comment. Um parser de exemplo está aqui..
O parser de exemplo também pode ser ajustado para trabalhar com HTML e transformar as tags HTML em elementos esperados para renderizar na sua plataforma.
Marcação
Quando usuários são marcados em um comentário, a informação é armazenada em uma lista chamada mentions. Cada objeto nessa lista
tem a seguinte estrutura.
Run 
HashTags
Quando hashtags são usadas e parseadas com sucesso, a informação é armazenada em uma lista chamada hashTags. Cada objeto nessa lista
tem a seguinte estrutura. Hashtags também podem ser adicionadas manualmente ao array hashTags do comentário para consulta, se retain estiver definido.
Run 
GET /api/v1/comments 
Essa API é usada para obter comentários para exibição a um usuário. Por exemplo, ela filtra automaticamente comentários não aprovados ou spam.
Pagination
A paginação pode ser feita de duas maneiras, dependendo dos requisitos de desempenho e do caso de uso:
- Mais rápido: Paginação Precalculada:
- É assim que o FastComments funciona quando você usa nossos widgets e clientes pré-construídos.
- Ao clicar em "next" simplesmente aumenta a contagem de páginas.
- Você pode pensar nisso como sendo recuperado por um armazenamento chave-valor.
- Dessa forma, defina simplesmente um parâmetro
pagecomeçando em0e uma direção de ordenação comodirection. - Os tamanhos de página podem ser personalizados via regras de personalização.
- Mais flexível: Paginação Flexível:
- Dessa forma você pode definir parâmetros personalizados
limiteskip. Não passepage. - A ordenação
directiontambém é suportada. limité o total a ser retornado após a aplicação deskip.- Exemplo: defina
skip = 200, limit = 100quandopage size = 100epage = 2.
- Exemplo: defina
- Comentários filhos ainda contam na paginação. Você pode contornar isso usando a opção
asTree.- Você pode paginar filhos via
limitChildreneskipChildren. - Você pode limitar a profundidade das threads retornadas via
maxTreeDepth.
- Você pode paginar filhos via
- Dessa forma você pode definir parâmetros personalizados
Threads
- Ao usar
Precalculated Pagination, os comentários são agrupados por page e comentários em threads afetam a página como um todo.- Dessa forma, as threads podem ser determinadas no cliente com base em
parentId. - Por exemplo, em uma página com um comentário de nível superior e 29 respostas, ao definir
page=0na API — você obterá apenas o comentário de nível superior e os 29 filhos. - Exemplo de imagem aqui ilustrando múltiplas páginas.
- Dessa forma, as threads podem ser determinadas no cliente com base em
- Ao usar
Flexible Pagination, você pode definir um parâmetroparentId.- Defina isso como null para obter apenas comentários de nível superior.
- Então, para visualizar threads, chame a API novamente e passe
parentId. - Uma solução comum é fazer uma chamada à API para os comentários de nível superior e então fazer chamadas paralelas à API para obter comentários dos filhos de cada comentário.
- NOVO a partir de fev de 2023! Busque como árvore usando
&asTree=true.- Você pode pensar nisso como
Flexible Pagination as a Tree. - Apenas os comentários de nível superior contam na paginação.
- Defina
parentId=nullpara iniciar a árvore na raiz (você deve definirparentId). - Defina
skipelimitpara paginação. - Defina
asTreecomotrue. - O custo de créditos aumenta em
2x, pois nosso backend precisa fazer muito mais trabalho nesse cenário. - Defina
maxTreeDepth,limitChildreneskipChildrenconforme desejado.
- Você pode pensar nisso como
Trees Explained
Ao usar asTree, pode ser difícil raciocinar sobre a paginação. Aqui está um gráfico útil:
Fetching Comments in The Context of a User
A API /comments pode ser usada em dois contextos, para diferentes casos de uso:
- Para retornar comentários ordenados e marcados com informações para construir seu próprio cliente.
- Nesse caso, defina um parâmetro de query
contextUserId.
- Nesse caso, defina um parâmetro de query
- Para buscar comentários a partir do seu backend para integrações customizadas.
- A plataforma assumirá este caso por padrão sem
contextUserId.
- A plataforma assumirá este caso por padrão sem




Get Comments as a Tree
É possível obter os comentários retornados como uma árvore, com a paginação contando apenas os comentários de nível superior.

Quer obter apenas os comentários de nível superior e os filhos imediatos? Aqui está uma maneira:

No entanto, na sua UI pode ser necessário saber se deve exibir um botão "mostrar respostas" em cada comentário. Ao buscar comentários via árvore, existe uma propriedade hasChildren adicionada aos comentários quando aplicável.
Get Comments as a Tree, Searching by Hash Tag
É possível buscar por hashtag usando a API, em todo o seu tenant (não limitado a uma página, ou urlId).
Neste exemplo, omitimos urlId, e buscamos por múltiplas hashtags. A API retornará apenas comentários que contenham todas as hashtags requisitadas.

All Request Params

The Response

Helpful Tips
URL ID
Provavelmente você vai querer usar a API Comment com o parâmetro urlId. Você pode chamar a API Pages primeiro, para ver como os valores de urlId disponíveis para você se parecem.
Anonymous Actions
Para comentários anônimos, provavelmente você vai querer passar anonUserId ao buscar comentários, e ao realizar sinalizações e bloqueios.
(!) Isto é exigido por muitas lojas de aplicativos, pois os usuários devem ser capazes de sinalizar conteúdo criado por usuários que eles podem ver, mesmo que não estejam logados. Não fazer isso pode causar a remoção do seu app dessa loja.
Comments Not Being Returned
Verifique se seus comentários estão aprovados e não são spam.
GET /api/v1/comments/:id 
Esta API permite buscar um único comentário por id.



POST /api/v1/comments 
Este endpoint da API fornece a capacidade de criar comentários.
Casos de uso comuns incluem UIs personalizadas, integrações ou importações.
Notas:
- Esta API pode atualizar o widget de comentários "live" se desejado (isso aumenta o
creditsCostde1para2). - Esta API criará automaticamente objetos de usuário em nosso sistema se o email for fornecido.
- Tentar salvar dois comentários com emails diferentes, mas o mesmo nome de usuário, resultará em um erro para o segundo comentário.
- Se você estiver especificando
parentId, e um comentário filho tivernotificationSentForParentcomo false, enviaremos notificações para o comentário pai. Isso é feito a cada hora (agrupamos as notificações para diminuir o número de emails enviados). - Se você quiser enviar emails de boas-vindas ao criar usuários, ou emails de verificação de comentário, defina
sendEmailscomotruenos parâmetros de consulta. - Comentários criados via esta API aparecerão nas páginas de Analytics e Moderation do aplicativo de administração.
- Palavrões ainda são mascarados nos nomes dos comentaristas e no texto do comentário se a configuração estiver ativada.
- Comentários criados via esta API ainda podem ser verificados quanto a spam, se desejado.
- Configurações como comprimento máximo do comentário, se configuradas via a página de administração Customization Rule, serão aplicadas aqui.
Os dados mínimos necessários para enviar que serão exibidos no widget de comentários são os seguintes:

Uma requisição mais realista pode ser:



PATCH /api/v1/comments/:id 
Este endpoint da API fornece a capacidade de atualizar um único comentário.
Notes:
- This API can update the comment widget "live" if desired (this increases base
creditsCostfrom1to2).- This can make migrating comments between pages "live" (changing
urlId). - Migrations cost an additional
2credits as pages are precalculated and this is CPU intensive.
- This can make migrating comments between pages "live" (changing
- Unlike the create API, this API will NOT automatically create user objects in our system if email is provided.
- Comments updated via this API can still be checked for spam if desired.
- Configuration such as max comment length, if configured via the Customization Rule admin page, will apply here.
- To allow users to update their comment text, you can just specify
commentin the request body. We will generate the resultingcommentHTML.- If you define both
commentandcommentHTMLwe will not automatically generate the HTML. - If the user adds mentions or hashtags in their new text, it will still be processed like the
POSTAPI.
- If you define both
- When updating
commenterEmailon a comment, it is best to also specifyuserId. Otherwise, you must ensure the user with this email belongs to your tenant, or the request will fail.



DELETE /api/v1/comments/:id 
Este endpoint de API permite excluir um comentário.
Observações:
- Esta API pode atualizar o widget de comentários "live" se desejado (isso aumenta
creditsCostde1para2). - Esta API excluirá todos os comentários filhos.



POST /api/v1/comments/:id/flag 
Este endpoint da API permite sinalizar um comentário para um usuário específico.
Notas:
- Essa chamada deve sempre ser feita no contexto de um usuário. O usuário pode ser um FastComments.com User, SSO User, ou Tenant User.
- Se um limite de sinalizações-para-ocultar estiver definido, o comentário será automaticamente ocultado ao vivo depois de ter sido sinalizado o número de vezes definido.
- Depois que for automaticamente desaprovado (oculto) - o comentário só poderá ser re-aprovado por um administrador ou moderador. Remover a sinalização não re-aprovará o comentário.

Para sinalização anônima, devemos especificar um anonUserId. Isso pode ser um ID que representa a sessão anônima, ou um UUID aleatório.
Isso nos permite suportar a sinalização e a remoção da sinalização de comentários mesmo que um usuário não esteja logado. Dessa forma, o comentário pode ser marcado como
sinalizado quando os comentários são buscados com o mesmo anonUserId.



POST /api/v1/comments/:id/un-flag 
Este endpoint da API fornece a capacidade de remover a sinalização (un-flag) de um comentário para um usuário específico.
Observações:
- Esta chamada deve sempre ser feita no contexto de um usuário. O usuário pode ser um FastComments.com User, SSO User, ou Tenant User.
- Após um comentário ser desaprovado automaticamente (oculto) - o comentário só pode ser reaprovado por um administrador ou moderador. Remover a sinalização (un-flagging) não irá reaprovar o comentário.

Para sinalização anônima, devemos especificar um anonUserId. Isso pode ser um ID que representa a sessão anônima, ou um UUID aleatório.



POST /api/v1/comments/:id/block 
Este endpoint da API fornece a capacidade de bloquear um usuário que escreveu um determinado comentário. Ele suporta bloqueio de comentários escritos por FastComments.com Users, SSO Users e Tenant Users.
Ele suporta um parâmetro de corpo commentIdsToCheck para verificar se quaisquer outros comentários potencialmente visíveis no cliente devem ser bloqueados/desbloqueados após esta ação ser realizada.
Notas:
- Esta chamada deve sempre ser feita no contexto de um usuário. O usuário pode ser um FastComments.com User, SSO User ou Tenant User.
- O
userIdna requisição é o usuário que está fazendo o bloqueio. Por exemplo:User Aquer bloquearUser B. PasseuserId=User Ae o id do comentário queUser Bescreveu. - Comentários completamente anônimos (sem user id, sem email) não podem ser bloqueados e um erro será retornado.

Para bloqueio anônimo, devemos especificar um anonUserId. Isso pode ser um ID que representa a sessão anônima, ou um UUID aleatório.
Isso nos permite suportar o bloqueio de comentários mesmo que um usuário não esteja logado, buscando os comentários com o mesmo anonUserId.



POST /api/v1/comments/:id/un-block 
Este endpoint da API fornece a capacidade de desbloquear um usuário que escreveu um determinado comentário. Ele suporta o desbloqueio de comentários escritos por FastComments.com Users, SSO Users, and Tenant Users.
Ele suporta um parâmetro de corpo commentIdsToCheck para verificar se quaisquer outros comentários potencialmente visíveis no cliente devem ser bloqueados/desbloqueados após esta ação ser executada.
Notas:
- Esta chamada deve sempre ser feita no contexto de um usuário. O usuário pode ser um FastComments.com User, SSO User, ou Tenant User.
- O
userIdna requisição é o usuário que está realizando o desbloqueio. Por exemplo:User Aquer desbloquearUser B. PasseuserId=User Ae o id do comentário queUser Bescreveu. - Comentários completamente anônimos (sem user id, sem email) não podem ser bloqueados e um erro será retornado.




Estrutura de Modelo de E-mail 
Um objeto EmailTemplate representa a configuração para um modelo de e-mail personalizado, para um tenant.
O sistema selecionará o modelo de e-mail a ser usado via:
- Seu identificador de tipo, chamamos isto de
emailTemplateId. Estes são constantes. - O
domain. Primeiro tentaremos encontrar um template para o domínio ao qual o objeto relacionado (como umComment) está vinculado, e se não for encontrada uma correspondência então tentaremos encontrar um template onde domain seja null ou*.
A estrutura para o objeto EmailTemplate é a seguinte:

Notas
- Você pode obter os valores válidos de
emailTemplateIda partir do endpoint/definitions. - O endpoint
/definitionstambém inclui as traduções padrão e os dados de teste. - Os modelos não serão salvos se a estrutura ou os dados de teste forem inválidos.
GET /api/v1/email-templates/:id 
EmailTemplates individuais podem ser obtidos pelo seu id correspondente (NÃO emailTemplateId).



GET /api/v1/email-templates 
Esta API usa paginação, fornecida pelo parâmetro de consulta page. EmailTemplates são retornados em páginas de 100, ordenados por createdAt e depois por id.



PATCH /api/v1/email-templates/:id 
Este endpoint da API permite atualizar um modelo de e-mail especificando apenas o id e os atributos a serem atualizados.
Observe que todas as mesmas validações para criar um modelo também se aplicam, por exemplo:
- O modelo deve renderizar. Isso é verificado a cada atualização.
- Não é permitido ter modelos duplicados para o mesmo domínio (caso contrário, um deles seria ignorado silenciosamente).



POST /api/v1/email-templates 
This API endpoint provides the ability to create email templates.
Notes:
- You can't have multiple templates with the same
emailTemplateIdwith the same domain. - But you can have a wildcard template (
domain=*and a domain specific template for the sameemailTemplateId). - Specifying
domainis only relevant if you have different domains, or want to use specific templates for testing (domainset tolocalhostetc). - If you do specify
domainit must match aDomainConfig. On error a list of valid domains is provided. - The template syntax is EJS and is rendered with a 500ms timeout. P99 for rendering is <5ms, so if you hit 500ms something is wrong.
- Your template must render with your given
testDatato save. Render errors are aggregated and reported on in the dashboard (soon available via API).
The minimum data required to add a template is as follows:

You may want to have templates per-site, in which case you define domain:



POST /api/v1/email-templates/render 
Este endpoint da API permite visualizar modelos de e-mail.



DELETE /api/v1/email-templates/:id 
Esta rota remove um único EmailTemplate por id.



Estrutura de Hashtag 
A HashTag object represents a tag that can be left by a user. HashTags can be used to link to an external piece of content or to
tie related comments together.
The structure for the HashTag object is as follows:

Notes:
- In some API endpoints you will see that the hashtag is used in the URL. Remember to URI-Encoded values. For example,
#should instead be represented as%23. - Some of these fields are marked
READONLY- these are returned by the API but cannot be set.
GET /api/v1/hash-tags 
Esta API usa paginação, fornecida pelo parâmetro de consulta page. HashTags são retornadas em páginas de 100, ordenadas por tag.



PATCH /api/v1/hash-tags/:tag 
Esta rota permite atualizar um único HashTag.



POST /api/v1/hash-tags 
Esta rota permite adicionar uma única HashTag.



POST /api/v1/hash-tags/bulk 
Esta rota fornece a capacidade de adicionar até 100 HashTag objects de uma só vez.



DELETE /api/v1/hash-tags/:tag 
Esta rota permite a remoção de um usuário HashTag pelo tag fornecido.
Observe que, a menos que a criação automática de HashTag esteja desativada, hashtags podem ser recriadas por um usuário que fornecer a hashtag ao comentar.



Estrutura de Moderador 
Um objeto Moderator representa a configuração para um moderador.
Existem três tipos de moderadores:
- Usuários administradores que possuem a flag
isCommentModeratorAdmin. - Usuários SSO com a flag
isCommentModeratorAdmin. - Comentadores regulares, ou usuários do FastComments.com, que são convidados como Moderadores.
A estrutura Moderator é usada para representar o Estado de Moderação do caso de uso 3.
Se você quiser convidar um usuário para ser moderador via API, use a API Moderator criando um Moderator e inviting o usuário.
Se o usuário não tiver uma conta no FastComments.com, o e-mail de convite ajudará a configurá-la. Se já tiverem uma conta, eles receberão acesso de moderação ao seu tenant e o userId do objeto Moderator será atualizado para apontar para o usuário deles. Você não terá acesso via API ao usuário deles, pois nesse caso a conta pertence a eles e é gerenciada pelo FastComments.com.
Se você precisar de gerenciamento completo da conta do usuário, recomendamos usar SSO ou adicioná-los como um Tenant User e então adicionar um objeto Moderator para rastrear suas estatísticas.
A estrutura Moderator pode ser usada como um mecanismo de rastreamento de estatísticas para os casos de uso 1 e 2. Após criar o usuário, adicione um objeto Moderator com o userId dele definido e suas estatísticas serão rastreadas na Página de Moderadores de Comentários.
A estrutura do objeto Moderator é a seguinte:

GET /api/v1/moderators/:id 
Esta rota retorna um único moderador pelo seu id.



GET /api/v1/moderators 
Esta API usa paginação, fornecida pelo parâmetro de consulta skip. Moderadores são retornados em páginas de 100, ordenados por createdAt e id.
O custo é baseado no número de moderadores retornados, custando 1 credit per 10 moderadores retornados.



PATCH /api/v1/moderators/:id 
Este endpoint da API fornece a habilidade de atualizar um Moderator por id.
A atualização de um Moderator tem as seguintes restrições:
- Os seguintes valores não podem ser fornecidos ao atualizar um
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Quando um
userIdfor especificado, esse usuário deve existir. - Quando um
userIdfor especificado, esse usuário deve pertencer ao mesmotenantIdespecificado nos parâmetros de consulta. - Dois moderadores no mesmo tenant não podem ser adicionados com o mesmo
email. - Você não pode alterar o
tenantIdassociado a umModerator.



POST /api/v1/moderators 
Esta rota permite adicionar um único Moderator.
A criação de um Moderator tem as seguintes restrições:
- Um
namee umemaildevem sempre ser fornecidos. UmuserIdé opcional. - Os seguintes valores não podem ser fornecidos ao criar um
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Quando um
userIdé especificado, esse usuário deve existir. - Quando um
userIdé especificado, ele deve pertencer ao mesmotenantIdespecificado nos parâmetros de consulta. - Dois moderadores no mesmo tenant não podem ser adicionados com o mesmo
email.
Podemos criar um Moderator para um usuário do qual conhecemos apenas o e-mail:

Ou podemos criar um Moderator para um usuário que pertence ao nosso tenant, para rastrear suas estatísticas de moderação:



POST /api/v1/moderators/:id/send-invite 
Esta rota fornece a capacidade de convidar um único Moderator.
As seguintes restrições existem para enviar um email de convite a um Moderator:
- O
Moderatordeve já existir. - O
fromNamenão pode ter mais de100 characters.
Observações:
- Se um usuário com o e-mail fornecido já existir, ele será convidado a moderar os comentários do seu tenant.
- Se um usuário com o e-mail fornecido não existir, o link de convite o guiará pelo processo de criação da conta.
- O convite expirará após
30 days.
Podemos criar um Moderator para um usuário do qual só sabemos o e-mail:

Isso enviará um e-mail como Bob at TenantName is inviting you to be a moderator...


DELETE /api/v1/moderators/:id 
Esta rota fornece a remoção de um Moderator por id.



Estrutura de Contagem de Notificações 
Um NotificationCount object representa a contagem de notificações não lidas e os metadados de um usuário.
Se não houver notificações não lidas, não haverá um NotificationCount para o usuário.
Objetos NotificationCount são criados automaticamente e não podem ser criados via API. Eles também expiram após um ano.
Você pode limpar a contagem de notificações não lidas de um usuário excluindo o seu NotificationCount.
A estrutura do objeto NotificationCount é a seguinte:

GET /api/v1/notification-count/:user_id 
Esta rota retorna um único NotificationCount pelo id do usuário. Com SSO, o id do usuário está no formato <tenant id>:<user id>.
Se não houver notificações não lidas, não haverá um NotificationCount - portanto você receberá um 404.
Isto é diferente de notifications/count pois é muito mais rápido, mas não permite filtragem.



DELETE /api/v1/notification-count/:user_id 
Esta rota exclui um único NotificationCount pelo id do usuário. Com SSO, o id do usuário está no formato <tenant id>:<user id>.
Isso limpará a contagem de notificações não lidas do usuário (o sino vermelho no widget de comentários desaparecerá e a contagem sumirá).



Estrutura de Notificação 
Um objeto Notification representa uma notificação para um usuário.
Objetos Notification são criados automaticamente e não podem ser criados via API. Eles também expiram após um ano.
Notificações não podem ser excluídas. Elas podem, no entanto, ser atualizadas para definir viewed como false, e você pode consultar por viewed.
Um usuário também pode optar por não receber notificações para um comentário específico configurando optedOut na notificação para true. Você pode optar por receber novamente definindo para false.
Existem diferentes tipos de notificação - verifique relatedObjectType e type.
As formas como notificações são criadas são bastante flexíveis e podem ser acionadas por muitos cenários (veja NotificationType).
Atualmente, a existência de uma Notification não implica necessariamente que um e-mail foi ou deve ser enviado. Em vez disso, as notificações
são usadas para o feed de notificações e integrações relacionadas.
A estrutura do objeto Notification é a seguinte:

GET /api/v1/notifications 
Esta rota retorna até 30 objetos Notification ordenados por createdAt, do mais novo para o mais antigo.
Você pode filtrar por userId. Com SSO, o id do usuário tem o formato <tenant id>:<user id>.



GET /api/v1/notifications/count 
Esta rota retorna um objeto contendo o número de notificações no parâmetro count.
É mais lento que /notification-count/ e custa o dobro de créditos, mas permite filtragem por mais dimensões.
Você pode filtrar pelos mesmos parâmetros do endpoint /notifications, como userId. Com SSO, o id do usuário está no formato <tenant id>:<user id>.




PATCH /api/v1/notifications/:id 
Este endpoint da API permite atualizar uma Notification pelo id.
A atualização de uma Notification possui as seguintes restrições:
- Você só pode atualizar os seguintes campos:
viewedoptedOut



Estrutura de Página 
Um Page object representa a página à qual muitos comentários podem pertencer. Esse relacionamento é definido por
urlId.
Um Page armazena informações como o título da página, a contagem de comentários e urlId.
A estrutura do objeto Page é a seguinte:

GET /api/v1/pages 
Atualmente você pode apenas buscar todas as páginas (ou uma única página via /by-url-id) associadas à sua conta. Se desejar uma busca mais refinada, entre em contato conosco.



Dica Útil
A API Comment requer um urlId. Você pode chamar primeiro a API Pages, para ver como são os valores de urlId disponíveis para você.
GET /api/v1/pages/by-url-id 
Páginas individuais podem ser recuperadas pelo seu correspondente urlId. Isso pode ser útil para consultar títulos de páginas ou contagens de comentários.



Dica útil
Lembre-se de codificar valores em URI, como o urlId.
PATCH /api/v1/pages/:id 
Esta rota fornece a capacidade de atualizar uma única Page. Os comentários correspondentes serão atualizados.



Nota
Alguns parâmetros no objeto Page são atualizados automaticamente. Estes são os atributos counts e title. Os counts não podem ser atualizados
via a API já que são valores calculados. O title da página pode ser definido via a API, mas seria sobrescrito se o widget de comentários for usado em
uma página com o mesmo urlId e um título de página diferente.
POST /api/v1/pages 
Este endpoint da API fornece a capacidade de criar páginas.
Um caso de uso comum é controle de acesso.
Notas:
- Se você comentou em um thread de comentários, ou chamou a API para criar um
Comment, você já criou um objetoPage! Você pode tentar recuperá-lo via a rotaPage/by-url-id, passando o mesmourlIdpassado para o widget de comentários. - A
Pagestructure contém alguns valores calculados. Atualmente, estes sãocommentCounterootCommentCount. Eles são populados automaticamente e não podem ser definidos pela API. Tentar fazê-lo fará com que a API retorne um erro.



DELETE /api/v1/pages/:id 
Esta rota permite a remoção de uma única página por id.
Observe que interagir com o widget de comentários para uma página com o mesmo urlId simplesmente recriará a Page de forma transparente.



Estrutura de Evento de Webhook Pendente 
Um objeto PendingWebhookEvent representa um evento de webhook enfileirado que está pendente.
Objetos PendingWebhookEvent são criados automaticamente e não podem ser criados manualmente via API. Eles também expiram após um ano.
Eles podem ser excluídos, o que remove a tarefa da fila.
Existem diferentes tipos de evento - verifique eventType (OutboundSyncEventType) e type (OutboundSyncType).
Um caso de uso comum para esta API é implementar monitoramento personalizado. Você pode querer chamar periodicamente o endpoint /count
para consultar a contagem pendente para filtros dados.
A estrutura do objeto PendingWebhookEvent é a seguinte:

GET /api/v1/pending-webhook-events 
Esta rota retorna uma lista de eventos de webhook pendentes no parâmetro pendingWebhookEvents.
Esta API usa paginação, fornecida pelo parâmetro skip. PendingWebhookEvents são retornados em páginas de 100, ordenados por createdAt do mais novo para o mais antigo.



GET /api/v1/pending-webhook-events/count 
Esta rota retorna um objeto contendo o número de eventos de webhook pendentes no parâmetro count.
Você pode filtrar pelos mesmos parâmetros do endpoint /pending-webhook-events



DELETE /api/v1/pending-webhook-events/:id 
Esta rota permite a exclusão de um único PendingWebhookEvent.
Se você precisar excluir em lote, chame a API GET com paginação e então chame esta API sequencialmente.



Estrutura de Usuário SSO 
FastComments fornece uma solução SSO fácil de usar. Atualizar as informações de um usuário com a integração baseada em HMAC é tão simples quanto fazer o usuário carregar a página com um payload atualizado.
No entanto, pode ser desejável gerenciar um usuário fora desse fluxo, para melhorar a consistência da sua aplicação.
A SSO User API fornece uma maneira de fazer CRUD em objetos que chamamos de SSOUsers. Esses objetos são diferentes dos Users regulares e mantidos separados por segurança de tipos.
A estrutura do objeto SSOUser é a seguinte:

Cobrança para Usuários SSO
Usuários SSO são cobrados de forma diferente com base em suas flags de permissão:
- Usuários SSO regulares: Usuários sem permissões de administrador ou moderador são cobrados como usuários SSO regulares
- SSO Admins: Usuários com as flags
isAccountOwnerouisAdminAdminsão cobrados separadamente como SSO Admins (mesma tarifa que administradores regulares do tenant) - SSO Moderators: Usuários com a flag
isCommentModeratorAdminsão cobrados separadamente como SSO Moderators (mesma tarifa que moderadores regulares)
Importante: Para evitar dupla cobrança, o sistema deduplica automaticamente usuários SSO em relação aos usuários e moderadores regulares do tenant pelo endereço de email. Se um usuário SSO tiver o mesmo email que um usuário ou moderador regular do tenant, ele não será cobrado duas vezes.
Controle de Acesso
Usuários podem ser divididos em grupos. É para isso que serve o campo groupIds, e é opcional.
@Menções
Por padrão @mentions usará username para buscar outros usuários SSO quando o caractere @ for digitado. Se displayName for usado, então resultados que correspondam a username serão ignorados quando houver uma correspondência por displayName, e os resultados da busca de @mention usarão displayName.
Assinaturas
Com o FastComments, os usuários podem se inscrever em uma página clicando no ícone de sino no widget de comentários e clicando em Assinar.
Com um usuário regular, nós enviamos emails de notificação com base nas configurações de notificação dele.
Com Usuários SSO, dividimos isso por compatibilidade com versões anteriores. Os usuários só receberão esses emails adicionais de notificação de assinatura se você definir optedInSubscriptionNotifications como true.
Insígnias
Você pode atribuir insígnias a usuários SSO usando a propriedade badgeConfig. Insígnias são indicadores visuais que aparecem ao lado do nome do usuário nos comentários.
badgeIds- Um array de IDs de insígnias para atribuir ao usuário. Estes devem ser IDs de insígnias válidos criados na sua conta FastComments. Limitado a 30 insígnias.override- Se true, substitui todas as insígnias existentes exibidas pelas fornecidas. Se false ou omitido, as insígnias fornecidas serão adicionadas às insígnias existentes.update- Se true, as propriedades de exibição das insígnias serão atualizadas a partir da configuração do tenant sempre que o usuário fizer login.
GET /api/v1/sso-users 
Esta rota retorna Usuários SSO em páginas de 100. A paginação é feita pelo parâmetro skip. Os usuários são ordenados por signUpDate e id.



GET /api/v1/sso-users/by-id/:id 
Esta rota retorna um único usuário SSO pelo seu id.



GET /api/v1/sso-users/by-email/:email 
Esta rota retorna um único usuário SSO pelo seu e-mail.



PATCH /api/v1/sso-users/:id 
Esta rota permite atualizar um único usuário SSO.



POST /api/v1/sso-users 
Esta rota fornece a criação de um único usuário SSO.
Tentar criar dois usuários com o mesmo ID resultará em um erro.

Neste exemplo especificamos groupIds para controle de acesso, mas isso é opcional.


Nota de Integração
Os dados enviados pela API podem ser sobrescritos simplesmente enviando um payload HMAC de SSO User diferente. Por exemplo, se você definir um username via API, mas então enviar um diferente através do fluxo SSO ao carregar a página, nós atualizaremos automaticamente o username deles.
Não atualizaremos parâmetros do usuário nesse fluxo a menos que você os especifique explicitamente ou os defina como null (não undefined).
PUT /api/v1/sso-users/:id 
Esta rota permite atualizar um único usuário SSO.

Neste exemplo especificamos groupIds para controle de acesso, mas isso é opcional.


DELETE /api/v1/sso-users/:id 
Esta rota fornece a remoção de um único usuário SSO pelo seu id.
Observe que recarregar o widget de comentários com um payload para este usuário simplesmente recriará o usuário de forma transparente.
A remoção dos comentários do usuário é possível via o deleteComments query parameter. Note que se isso for true:
- Todos os comentários do usuário serão excluídos ao vivo.
- All child (now orphan) comments will be deleted or anonymized based on each comment's associated page configuration. For example if thread deletion mode is "anonymize", then replies will remain, and the user's comments will be anonymized. This only applies when
commentDeleteModeisRemove(the default value). - O
creditsCostpassa a ser2.
Comentários Anonimizados
Você pode manter os comentários do usuário, mas simplesmente anonimizá-los definindo commentDeleteMode=1.
Se os comentários do usuário forem anonimizados, os seguintes valores são definidos como null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted e isDeletedUser são definidos como true.
Ao renderizar, o widget de comentários usará DELETED_USER_PLACEHOLDER (padrão: "[deleted]") para o nome do usuário e DELETED_CONTENT_PLACEHOLDER para o comentário. Estes podem ser personalizados via a UI de Personalização do Widget.
Exemplos



Estrutura de Assinatura 
Um Subscription object representa uma assinatura para um usuário.
Subscription objects are created when a user clicks the notification bell in the comment widget and clicks "Inscrever-se nesta página".
Subscriptions can also be created via the API.
Ter um objeto Subscription faz com que Notification objects sejam gerados, e emails enviados, quando novos comentários são deixados na raiz da página associada
à qual a Subscription se refere. O envio de emails depende do tipo de usuário. Para usuários comuns isso depende de optedInNotifications. Para usuários SSO isso depende de optedInSubscriptionNotifications. Observe que algumas aplicações podem não ter o conceito de uma página acessível pela web, caso em que basta definir urlId como
o id do item ao qual você está se inscrevendo (mesmo valor para urlId que você passaria para o widget de comentários).
A estrutura para o Subscription object é a seguinte:

GET /api/v1/subscriptions/:id 
Esta rota retorna até 30 objetos Subscription ordenados por createdAt, do mais recente para o mais antigo.
Você pode filtrar por userId. Com SSO, o id do usuário está no formato <tenant id>:<user id>.



POST /api/v1/subscriptions 
Este endpoint da API fornece a capacidade de criar uma Subscription. Note que um usuário pode ter apenas uma assinatura por página, pois mais de uma seria redundante, e tentar
criar mais de uma assinatura para o mesmo usuário na mesma página resultará em um erro.
Ao criar uma assinatura, objetos Notification serão criados quando um novo comentário for deixado na raiz do urlId assinado (quando o parentId do comentário for null).



DELETE /api/v1/subscriptions/:id 
Esta rota exclui um único objeto Subscription pelo id.



Estrutura de Uso Diário do Locatário 
Um objeto TenantDailyUsage representa o uso para um tenant em um determinado dia. Se não houve atividade para um tenant em um determinado
dia, esse dia não terá um objeto TenantDailyUsage.
O objeto TenantDailyUsage é NÃO em tempo real e pode estar com atraso de alguns minutos em relação ao uso real.
A estrutura do objeto TenantDailyUsage é a seguinte:

GET /api/v1/tenant-daily-usage 
Esta rota permite pesquisar o uso de um tenant por ano, mês e dia. Podem ser retornados até 365 objetos, e o custo é de 1 crédito de API para cada 10 objetos.
Os objetos de resposta são ordenados pela data em que foram criados (do mais antigo para o mais recente).



Estrutura de Locatário 
O Tenant define um cliente do FastComments.com. Eles podem ser criados via API por tenants com acesso a white labeling. Tenants white-labeled não podem criar outros tenants white-labeled (apenas um nível de aninhamento é permitido).
A estrutura para o objeto Tenant é a seguinte:

GET /api/v1/tenants/:id 
Esta rota retorna um único Tenant por id.



GET /api/v1/tenants 
Esta API retorna tenants que são gerenciados pelo seu tenant.
A paginação é fornecida pelo parâmetro de consulta skip. Os tenants são retornados em páginas de 100, ordenados por signUpDate, e id.
O custo é baseado no número de tenants retornados, custando 1 credit per 10 tenants retornados.

Você pode definir parâmetros meta nos objetos Tenant e consultar tenants correspondentes. Por exemplo, para a chave someKey e o valor meta some-value, podemos
construir um objeto JSON com esse par chave/valor e então codificá-lo em URI como um parâmetro de consulta para filtrar:



POST /api/v1/tenants 
Esta rota fornece a capacidade de adicionar um único Tenant.
Criar um Tenant tem as seguintes restrições:
- Um
nameé obrigatório. domainConfigurationé obrigatório.- Os seguintes valores não podem ser fornecidos ao criar um
Tenant:hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmount
- O
signUpDatenão pode estar no futuro. - O
namenão pode ter mais do que200 characters. - O
emailnão pode ter mais do que300 characters. - O
emaildeve ser único entre todos os tenants do FastComments.com. - Você não pode criar tenants se o tenant pai não tiver um
TenantPackageválido definido.- Se o seu tenant foi criado via FastComments.com, isso não deve ser um problema.
- Você não pode criar mais tenants do que o definido em
maxWhiteLabeledTenantsno seu pacote. - Você deve especificar o parâmetro de query
tenantId, que é o id do seuparent tenantcom white labeling habilitado.
Podemos criar um Tenant com apenas alguns parâmetros:



PATCH /api/v1/tenants/:id 
Este endpoint de API fornece a capacidade de atualizar um Tenant pelo id.
A atualização de um Tenant tem as seguintes restrições:
- Os seguintes valores não podem ser atualizados:
hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmountmanagedByTenantId
- O
signUpDatenão pode estar no futuro. - O
namenão pode ter mais de200 characters. - O
emailnão pode ter mais de300 characters. - O
emaildeve ser único entre todos os tenants do FastComments.com. - Ao definir
billingInfoValidcomotrue,billingInfodeve ser fornecido na mesma requisição. - Você não pode atualizar o
packageIdassociado ao seu próprio tenant. - Você não pode atualizar o
paymentFrequencyassociado ao seu próprio tenant.



DELETE /api/v1/tenants/:id 
Esta rota permite a remoção de um Tenant e de todos os dados associados (usuários, comentários, etc.) por id.
As seguintes restrições existem em relação à remoção de tenants:
- O tenant deve ser seu, ou um tenant white-labeled que você gerencia.
- O parâmetro de query
suredeve estar definido comotrue.



Estrutura de Pacote do Locatário 
The TenantPackage defines package information available to a Tenant. A tenant may have many packages available, but only
one in use at a given time.
A Tenant cannot be used for any products until its packageId points to a valid TenantPackage.
There are two types of TenantPackage objects:
- Fixed-pricing packages - where
hasFlexPricingis false. - Flexible pricing - where
hasFlexPricingis true.
In both case limits are defined on the account using the package, however with Flex the tenant is charged a base price plus
what they used, defined by the flex* parameters.
A tenant may have multiple tenant packages and have the ability to change the package themselves from the Página de Informações de Cobrança.
If you will be handling billing for tenants yourselves, you will still need to define a package for each tenant to define their limits. Simply set billingHandledExternally to true on the Tenant and they
will not be able to change their billing information, or active package, themselves.
You may not create packages with higher limits than the parent tenant.
The structure for the TenantPackage object is as follows:

GET /api/v1/tenant-packages/:id 
Esta rota retorna um único Tenant Package pelo id.



GET /api/v1/tenant-packages 
Esta API usa paginação, fornecida pelo parâmetro de query skip. TenantPackages são retornados em páginas de 100, ordenados por createdAt e id.
O custo é baseado no número de tenant packages retornados, custando 1 credit per 10 tenant packages retornados.



POST /api/v1/tenant-packages 
Esta rota fornece a capacidade de adicionar um único TenantPackage.
Criar um TenantPackage possui as seguintes restrições:
- Os seguintes parâmetros são obrigatórios:
nametenantIdmonthlyCostUSD- Pode ser nulo.yearlyCostUSD- Pode ser nulo.maxMonthlyPageLoadsmaxMonthlyAPICreditsmaxMonthlyCommentsmaxConcurrentUsersmaxTenantUsersmaxSSOUsersmaxModeratorsmaxDomainshasDebrandingforWhoTextfeatureTaglineshasFlexPricing- Se verdadeiro, então todos os parâmetrosflex*são obrigatórios.
- O
namenão pode ser maior que50 characters. - Cada item de
forWhoTextnão pode ser maior que200 characters. - Cada item de
featureTaglinesnão pode ser maior que100 characters. - O
TenantPackagedeve ser "menor" que o tenant pai. Por exemplo, todos os parâmetrosmax*devem ter valores menores que os do tenant pai. - Um tenant com white labeling pode ter no máximo cinco pacotes.
- Apenas tenants com acesso a white labeling podem criar um
TenantPackage. - Você não pode adicionar pacotes ao seu próprio tenant. :)
Podemos criar um TenantPackage da seguinte forma:



PATCH /api/v1/tenant-packages/:id 
Este endpoint da API fornece a capacidade de atualizar um TenantPackage por id.
A atualização de um TenantPackage possui as seguintes restrições:
- Se você estiver definindo
hasFlexPricingcomo true, então todos os parâmetrosflex*são obrigatórios nessa mesma requisição. - O
namenão pode ser maior que50 characters. - Cada item
forWhoTextnão pode ser maior que200 characters. - Cada item
featureTaglinesnão pode ser maior que100 characters. - O
TenantPackagedeve ser "menor" que o tenant pai. Por exemplo, todos os parâmetrosmax*devem ter valores menores que o tenant pai. - Você não pode alterar o
tenantIdassociado com umTenantPackage.



DELETE /api/v1/tenant-packages/:id 
Esta rota permite a remoção de um TenantPackage por id.
Você não pode remover um TenantPackage que esteja em uso (o packageId do Tenant aponta para o pacote). Atualize o Tenant primeiro.



Estrutura de Usuário do Locatário 
O TenantUser define um User que é gerenciado por um tenant específico. A conta deles está sob completo controle do tenant ao qual estão associados, e sua conta pode ser atualizada ou excluída via a UI ou API.
Os usuários do tenant podem ser administradores com todas as permissões e acesso ao Tenant, ou podem ser limitados a permissões específicas para moderar comentários, acessar chaves de API, etc.
A estrutura para o objeto TenantUser é a seguinte:

GET /api/v1/tenant-users/:id 
Esta rota retorna um único TenantUser por id.



GET /api/v1/tenant-users 
Esta API usa paginação, fornecida pelo parâmetro de consulta skip. TenantUsers são retornados em páginas de 100, ordenados por signUpDate, username e id.
O custo é baseado no número de TenantUsers retornados, custando 1 credit per 10 TenantUsers retornados.



POST /api/v1/tenant-users 
Esta rota fornece a capacidade de adicionar um único TenantUser.
Criar um TenantUser tem as seguintes restrições:
- Um
usernameé obrigatório. - Um
emailé obrigatório. - O
signUpDatenão pode estar no futuro. - O
localedeve estar na lista de Locales Suportados. - O
usernamedeve ser único em todo o FastComments.com. Se isso for um problema, sugerimos usar SSO. - O
emaildeve ser único em todo o FastComments.com. Se isso for um problema, sugerimos usar SSO. - Você não pode criar mais tenant users do que definido em
maxTenantUsersno seu pacote.
Podemos criar um TenantUser da seguinte forma



POST /api/v1/tenant-users/:id/send-login-link 
Esta rota fornece a capacidade de enviar um link de login para um único TenantUser.
Útil ao criar usuários em lote e não precisar instruí-los sobre como fazer login no FastComments.com. Isso simplesmente enviará um "link mágico" para login que expira após 30 days.
As seguintes restrições se aplicam para enviar um link de login a um TenantUser:
- O
TenantUserjá deve existir. - Você deve ter acesso para gerenciar o
Tenantao qual oTenantUserpertence.
Podemos enviar um link de login para um TenantUser da seguinte maneira:

Isso enviará um e-mail como Bob at TenantName is inviting you to be a moderator...


PATCH /api/v1/tenant-users/:id 
Esta rota permite atualizar um único TenantUser.
A atualização de um TenantUser tem as seguintes restrições:
- O
signUpDatenão pode estar no futuro. - O
localedeve constar na lista de Locales Suportados. - O
usernamedeve ser único em todo o FastComments.com. Se isso for um problema, sugerimos usar SSO. - O
emaildeve ser único em todo o FastComments.com. Se isso for um problema, sugerimos usar SSO. - Você não pode atualizar o
tenantIdde um usuário.
Podemos criar um TenantUser da seguinte forma



DELETE /api/v1/tenant-users/:id 
Esta rota fornece a remoção de um TenantUser por id.
A exclusão dos comentários do usuário é possível através do parâmetro de query deleteComments. Observe que se isso for verdadeiro:
- Todos os comentários do usuário serão excluídos imediatamente.
- Todos os child (agora órfãos) comentários serão excluídos ou anonimizados com base na configuração de página associada a cada comentário. Por exemplo se o modo de exclusão de thread for "anonymize", então as respostas permanecerão, e os comentários do usuário serão anonimizados. Isso se aplica somente quando
commentDeleteModeéRemove(o valor padrão). - O
creditsCostpassa a ser2.
Comentários anonimizados
Você pode manter os comentários do usuário, mas simplesmente anonimizá-los definindo commentDeleteMode=1.
Se os comentários do usuário forem anonimizados, então os seguintes valores serão definidos como null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted e isDeletedUser são definidos como true.
Ao renderizar, o widget de comentários usará DELETED_USER_PLACEHOLDER (padrão: "[deleted]") para o nome do usuário e DELETED_CONTENT_PLACEHOLDER para o comentário. Estes podem ser personalizados através da UI de Personalização do Widget.
Exemplos



Estrutura de Usuário 
User é um objeto que representa o denominador mais comum entre todos os usuários.
Lembre-se que na FastComments temos diversos casos de uso diferentes para usuários:
- Secure SSO
- Simple SSO
- Tenant Users (For example: Administrators)
- Commenters
Esta API é para Commenters e usuários criados via Simple SSO. Basicamente, qualquer usuário criado através do seu site pode ser acessado por esta API. Tenant Users também podem ser obtidos desta forma, mas você obterá mais informações ao interagir com a API /tenant-users/.
Para Secure SSO por favor use a API /sso-users/.
Você não pode atualizar esses tipos de usuários. Eles criaram sua conta através do seu site, então fornecemos um acesso básico somente leitura, mas você não pode fazer alterações. Se você quiser ter esse tipo de fluxo - você precisa configurar Secure SSO.
A estrutura do objeto User é a seguinte:

GET /api/v1/users/:id 
Esta rota retorna um único User por id.



Estrutura de Voto 
Um objeto Vote representa um voto deixado por um usuário.
A relação entre comentários e Vote é definida via commentId.
A estrutura para o objeto Vote é a seguinte:

GET /api/v1/votes 
Os votos devem ser buscados por urlId.
Tipos de Votos
Existem três tipos de votos:
- Authenticated Votes, que são aplicados ao comentário correspondente. Você pode criar esses via esta API.
- Authenticated Votes, que estão pendentes de verificação e, portanto, ainda não foram aplicados ao comentário. Esses são criados quando um usuário usa o mecanismo login para votar do FastComments.com.
- Anonymous Votes, que são aplicados ao comentário correspondente. Eles são criados juntamente com o comentário anônimo.
Estes são retornados em listas separadas na API para reduzir confusão.



Observações sobre Votos Anônimos
Observe que votos anônimos criados via esta API aparecerão na lista appliedAuthorizedVotes. Eles são considerados autorizados, uma vez que foram criados através da API com uma API key.
A estrutura appliedAnonymousVotes é para votos criados sem um email, API key, etc.
GET /api/v1/votes/for-user 
Permite buscar votos deixados por um usuário em um determinado urlId. Recebe um userId que pode ser qualquer usuário do FastComments.com ou SSO User.
Isto é útil se você quiser mostrar se um usuário votou em um comentário. Ao buscar comentários, simplesmente chame esta API ao mesmo tempo para o usuário com o mesmo urlId.
Se você estiver usando votação anônima, então deverá passar anonUserId em vez disso.


Observe que votos anônimos aparecerão na lista appliedAuthorizedVotes. Eles são considerados autorizados pois foram criados via a API com uma API key.


POST /api/v1/votes 
Esta rota fornece a habilidade de adicionar um único Vote autorizado. Votes podem ser up (+1) ou down (-1).




Criando Votos Anônimos
Votos anônimos podem ser criados definindo anonUserId nos query params em vez de userId.
Este id não precisa corresponder a um objeto de usuário em nenhum lugar (daí anônimo). É simplesmente um identificador para a sessão, para que você possa buscar votos novamente na mesma sessão, para verificar se um comentário foi votado.
Se você não tiver algo como "sessões anônimas" como a FastComments tem - você pode simplesmente definir isso para um ID aleatório, como um UUID (embora apreciemos identificadores menores para economizar espaço).
Outras Notas
- Esta API obedece às configurações em nível de tenant. Por exemplo, se você desativar a votação para uma determinada página, e tentar criar um voto via API, isso falhará com o código de erro
voting-disabled. - Esta API está ativa por padrão.
- Esta API atualizará os
votesdoCommentcorrespondente.
DELETE /api/v1/votes/:id 
Esta rota fornece a capacidade de deletar um único Vote.



Notas:
- Esta API obedece às configurações a nível de tenant. Por exemplo, se você desabilitar a votação para uma determinada página, e tentar criar um vote via a API, ela falhará com o código de erro
voting-disabled. - Esta API está ativa por padrão.
- Esta API irá atualizar os
votesdoCommentcorrespondente.
Estrutura de Configuração de Domínio 
Um objeto DomainConfig representa a configuração para um domínio de um locatário.
A estrutura para o objeto DomainConfig é a seguinte:


Para Autenticação
A Configuração de Domínio é usada para determinar quais sites podem hospedar o widget FastComments para sua conta. Esta é uma forma básica de autenticação, o que significa que adicionar ou remover quaisquer Configurações de Domínio pode impactar a disponibilidade da sua instalação do FastComments em produção.
Não remova ou atualize a propriedade domain de um Domain Config para um domínio que esteja atualmente em uso, a menos que a intenção seja desativar esse domínio.
Isso tem o mesmo comportamento que remover um domínio de /auth/my-account/configure-domains.
Observe também que remover um domínio da interface My Domains removerá qualquer configuração correspondente para esse domínio que possa ter sido adicionada por meio desta interface.
Para Personalização de E-mail
O link de cancelamento no rodapé do e-mail, e o recurso de cancelamento com um clique oferecido por muitos clientes de e-mail, podem ser configurados via esta API definindo footerUnsubscribeURL e emailHeaders, respectivamente.
Para DKIM
Após definir seus registros DKIM no DNS, atualize simplesmente o DomainConfig com sua configuração DKIM usando a estrutura definida.
GET /api/v1/domain-configs 
Esta API fornece a capacidade de recuperar todos os objetos DomainConfig de um tenant.



GET /api/v1/domain-configs/:domain 
DomainConfigs individuais podem ser recuperados pelo seu domain correspondente.



POST /api/v1/domain-configs 
Este endpoint da API fornece a capacidade de criar configurações de domínio.
Adicionar uma configuração para um domínio autoriza esse domínio para a conta FastComments.
Casos de uso comuns desta API são a configuração inicial, se muitos domínios precisarem ser adicionados, ou configuração personalizada para envio de e-mails.



PATCH /api/v1/domain-configs/:domain 
Este endpoint da API permite atualizar a configuração de um domínio informando apenas o domínio e o atributo a ser atualizado.



PUT /api/v1/domain-configs/:domain 
Este endpoint da API permite substituir uma configuração de domínio.



DELETE /api/v1/domain-configs/:domain 
Esta rota fornece a remoção de um único DomainConfig por id.
- Observação: Remover um
DomainConfigirá desautorizar esse domínio de usar o FastComments. - Observação: Re-adicionar um domínio pela interface do usuário (UI) recriará o objeto (com apenas
domainpreenchido).



Estrutura de Configuração de Pergunta 
FastComments fornece uma maneira de construir perguntas e agregar seus resultados. Um exemplo de pergunta (doravante chamado QuestionConfig) pode ser uma avaliação por estrelas, um controle deslizante ou uma pergunta NPS (determinada via type).
Os dados das perguntas podem ser agregados individualmente, em conjunto, ao longo do tempo, no geral, por página, e assim por diante.
O framework possui todas as capacidades necessárias para construir widgets no lado do cliente (com seu servidor na frente desta API), painéis de administração e ferramentas de relatório.
First, we have to define a QuestionConfig. The structure is as follows:

GET /api/v1/question-configs 
Esta rota retorna até 100 objetos QuestionConfig por vez, paginados. O custo é 1 por cada 100 objetos. Eles são
ordenados pelo texto da pergunta em ordem crescente (question field).



GET /api/v1/question-configs/:id 
Esta rota retorna um único QuestionConfig pelo seu id.



POST /api/v1/question-configs 
Este endpoint da API permite criar um QuestionConfig.



PATCH /api/v1/question-configs/:id 
Esta rota permite atualizar um único QuestionConfig.
A estrutura a seguir representa todos os valores que podem ser alterados:




DELETE /api/v1/question-configs/:id 
Esta rota fornece a remoção de um QuestionConfig por id.
Isso irá excluir todos os resultados correspondentes das perguntas (mas não os comentários). Isso faz parte do alto custo em créditos.



Estrutura de Resultado de Pergunta 
Para salvar resultados de perguntas, você cria um QuestionResult. Você pode então agregar resultados de perguntas, e também vinculá-los a comentários para fins de relatório.

GET /api/v1/question-results 
Esta rota retorna até 1000 objetos QuestionResults por vez, paginados. O custo é 1 a cada 100 objetos. Eles são ordenados por createdAt, em ordem crescente. Você pode filtrar por vários parâmetros.



GET /api/v1/question-results/:id 
Esta rota retorna um único QuestionResult pelo seu id.



POST /api/v1/question-results 
Este endpoint da API permite criar um QuestionResult.



PATCH /api/v1/question-results/:id 
Esta rota permite atualizar um único QuestionResult.
A estrutura a seguir representa todos os valores que podem ser alterados:




DELETE /api/v1/question-results/:id 
Esta rota realiza a remoção de um QuestionResult pelo id.



GET /api/v1/question-results-aggregate 
É aqui que a agregação dos resultados acontece.
A estrutura de resposta da agregação é a seguinte:

Aqui estão os parâmetros de consulta disponíveis para agregação:

Aqui está um exemplo de requisição:

Exemplo de resposta:


Observações de Desempenho
- No caso de uma falha de cache, as agregações geralmente levam cinco segundos por milhão de resultados.
- Caso contrário, as requisições têm tempo constante.
Observações sobre Cache e Custo
- Quando
forceRecalculateé especificado, o custo é sempre10, em vez do normal2. - Se o cache expirar e os dados forem recalculados, o custo ainda será um constante
2seforceRecalculatenão estiver especificado. O cache expira com base no tamanho do conjunto de dados agregado (pode variar entre 30 segundos e 5 minutos). - Isto é para incentivar o uso do cache.
GET /api/v1/question-results-aggregate/combine/comments 
Este é o ponto onde ocorre a combinação de resultados com comentários. Útil para criar um gráfico de "comentários positivos e negativos recentes" para um produto, por exemplo.
Você pode buscar por um intervalo de valores (inclusivo), por uma ou mais perguntas, e por uma data inicial (inclusiva).
A estrutura da resposta é a seguinte:

Aqui estão os parâmetros de query disponíveis para agregação:

Aqui está um exemplo de requisição:

Exemplo de resposta:


Notas sobre Cache e Custo
- Quando
forceRecalculateé especificado, o custo é sempre10, em vez do normal2. - Se o cache expirar e os dados forem recalculados, o custo ainda é constante
2seforceRecalculatenão for especificado. - Isso é para incentivar o uso do cache.
Estrutura de Insígnia do Usuário 
UserBadge é um objeto que representa um distintivo atribuído a um usuário no sistema FastComments.
Distintivos podem ser atribuídos a usuários automaticamente com base em sua atividade (como contagem de comentários, tempo de resposta, status de veterano) ou manualmente por administradores do site.
A estrutura do objeto UserBadge é a seguinte:

GET /api/v1/user-badges 
Este endpoint permite recuperar crachás de usuário com base em vários critérios.
Example Request:
Run 
You can add various query parameters to filter the results:
userId- Obter os crachás de um usuário específicobadgeId- Obter instâncias de um crachá específicotype- Filtrar por tipo de crachá (0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, etc. See UserBadge structure for full list)displayedOnComments- Filtrar se o crachá é exibido nos comentários (true/false)limit- Número máximo de crachás a retornar (padrão 30, máximo 200)skip- Número de crachás a pular (para paginação)
Example Response:

Possible Error Responses:


GET /api/v1/user-badges/:id 
Este endpoint permite recuperar um distintivo de usuário específico pelo seu ID único.
Exemplo de Requisição:
Run 
Exemplo de Resposta:

Possíveis Respostas de Erro:


POST /api/v1/user-badges 
Este endpoint permite criar uma nova atribuição de distintivo (badge) para um usuário.
Exemplo de requisição:
Run 
O corpo da requisição deve conter os seguintes parâmetros:
userId(required) - The ID of the user to assign the badge tobadgeId(required) - The ID of the badge to assigndisplayedOnComments(optional) - Whether the badge should be displayed on the user's comments (defaults to true)
Notas importantes:
- O distintivo (badge) deve existir e estar habilitado no catálogo de badges do seu tenant
- Você só pode atribuir badges a usuários que pertencem ao seu tenant ou que tenham comentado em seu site
Exemplo de resposta:

Possíveis respostas de erro:





PUT /api/v1/user-badges/:id 
Este endpoint permite que você atualize uma atribuição de distintivo de usuário.
Atualmente, a única propriedade que pode ser atualizada é displayedOnComments, que controla se o distintivo é exibido nos comentários do usuário.
Exemplo de Requisição:
Run 
Exemplo de Resposta:

Possíveis respostas de erro:



DELETE /api/v1/user-badges/:id 
Este endpoint permite excluir uma atribuição de distintivo de usuário.
Exemplo de requisição:
Run 
Exemplo de resposta:

Possíveis respostas de erro:



Estrutura de Progresso de Insígnia do Usuário 
UserBadgeProgress é um objeto que representa o progresso de um usuário na conquista de várias insígnias no sistema FastComments.
Esse acompanhamento ajuda a determinar quando os usuários devem receber insígnias automáticas com base em sua atividade e participação na sua comunidade.
A estrutura do objeto UserBadgeProgress é a seguinte:

GET /api/v1/user-badge-progress 
Este endpoint permite buscar registros de progresso de distintivos de usuários com base em vários critérios.
Exemplo de requisição:
Run 
Você pode adicionar vários parâmetros de consulta para filtrar os resultados:
userId- Obter progresso de um usuário específicolimit- Número máximo de registros a retornar (padrão 30, máximo 200)skip- Número de registros a pular (para paginação)
Exemplo de resposta:

Possíveis respostas de erro:


GET /api/v1/user-badge-progress/:id 
Este endpoint permite que você recupere um registro específico de progresso de badge de usuário pelo seu ID único.
Exemplo de requisição:
Run 
Exemplo de resposta:

Possíveis respostas de erro:


GET /api/v1/user-badge-progress/user/:userId 
Este endpoint permite que você busque o registro de progresso de badge de um usuário pelo seu user ID.
Exemplo de Requisição:
Run 
Exemplo de Resposta:

Possíveis respostas de erro:



Conclusão
Esperamos que você tenha achado nossa documentação da API completa e fácil de entender. Se encontrar alguma lacuna, avise-nos abaixo.