Commentaires, modération et fils sociaux via une seule API REST et des SDK pour plus de 10 langages. Récupérez, publiez et modérez depuis votre backend, puis diffusez chaque nouvelle activité à tous les lecteurs en temps réel via WebSockets.
FastComments, c'est bien plus que des commentaires. Créez des discussions, de la modération et des fils sociaux sur la même suite d'API et de SDK.
Commentaires en fil de discussion et chat en direct. Récupérez, publiez, votez, épinglez, répondez et recherchez, avec SSO et mises à jour en temps réel intégrés.
Une surface de modération dédiée avec plus de 40 endpoints. Approuvez, signalez, bloquez, bannissez, verrouillez et auditez, le tout appuyé par un filtrage anti-spam automatique.
Créez des fils d'activité et sociaux avec publications, médias, réactions et abonnements, puis diffusez les nouvelles publications à chaque client en direct.
cURL et des SDK typés pour Node, Python, PHP, Ruby, Go, Java, Rust, Swift et C++. Plus de 200 endpoints couvrent les commentaires, votes, pages, utilisateurs SSO, publications de fil, modération et notifications, le tout derrière une seule clé d'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();
Ouvrez une seule connexion et recevez chaque nouveau commentaire, modification, vote et mise à jour de présence dès qu'il se produit. Aucun événement n'est manqué : à la reconnexion, l'event log est récupéré à nouveau pour rejouer tout ce qui a été envoyé pendant que le client était hors ligne. Des abonnés WebSocket natifs sont fournis pour Node, React Native, Java, Swift et C++. Tous les autres langages restent en temps réel en interrogeant l'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'
Évitez de créer et de maintenir votre propre interface de commentaires. Nos SDK dédiés et maintenus pour React Native, Android et iOS fournissent des composants d'interface natifs pour les commentaires en fil, le chat en direct et les fils. Insérez une vue, passez une configuration, et c'est terminé.
npm: fastcomments-react-native-sdk
Composants natifs, sans webview. Insérez FastCommentsLiveCommenting, FastCommentsLiveChat ou FastCommentsFeed et passez une configuration.
Voir la démo en directcom.fastcomments:sdk
Composants d'interface Android natifs. Ajoutez FastCommentsView à votre mise en page pour les commentaires en fil, les votes, les notifications et les fils. Android 8.0+.
Voir sur GitHubSwift Package: FastCommentsUI
Une bibliothèque SwiftUI native pour les commentaires en fil, les fils sociaux et le chat en direct. iOS 16+ et macOS 14+.
Voir sur GitHubUne clé d'API, une URL de base. Tout ce que fait le tableau de bord, votre code peut le faire aussi.
Des clients typés pour Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ et plus encore, pour que vous développiez dans votre stack plutôt que la nôtre.
Les nouveaux commentaires atteignent chaque lecteur dès leur publication, sans rafraîchissement ni interrogation. Si un lecteur se reconnecte, les événements manqués sont rejoués depuis le log.
L'authentification unique, la modération des commentaires et le filtrage anti-spam sont intégrés, de sorte que les parties difficiles sont gérées avant que vous n'écriviez une seule ligne.
Nous gérons le stockage et l'infrastructure temps réel sur un réseau mondial. Vous appelez l'API et vous livrez.
Une seule suite d'API et de SDK derrière les fils de commentaires, le chat et l'activité en direct sur les applications web, mobiles et serveur.
Diffusez les messages à tout le monde dans le salon en temps réel, avec le nombre de présences et l'activité de saisie.
Ajoutez des sections de commentaires imbriquées et votables aux articles, produits et publications en quelques appels d'API.
Publiez dans un fil et diffusez les nouveaux éléments et réactions aux clients connectés à mesure qu'ils arrivent.
Collectez questions, réponses, votes et résultats de sondages, puis classez-les et affichez-les en direct.
Démarrez un essai gratuit et récupérez votre ID de tenant et votre clé d'API depuis le tableau de bord.
Ajoutez le SDK de votre langage, ou appelez directement l'API REST avec cURL et votre en-tête x-api-key.
Chargez les commentaires, publiez depuis votre backend et abonnez-vous aux changements pour diffuser les mises à jour à chaque lecteur.
FastComments fonctionne dans plusieurs régions sur notre propre infrastructure. Les écritures se répliquent entre les régions, les nœuds basculent automatiquement, et les lecteurs sont servis depuis l'emplacement le plus proche d'eux.
Les écritures sont acceptées dans plus d'une région et répliquées entre elles, il n'y a donc aucun point de défaillance unique.
Les commentaires et les médias sont servis depuis notre propre CDN et DNS mondiaux, livrés depuis l'emplacement le plus proche de vos utilisateurs. Aucun CDN tiers.
Les nœuds redondants basculent d'eux-mêmes, de sorte que le trafic continue de circuler pendant une panne. Appuyé par 99.99% de disponibilité.
Fonctionnez aux US ou dans l'EU. La région EU sur eu.fastcomments.com conserve les données dans la région pour la conformité.
Des milliers de clients satisfaits nous font confiance pour notre service exceptionnel, notre fiabilité et nos solutions innovantes. Rejoignez notre communauté en pleine expansion et constatez la différence dès aujourd'hui !
Commencer
Non. Le widget est facultatif. Vous pouvez construire toute votre expérience de commentaires sur l'API REST et les SDK et tout afficher vous-même.
Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ et Nim, plus un SDK React Native pour le mobile. Tout langage peut également appeler directement l'API REST.
Les clients ouvrent un WebSocket et reçoivent les nouveaux commentaires, modifications, votes et mises à jour de présence sous forme d'événements, il n'y a donc aucun rafraîchissement ni interrogation. Aucun événement n'est manqué : si un client se déconnecte, il récupère à nouveau l'event log à la reconnexion pour rejouer tout ce qui a été envoyé pendant qu'il était hors ligne.
Non. FastComments héberge l'infrastructure temps réel. Votre client s'abonne avec le SDK, et nous livrons les événements.
Ils interrogent l'endpoint event log, qui renvoie chaque changement depuis un horodatage. Les SDK Node, React Native, Java, Swift et C++ incluent quant à eux un abonné WebSocket natif.
Pour les commentaires spécifiquement, FastComments pré-calcule la pagination à chaque écriture pour des temps de chargement optimaux, de sorte que même de très longs fils se paginent rapidement.
Oui. Démarrez un essai gratuit avec un accès complet à l'API et aux SDK, sans carte bancaire. Après l'essai, les forfaits payants évoluent avec votre trafic.
La référence complète de l'API REST et des SDK se trouve sur docs.fastcomments.com, où chaque endpoint, paramètre et réponse est documenté.
Oui. FastComments propose une région EU sur eu.fastcomments.com, et les SDK prennent en charge le routage vers celle-ci.
Démarrez un essai gratuit, récupérez votre clé d'API et ajoutez des discussions en direct à votre application dès aujourd'hui.