Comentarios, moderación y feeds sociales a través de una sola API REST y SDKs para más de 10 lenguajes. Consulta, publica y modera desde tu backend, y luego transmite cada nueva actividad a todos los lectores en tiempo real mediante WebSockets.
FastComments es más que comentarios. Crea debates, moderación y feeds sociales sobre la misma API y el mismo conjunto de SDKs.
Comentarios en hilo y chat en directo. Consulta, publica, vota, fija, responde y busca, con SSO y actualizaciones en tiempo real integradas.
Una superficie de moderación dedicada con más de 40 endpoints. Aprueba, marca, bloquea, banea, cierra y audita, con filtrado de spam automático de fondo.
Crea feeds de actividad y sociales con publicaciones, contenido multimedia, reacciones y seguidores, y luego envía nuevas publicaciones a cada cliente en directo.
cURL y SDKs tipados para Node, Python, PHP, Ruby, Go, Java, Rust, Swift y C++. Más de 200 endpoints cubren comentarios, votos, páginas, usuarios SSO, publicaciones de feed, moderación y notificaciones, todo tras una única clave de API.
npm install fastcomments-sdkimport { 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'
pip install fastcommentsimport 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)
composer 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;
}
gem install fastcommentsrequire '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
go get github.com/fastcomments/fastcomments-gopackage 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();
Abre una sola conexión y recibe cada nuevo comentario, edición, voto y actualización de presencia en el momento en que ocurre. No se pierde ningún evento: al reconectar se vuelve a obtener el event log para reproducir todo lo enviado mientras el cliente estaba desconectado. Los suscriptores WebSocket nativos están disponibles para Node, React Native, Java, Swift y C++. El resto de lenguajes se mantiene en tiempo real consultando el event log.
npm install fastcomments-sdkimport { 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();
npm install fastcomments-react-native-sdkimport 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();
pip install fastcommentsimport 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'
Olvídate de crear y mantener tu propia interfaz de comentarios. Nuestros SDKs dedicados y mantenidos para React Native, Android e iOS incluyen componentes de interfaz nativos para comentarios en hilo, chat en directo y feeds. Añade una vista, pasa una configuración y listo.
npm: fastcomments-react-native-sdk
Componentes nativos, sin webview. Añade FastCommentsLiveCommenting, FastCommentsLiveChat o FastCommentsFeed y pasa una configuración.
Ver la demo en directocom.fastcomments:sdk
Componentes de interfaz nativos de Android. Añade FastCommentsView a tu layout para comentarios en hilo, votación, notificaciones y feeds. Android 8.0+.
Ver en GitHubSwift Package: FastCommentsUI
Una biblioteca SwiftUI nativa para comentarios en hilo, feeds sociales y chat en directo. iOS 16+ y macOS 14+.
Ver en GitHubUna clave de API, una URL base. Todo lo que hace el panel, tu código también puede hacerlo.
Clientes tipados para Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ y más, para que construyas en tu stack en lugar del nuestro.
Los nuevos comentarios llegan a cada lector en el momento en que se publican, sin recargas y sin polling. Si un lector se reconecta, los eventos perdidos se reproducen desde el registro.
El inicio de sesión único, la moderación de comentarios y el filtrado de spam están integrados, así que las partes difíciles ya están resueltas antes de escribir una sola línea.
Nos encargamos del almacenamiento y de la infraestructura en tiempo real en una red global. Tú llamas a la API y publicas.
Una sola API y un conjunto de SDKs detrás de hilos de comentarios, chat y actividad en directo en aplicaciones web, móviles y de servidor.
Transmite mensajes a todos los presentes en la sala en tiempo real, con recuento de presencia y actividad de escritura.
Añade secciones de comentarios anidados y votables a artículos, productos y publicaciones con unas pocas llamadas a la API.
Publica en un feed y envía nuevos elementos y reacciones a los clientes conectados a medida que llegan.
Recopila preguntas, respuestas, votos y resultados de encuestas, y luego clasifícalos y muéstralos en directo.
Inicia una prueba gratuita y obtén tu ID de tenant y tu clave de API desde el panel.
Añade el SDK de tu lenguaje, o llama directamente a la API REST con cURL y tu cabecera x-api-key.
Carga comentarios, publica desde tu backend y suscríbete a los cambios para transmitir actualizaciones a cada lector.
FastComments funciona en múltiples regiones sobre nuestra propia infraestructura. Las escrituras se replican entre regiones, los nodos conmutan por error de forma automática y los lectores se atienden desde la ubicación más cercana a ellos.
Las escrituras se aceptan en más de una región y se replican entre ellas, así que no hay un único punto de fallo.
Los comentarios y el contenido multimedia se sirven desde nuestro propio CDN y DNS globales, entregados desde la ubicación más cercana a tus usuarios. Sin CDN de terceros.
Los nodos redundantes conmutan por error por sí solos, de modo que el tráfico sigue fluyendo durante una interrupción. Respaldado por un 99.99% de tiempo de actividad.
Funciona en EE. UU. o en la UE. La región de la UE en eu.fastcomments.com mantiene los datos dentro de la región por cumplimiento normativo.
Miles de clientes satisfechos confían en nosotros por nuestro excepcional servicio, confiabilidad y soluciones innovadoras. ¡Únase a nuestra creciente comunidad y experimente la diferencia hoy mismo!
Empezar
No. El widget es opcional. Puedes construir toda tu experiencia de comentarios sobre la API REST y los SDKs y renderizarlo todo tú mismo.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ y Nim, además de un SDK de React Native para móvil. Cualquier lenguaje también puede llamar directamente a la API REST.
Los clientes abren un WebSocket y reciben nuevos comentarios, ediciones, votos y actualizaciones de presencia como eventos, así que no hay recargas ni polling. No se pierde ningún evento: si un cliente se desconecta, vuelve a obtener el event log al reconectar para reproducir todo lo enviado mientras estaba desconectado.
No. FastComments aloja la infraestructura en tiempo real. Tu cliente se suscribe con el SDK y nosotros entregamos los eventos.
Consultan el endpoint del event log, que devuelve cada cambio desde una marca de tiempo. Los SDKs de Node, React Native, Java, Swift y C++ incluyen en cambio un suscriptor WebSocket nativo.
Para los comentarios en concreto, FastComments precalcula la paginación en cada escritura para lograr tiempos de carga óptimos, de modo que incluso los hilos muy grandes se paginan rápido.
Sí. Inicia una prueba gratuita con acceso completo a la API y los SDKs, sin necesidad de tarjeta de crédito. Tras la prueba, los planes de pago escalan con tu tráfico.
La referencia completa de la API REST y los SDKs está en docs.fastcomments.com, donde se documenta cada endpoint, parámetro y respuesta.
Sí. FastComments ofrece una región de la UE en eu.fastcomments.com, y los SDKs admiten el enrutamiento hacia ella.
Inicia una prueba gratuita, consigue tu clave de API y añade debates en directo a tu aplicación hoy mismo.