A API de comentários para discussões ao vivo

Comentários, moderação e feeds sociais através de uma única API REST e SDKs para mais de 10 linguagens. Busque, publique e modere pelo seu backend e, em seguida, transmita cada nova atividade para todos os leitores em tempo real via WebSockets.

Uma plataforma, três APIs

O FastComments é muito mais do que comentários. Crie discussões, moderação e feeds sociais sobre o mesmo conjunto de API e SDKs.

API de Comentários

Comentários encadeados e chat ao vivo. Busque, publique, vote, fixe, responda e pesquise, com SSO e atualizações em tempo real já integrados.

API de Moderação

Uma superfície de moderação dedicada com mais de 40 endpoints. Aprove, sinalize, bloqueie, bana, trave e audite, com filtragem automática de spam por trás.

API de Feed Social

Crie feeds de atividades e sociais com posts, mídia, reações e seguidores e, em seguida, envie novos posts para cada cliente ao vivo.

Chame a API a partir de qualquer stack

cURL e SDKs tipados para Node, Python, PHP, Ruby, Go, Java, Rust, Swift e C++. Mais de 200 endpoints cobrem comentários, votos, páginas, usuários SSO, posts de feed, moderação e notificações, todos protegidos por uma única chave de API.

Instalarnpm install fastcomments-sdk
import { createFastCommentsSDK } from 'fastcomments-sdk/server';

const sdk = createFastCommentsSDK({
  apiKey: 'your-api-key',               // server-side only
  basePath: 'https://fastcomments.com'  // optional (default)
});

// Fetch comments for a page
const { comments } = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

// Post a comment
await sdk.publicApi.createCommentPublic({
  tenantId: 'your-tenant-id',
  broadcastId: crypto.randomUUID(),
  createComment: {
    urlId: 'page-url-id',
    url: 'https://example.com/post',
    comment: 'Hello from the API!',
    commenterName: 'Alice'
  }
});
# Fetch comments for a page
curl -s 'https://fastcomments.com/api/v1/comments?tenantId=your-tenant-id&urlId=page-url-id' \
  -H 'x-api-key: YOUR_API_KEY'
Instalarpip install fastcomments
import client
from client.api.public_api import GetCommentsPublicOptions

configuration = client.Configuration(host="https://fastcomments.com")
with client.ApiClient(configuration) as api_client:
    api = client.PublicApi(api_client)
    response = api.get_comments_public(
        "your-tenant-id",
        "page-url-id",
        GetCommentsPublicOptions(page=0, limit=30),
    )
    for comment in response.comments:
        print(comment.commenter_name, comment.comment)
Instalarcomposer require fastcomments/fastcomments-php
<?php
require_once(__DIR__ . '/vendor/autoload.php');

$api = new FastComments\Client\Api\PublicApi(new GuzzleHttp\Client());

$result = $api->getCommentsPublic('your-tenant-id', 'page-url-id', [
    'page'  => 0,
    'limit' => 30,
]);

foreach ($result->getComments() as $comment) {
    echo $comment->getCommenterName() . ': ' . $comment->getComment() . PHP_EOL;
}
Instalargem install fastcomments
require 'fastcomments-client'

api = FastCommentsClient::PublicApi.new
result = api.get_comments_public('your-tenant-id', 'page-url-id', { page: 0, limit: 30 })

result.comments.each do |comment|
  puts "#{comment.commenter_name}: #{comment.comment}"
end
Instalargo get github.com/fastcomments/fastcomments-go
package main

import (
	"context"
	"fmt"
	openapiclient "github.com/fastcomments/fastcomments-go/client"
)

func main() {
	client := openapiclient.NewAPIClient(openapiclient.NewConfiguration())

	resp, _, err := client.PublicAPI.
		GetCommentsPublic(context.Background(), "your-tenant-id").
		UrlId("page-url-id").Page(0).Limit(30).Execute()
	if err != nil {
		panic(err)
	}
	for _, c := range resp.Comments {
		fmt.Printf("%s: %s\n", c.GetCommenterName(), c.GetComment())
	}
}
import com.fastcomments.invoker.ApiClient;
import com.fastcomments.invoker.Configuration;
import com.fastcomments.api.PublicApi;

ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://fastcomments.com");

PublicApi api = new PublicApi(client);
var result = api.getCommentsPublic("your-tenant-id", "page-url-id")
                .page(0)
                .limit(30)
                .execute();
System.out.println(result.getComments());
use fastcomments_sdk::client::apis::configuration::Configuration;
use fastcomments_sdk::client::apis::public_api::{get_comments_public, GetCommentsPublicParams};

let config = Configuration::new();
let params = GetCommentsPublicParams {
    tenant_id: "your-tenant-id".to_string(),
    url_id: "page-url-id".to_string(),
    page: Some(0),
    limit: Some(30),
    ..Default::default()
};
let result = get_comments_public(&config, params).await.unwrap();
for comment in result.comments {
    println!("{:?}: {:?}", comment.commenter_name, comment.comment);
}
import FastCommentsSwift

var options = PublicAPI.GetCommentsPublicOptions()
options.page = 0
options.limit = 30

let result = try await PublicAPI.getCommentsPublic(
    tenantId: "your-tenant-id",
    urlId: "page-url-id",
    options: options
)
print(result.comments ?? [])
#include "FastCommentsClient/api/PublicApi.h"
#include "FastCommentsClient/ApiClient.h"
#include "FastCommentsClient/ApiConfiguration.h"

using namespace org::openapitools::client::api;

auto config = std::make_shared<ApiConfiguration>();
config->setBaseUrl(utility::conversions::to_string_t("https://fastcomments.com"));

PublicApi publicApi(std::make_shared<ApiClient>(config));

auto resp = publicApi.getCommentsPublic(
    utility::conversions::to_string_t("your-tenant-id"),
    utility::conversions::to_string_t("page-url-id")
).get();

Assine o feed ao vivo

Abra uma única conexão e receba cada novo comentário, edição, voto e atualização de presença no momento em que acontece. Nenhum evento é perdido: ao reconectar, o event log é buscado novamente para reproduzir tudo o que foi enviado enquanto o cliente estava offline. Os assinantes nativos de WebSocket estão disponíveis para Node, React Native, Java, Swift e C++. Todas as outras linguagens permanecem em tempo real fazendo polling no event log.

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

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

const subscription = subscribeToChanges(
  config,
  'your-tenant-id',   // tenantIdWS
  'page-url-id',      // urlIdWS
  'user-session-id',  // userIdWS (from the getComments response)
  (event) => {
    if (event.type === LiveEventType.new_comment) {
      console.log('New comment:', event.comment?.comment);
    }
    return true;      // event handled
  },
  (isConnected) => console.log(isConnected ? 'connected' : 'disconnected')
);

// later: subscription.close();
Instalarnpm install fastcomments-react-native-sdk
import React, { useState } from 'react';
import { FastCommentsLiveCommenting } from 'fastcomments-react-native-sdk';
import { FastCommentsCommentWidgetConfig } from 'fastcomments-typescript';

export default function Comments() {
  // <FastCommentsLiveCommenting> subscribes to the live feed automatically.
  const [config] = useState<FastCommentsCommentWidgetConfig>({
    tenantId: 'your-tenant-id',
    urlId: 'page-url-id',
    showLiveRightAway: true,
    countAll: true,
  });

  return <FastCommentsLiveCommenting config={config} />;
}
import com.fastcomments.pubsub.LiveEventSubscriber;
import com.fastcomments.pubsub.SubscribeToChangesResult;
import com.fastcomments.core.CommentWidgetConfig;
import com.fastcomments.model.LiveEventType;

CommentWidgetConfig config = new CommentWidgetConfig();
config.tenant = "your-tenant-id";
config.urlId = "page-url-id";

LiveEventSubscriber subscriber = new LiveEventSubscriber();
SubscribeToChangesResult result = subscriber.subscribeToChanges(
    config,
    "your-tenant-id",   // tenantIdWS
    "page-url-id",      // urlId
    "page-url-id",      // urlIdWS
    "my-presence-id",   // userIdWS
    null,               // canSeeCommentsCallback (optional)
    (event) -> {
        if (event.getType() == LiveEventType.NEW_COMMENT) {
            System.out.println("New comment: " + event.getComment().getId());
        }
    }
);
// later: result.close();
import FastCommentsSwift

let config = LiveEventConfig(
    tenantId: "your-tenant-id",
    urlId: "page-url-id",
    urlIdWS: "page-url-id",   // URL-safe id for the WS server
    userIdWS: "my-presence-id"
)

let subscriber = LiveEventSubscriber()
let result = subscriber.subscribeToChanges(config: config) { event in
    if event.type == .newComment, let comment = event.comment {
        print("New comment: \(comment.id ?? "")")
    }
}
// later: result?.close()
#include <fastcomments/live/live_stream.hpp>
#include <iostream>

using namespace fastcomments::live;

LiveStreamConfig cfg;
cfg.wsBaseUrl = "wss://fastcomments.com";   // no trailing slash

LiveStream stream(cfg);
stream.onEvent([](const LiveEvent& ev) {
    if (ev.type == EventType::NewComment) {
        std::cout << "New comment at " << ev.timestamp << std::endl;
    }
});

stream.subscribe("your-tenant-id", "page-url-id", "my-presence-id").wait();
// later: stream.close().wait();
Instalarpip install fastcomments
import time
import client

configuration = client.Configuration(host="https://fastcomments.com")
with client.ApiClient(configuration) as api_client:
    api = client.PublicApi(api_client)
    start_time = int(time.time() * 1000)  # ms epoch
    while True:
        result = api.get_event_log(
            "your-tenant-id", "page-url-id", "my-user-id", start_time
        )
        for event in result.events:
            print("event:", event.data)
            start_time = int(event.created_at.timestamp() * 1000) + 1
        time.sleep(2)
# startTime = epoch millis to replay from; advance it past the last event you saw
curl -s 'https://fastcomments.com/api/v1/event-log/your-tenant-id?urlId=page-url-id&userIdWS=my-user-id&startTime=1720560000000' \
  -H 'x-api-key: YOUR_API_KEY'

SDKs nativos para mobile, prontos para integrar

Deixe de criar e manter sua própria interface de comentários. Nossos SDKs dedicados e mantidos para React Native, Android e iOS trazem componentes de UI nativos para comentários encadeados, chat ao vivo e feeds. Insira uma view, passe uma configuração e pronto.

React Native

npm: fastcomments-react-native-sdk

Componentes nativos, sem webview. Insira FastCommentsLiveCommenting, FastCommentsLiveChat ou FastCommentsFeed e passe uma configuração.

Ver a demonstração ao vivo

Android

com.fastcomments:sdk

Componentes de UI nativos para Android. Adicione FastCommentsView ao seu layout para comentários encadeados, votação, notificações e feeds. Android 8.0+.

Ver no GitHub

iOS

Swift Package: FastCommentsUI

Uma biblioteca SwiftUI nativa para comentários encadeados, feeds sociais e chat ao vivo. iOS 16+ e macOS 14+.

Ver no GitHub

As partes que você teria que construir sozinho

Mais de 200 endpoints REST

Uma chave de API, uma URL base. Tudo o que o painel faz, o seu código também pode fazer.

SDKs para mais de 10 linguagens

Clientes tipados para Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ e mais, para que você construa na sua stack em vez da nossa.

Tempo real via WebSockets

Novos comentários chegam a cada leitor no momento em que são publicados, sem atualizar a página e sem polling. Se um leitor reconecta, os eventos perdidos são reproduzidos a partir do log.

Moderação, SSO e proteção contra spam

Single sign-on, moderação de comentários e filtragem de spam já vêm integrados, então as partes difíceis estão resolvidas antes de você escrever uma linha.

Hospedado e escalado para você

Nós operamos o armazenamento e a infraestrutura de tempo real em uma rede global. Você chama a API e coloca em produção.

O que você pode construir

Um único conjunto de API e SDKs por trás de threads de comentários, chat e atividade ao vivo em aplicativos web, mobile e de servidor.

Salas de chat ao vivo

Transmita mensagens para todos na sala em tempo real, com contagem de presença e atividade de digitação.

Threads de comentários

Adicione seções de comentários aninhadas e votáveis a artigos, produtos e posts com algumas chamadas de API.

Feeds de atividades

Publique em um feed e envie novos itens e reações aos clientes conectados à medida que chegam.

Perguntas e respostas e enquetes

Colete perguntas, respostas, votos e resultados de enquetes e, em seguida, ordene e exiba tudo ao vivo.

No ar em três passos

1

Obtenha sua chave de API

Inicie um teste gratuito e pegue o ID do seu tenant e a chave de API no painel.

2

Instale o SDK

Adicione o SDK da sua linguagem ou chame a API REST diretamente com cURL e seu cabeçalho x-api-key.

3

Busque, publique e vá ao ar

Carregue comentários, publique pelo seu backend e assine as mudanças para transmitir atualizações a cada leitor.

Distribuído globalmente e de alta disponibilidade

O FastComments opera em várias regiões na nossa própria infraestrutura. As escritas replicam entre regiões, os nós fazem failover automaticamente e os leitores são atendidos a partir do local mais próximo deles.

Multi-master, multirregião

As escritas são aceitas em mais de uma região e replicadas entre elas, de modo que não há um único ponto de falha.

Nossa própria rede de edge

Comentários e mídia são servidos a partir da nossa própria CDN e DNS globais, entregues a partir do local mais próximo dos seus usuários. Sem CDN de terceiros.

Failover automático

Nós redundantes fazem failover por conta própria, então o tráfego continua fluindo durante uma indisponibilidade. Com 99.99% de uptime.

Residência regional de dados

Opere nos EUA ou na UE. A região da UE em eu.fastcomments.com mantém os dados na região para fins de conformidade.

Junte-se aos nossos clientes satisfeitos

Milhares de clientes satisfeitos confiam em nós pelo nosso serviço excepcional, confiabilidade e soluções inovadoras. Junte-se à nossa crescente comunidade e experimente a diferença hoje mesmo!

Começar

Perguntas frequentes sobre a API de Comentários

Sou obrigado a usar o widget do FastComments?

Não. O widget é opcional. Você pode construir toda a sua experiência de comentários sobre a API REST e os SDKs e renderizar tudo por conta própria.

Quais linguagens têm um SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ e Nim, além de um SDK React Native para mobile. Qualquer linguagem também pode chamar a API REST diretamente.

Como funciona o tempo real?

Os clientes abrem um WebSocket e recebem novos comentários, edições, votos e atualizações de presença como eventos, sem atualizar a página e sem polling. Nenhum evento é perdido: se um cliente se desconecta, ele busca novamente o event log ao reconectar para reproduzir tudo o que foi enviado enquanto estava offline.

Preciso rodar meu próprio servidor WebSocket?

Não. O FastComments hospeda a infraestrutura de tempo real. Seu cliente se inscreve com o SDK e nós entregamos os eventos.

Como as linguagens sem um assinante nativo permanecem ao vivo?

Elas fazem polling no endpoint do event log, que retorna cada mudança desde um timestamp. Os SDKs de Node, React Native, Java, Swift e C++ incluem, em vez disso, um assinante WebSocket nativo.

Como funciona a paginação?

Para comentários especificamente, o FastComments pré-calcula a paginação a cada escrita para tempos de carregamento ideais, de modo que até mesmo threads muito grandes paginam rapidamente.

Existe um teste gratuito?

Sim. Inicie um teste gratuito com acesso completo à API e aos SDKs, sem necessidade de cartão de crédito. Após o teste, os planos pagos escalam conforme o seu tráfego.

Onde está a documentação da API?

A referência completa da API REST e dos SDKs fica em docs.fastcomments.com, onde cada endpoint, parâmetro e resposta está documentado.

Posso manter os dados na UE?

Sim. O FastComments oferece uma região na UE em eu.fastcomments.com, e os SDKs suportam o roteamento para ela.

Comece a construir em minutos

Inicie um teste gratuito, pegue sua chave de API e adicione discussões ao vivo ao seu aplicativo hoje mesmo.