L'API di commenti per le discussioni live

Commenti, moderazione e feed social tramite un'unica API REST e SDK per oltre 10 linguaggi. Recupera, pubblica e modera dal tuo backend, poi trasmetti in tempo reale ogni nuova attività a tutti i lettori tramite WebSocket.

Una piattaforma, tre API

FastComments è molto più dei commenti. Crea discussioni, moderazione e feed social sulla stessa suite di API e SDK.

API Commenti

Commenti a thread e chat live. Recupera, pubblica, vota, fissa, rispondi e cerca, con SSO e aggiornamenti in tempo reale integrati.

API Moderazione

Un'area dedicata alla moderazione con oltre 40 endpoint. Approva, segnala, blocca, banna, chiudi e verifica, con filtro antispam automatico.

API Feed Social

Crea feed di attività e social con post, media, reazioni e follow, poi invia i nuovi post a ogni client in tempo reale.

Chiama l'API da qualsiasi stack

cURL e SDK tipizzati per Node, Python, PHP, Ruby, Go, Java, Rust, Swift e C++. Oltre 200 endpoint coprono commenti, voti, pagine, utenti SSO, post dei feed, moderazione e notifiche, tutto dietro un'unica chiave API.

Installanpm 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'
Installapip 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)
Installacomposer 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;
}
Installagem 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
Installago 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();

Iscriviti al feed live

Apri una sola connessione e ricevi ogni nuovo commento, modifica, voto e aggiornamento di presenza nel momento esatto in cui avviene. Nessun evento va perso: alla riconnessione l'event log viene recuperato di nuovo per riprodurre tutto ciò che è stato inviato mentre il client era offline. I subscriber WebSocket nativi sono disponibili per Node, React Native, Java, Swift e C++. Tutti gli altri linguaggi restano in tempo reale tramite il polling dell'event log.

Installanpm 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();
Installanpm 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();
Installapip 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 mobile nativi, pronti da integrare

Evita di creare e mantenere la tua interfaccia di commenti. I nostri SDK dedicati e mantenuti per React Native, Android e iOS offrono componenti UI nativi per commenti a thread, chat live e feed. Inserisci una view, passa una config e il gioco è fatto.

React Native

npm: fastcomments-react-native-sdk

Componenti nativi, senza webview. Inserisci FastCommentsLiveCommenting, FastCommentsLiveChat o FastCommentsFeed e passa una config.

Guarda la demo live

Android

com.fastcomments:sdk

Componenti UI nativi per Android. Aggiungi FastCommentsView al tuo layout per commenti a thread, voti, notifiche e feed. Android 8.0+.

Vedi su GitHub

iOS

Swift Package: FastCommentsUI

Una libreria SwiftUI nativa per commenti a thread, feed social e chat live. iOS 16+ e macOS 14+.

Vedi su GitHub

Le parti che altrimenti dovresti costruire da solo

Oltre 200 endpoint REST

Una chiave API, un URL di base. Tutto ciò che fa la dashboard può farlo anche il tuo codice.

SDK per oltre 10 linguaggi

Client tipizzati per Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ e altri, così sviluppi nel tuo stack anziché nel nostro.

Tempo reale tramite WebSocket

I nuovi commenti raggiungono ogni lettore nel momento in cui vengono pubblicati, senza refresh e senza polling. Se un lettore si riconnette, gli eventi persi vengono riprodotti dal log.

Moderazione, SSO e protezione antispam

Single sign-on, moderazione dei commenti e filtro antispam sono integrati, così le parti difficili sono già gestite prima ancora che tu scriva una riga di codice.

Ospitato e scalato per te

Gestiamo lo storage e l'infrastruttura in tempo reale su una rete globale. Tu chiami l'API e vai in produzione.

Cosa puoi creare

Un'unica suite di API e SDK dietro thread di commenti, chat e attività live su app web, mobile e server.

Sale di chat live

Trasmetti i messaggi a tutti nella sala in tempo reale, con conteggio delle presenze e indicatore di digitazione.

Thread di commenti

Aggiungi sezioni di commenti annidate e votabili ad articoli, prodotti e post con poche chiamate API.

Feed di attività

Pubblica su un feed e invia nuovi elementi e reazioni ai client connessi non appena arrivano.

Q&A e sondaggi

Raccogli domande, risposte, voti e risultati dei sondaggi, poi ordinali e mostrali in tempo reale.

In produzione in tre passaggi

1

Ottieni la tua chiave API

Avvia una prova gratuita e recupera il tuo tenant ID e la chiave API dalla dashboard.

2

Installa l'SDK

Aggiungi l'SDK per il tuo linguaggio, oppure chiama direttamente l'API REST con cURL e la tua intestazione x-api-key.

3

Recupera, pubblica e vai live

Carica i commenti, pubblica dal tuo backend e iscriviti alle modifiche per trasmettere gli aggiornamenti a ogni lettore.

Distribuito a livello globale e ad alta disponibilità

FastComments opera su più regioni sulla nostra infrastruttura. Le scritture si replicano tra le regioni, i nodi eseguono il failover automaticamente e i lettori vengono serviti dalla località più vicina a loro.

Multi-master, multi-regione

Le scritture vengono accettate in più di una regione e replicate tra loro, così non esiste un singolo punto di errore.

La nostra rete edge

Commenti e media vengono serviti dalla nostra CDN e DNS globali, distribuiti dalla località più vicina ai tuoi utenti. Nessuna CDN di terze parti.

Failover automatico

I nodi ridondanti eseguono il failover da soli, così il traffico continua a fluire durante un'interruzione. Supportato da un uptime del 99.99%.

Residenza regionale dei dati

Opera negli US o nell'EU. La regione EU su eu.fastcomments.com mantiene i dati nella regione per la conformità.

Unisciti ai nostri clienti soddisfatti

Migliaia di clienti soddisfatti si affidano a noi per il nostro servizio eccezionale, la nostra affidabilità e le nostre soluzioni innovative. Unisciti alla nostra community in crescita e scopri la differenza oggi stesso!

Inizia ora

FAQ sull'API di commenti

Devo per forza usare il widget di FastComments?

No. Il widget è opzionale. Puoi costruire l'intera esperienza di commenti sull'API REST e sugli SDK, renderizzando tutto autonomamente.

Quali linguaggi hanno un SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ e Nim, oltre a un SDK React Native per il mobile. Qualsiasi linguaggio può anche chiamare direttamente l'API REST.

Come funziona il tempo reale?

I client aprono un WebSocket e ricevono nuovi commenti, modifiche, voti e aggiornamenti di presenza sotto forma di eventi, quindi senza refresh e senza polling. Nessun evento va perso: se un client si disconnette, recupera di nuovo l'event log alla riconnessione per riprodurre tutto ciò che è stato inviato mentre era offline.

Devo gestire un mio server WebSocket?

No. FastComments ospita l'infrastruttura in tempo reale. Il tuo client si iscrive con l'SDK e noi consegniamo gli eventi.

Come restano in tempo reale i linguaggi senza un subscriber nativo?

Eseguono il polling dell'endpoint dell'event log, che restituisce ogni modifica a partire da un timestamp. Gli SDK per Node, React Native, Java, Swift e C++ includono invece un subscriber WebSocket nativo.

Come funziona la paginazione?

Nello specifico per i commenti, FastComments pre-calcola la paginazione a ogni scrittura per tempi di caricamento ottimali, così anche i thread molto grandi si paginano velocemente.

C'è una prova gratuita?

Sì. Avvia una prova gratuita con accesso completo all'API e agli SDK, senza carta di credito. Al termine della prova, i piani a pagamento scalano con il tuo traffico.

Dove si trova la documentazione API?

Il riferimento completo dell'API REST e degli SDK è disponibile su docs.fastcomments.com, dove ogni endpoint, parametro e risposta è documentato.

Posso mantenere i dati nell'EU?

Sì. FastComments offre una regione EU su eu.fastcomments.com, e gli SDK supportano l'instradamento verso di essa.

Inizia a sviluppare in pochi minuti

Avvia una prova gratuita, recupera la tua chiave API e aggiungi discussioni live alla tua app oggi stesso.