L'API de commentaires pour les discussions en direct

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.

Une plateforme, trois API

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.

API de commentaires

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.

API de modération

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.

API de fil social

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.

Appelez l'API depuis n'importe quelle stack

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.

Installernpm 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'
Installerpip 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)
Installercomposer 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;
}
Installergem 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
Installergo 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();

Abonnez-vous au flux en direct

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.

Installernpm 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();
Installernpm 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();
Installerpip 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'

SDK mobiles natifs, prêts à intégrer

É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é.

React Native

npm: fastcomments-react-native-sdk

Composants natifs, sans webview. Insérez FastCommentsLiveCommenting, FastCommentsLiveChat ou FastCommentsFeed et passez une configuration.

Voir la démo en direct

Android

com.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 GitHub

iOS

Swift 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 GitHub

Les éléments que vous devriez sinon construire vous-même

Plus de 200 endpoints REST

Une clé d'API, une URL de base. Tout ce que fait le tableau de bord, votre code peut le faire aussi.

Des SDK pour plus de 10 langages

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.

Temps réel via WebSockets

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.

Modération, SSO et protection anti-spam

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.

Hébergé et mis à l'échelle pour vous

Nous gérons le stockage et l'infrastructure temps réel sur un réseau mondial. Vous appelez l'API et vous livrez.

Ce que vous pouvez créer

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.

Salons de chat en direct

Diffusez les messages à tout le monde dans le salon en temps réel, avec le nombre de présences et l'activité de saisie.

Fils de commentaires

Ajoutez des sections de commentaires imbriquées et votables aux articles, produits et publications en quelques appels d'API.

Fils d'activité

Publiez dans un fil et diffusez les nouveaux éléments et réactions aux clients connectés à mesure qu'ils arrivent.

Questions-réponses et sondages

Collectez questions, réponses, votes et résultats de sondages, puis classez-les et affichez-les en direct.

En ligne en trois étapes

1

Obtenez votre clé d'API

Démarrez un essai gratuit et récupérez votre ID de tenant et votre clé d'API depuis le tableau de bord.

2

Installez le SDK

Ajoutez le SDK de votre langage, ou appelez directement l'API REST avec cURL et votre en-tête x-api-key.

3

Récupérez, publiez et passez en direct

Chargez les commentaires, publiez depuis votre backend et abonnez-vous aux changements pour diffuser les mises à jour à chaque lecteur.

Distribué mondialement et hautement disponible

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.

Multi-maître, multi-région

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.

Notre propre réseau edge

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.

Basculement automatique

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é.

Résidence régionale des données

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é.

Rejoignez nos clients satisfaits

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

FAQ sur l'API de commentaires

Dois-je utiliser le widget FastComments ?

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.

Quels langages disposent d'un SDK ?

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.

Comment fonctionne le temps réel ?

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.

Dois-je exécuter mon propre serveur WebSocket ?

Non. FastComments héberge l'infrastructure temps réel. Votre client s'abonne avec le SDK, et nous livrons les événements.

Comment les langages sans abonné natif restent-ils en direct ?

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.

Comment fonctionne la pagination ?

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.

Y a-t-il un essai gratuit ?

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.

Où se trouve la documentation de l'API ?

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é.

Puis-je conserver les données dans l'EU ?

Oui. FastComments propose une région EU sur eu.fastcomments.com, et les SDK prennent en charge le routage vers celle-ci.

Commencez à développer en quelques minutes

Démarrez un essai gratuit, récupérez votre clé d'API et ajoutez des discussions en direct à votre application dès aujourd'hui.