De commenting-API voor live discussies

Reacties, moderatie en sociale feeds via één REST-API en SDK's voor 10+ talen. Ophalen, plaatsen en modereren vanaf je backend, en vervolgens nieuwe activiteit realtime naar elke lezer streamen via WebSockets.

Eén platform, drie API's

FastComments is meer dan reacties. Bouw discussies, moderatie en sociale feeds op dezelfde API- en SDK-suite.

Comments-API

Geneste reacties en live chat. Ophalen, plaatsen, stemmen, vastpinnen, reageren en zoeken, met ingebouwde SSO en realtime updates.

Moderatie-API

Een speciale moderatielaag met 40+ endpoints. Goedkeuren, markeren, blokkeren, verbannen, vergrendelen en auditen, ondersteund door automatische spamfiltering.

Sociale Feed-API

Bouw activiteiten- en sociale feeds met posts, media, reacties en volgers, en push vervolgens nieuwe posts live naar elke client.

Roep de API aan vanuit elke stack

cURL en getypeerde SDK's voor Node, Python, PHP, Ruby, Go, Java, Rust, Swift en C++. Ruim 200 endpoints dekken reacties, stemmen, pagina's, SSO-gebruikers, feed-posts, moderatie en meldingen, allemaal achter één API-sleutel.

Installerennpm 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'
Installerenpip 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)
Installerencomposer 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;
}
Installerengem 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
Installerengo 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();

Abonneer je op de live feed

Open één verbinding en ontvang elke nieuwe reactie, bewerking, stem en presence-update op het moment dat het gebeurt. Er gaat geen enkel event verloren: bij een herverbinding wordt het event log opnieuw opgehaald om alles af te spelen dat is verstuurd terwijl de client offline was. Native WebSocket-abonnees zijn beschikbaar voor Node, React Native, Java, Swift en C++. Elke andere taal blijft realtime door het event log te pollen.

Installerennpm 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();
Installerennpm 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();
Installerenpip 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'

Native mobiele SDK's, klaar om in te pluggen

Bespaar je het bouwen en onderhouden van je eigen reactie-UI. Onze speciale, onderhouden SDK's voor React Native, Android en iOS leveren native UI-componenten voor geneste reacties, live chat en feeds. Plug een view in, geef een config door en je bent klaar.

React Native

npm: fastcomments-react-native-sdk

Native componenten, geen webview. Plug FastCommentsLiveCommenting, FastCommentsLiveChat of FastCommentsFeed in en geef een config door.

Bekijk de live demo

Android

com.fastcomments:sdk

Native Android UI-componenten. Voeg FastCommentsView toe aan je layout voor geneste reacties, stemmen, meldingen en feeds. Android 8.0+.

Bekijk op GitHub

iOS

Swift Package: FastCommentsUI

Een native SwiftUI-bibliotheek voor geneste reacties, sociale feeds en live chat. iOS 16+ en macOS 14+.

Bekijk op GitHub

De onderdelen die je anders zelf zou bouwen

200+ REST-endpoints

Eén API-sleutel, één base-URL. Alles wat het dashboard doet, kan je code ook.

SDK's voor 10+ talen

Getypeerde clients voor Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ en meer, zodat je bouwt in jouw stack in plaats van die van ons.

Realtime via WebSockets

Nieuwe reacties bereiken elke lezer op het moment dat ze worden geplaatst, zonder verversen en zonder pollen. Als een lezer opnieuw verbindt, worden gemiste events opnieuw afgespeeld vanuit het log.

Moderatie, SSO en spambescherming

Single sign-on, reactiemoderatie en spamfiltering zijn ingebouwd, zodat de lastige onderdelen al geregeld zijn voordat je een regel schrijft.

Voor jou gehost en geschaald

Wij draaien de opslag en de realtime-infrastructuur over een wereldwijd netwerk. Jij roept de API aan en shipt.

Wat je kunt bouwen

Eén API- en SDK-suite achter reactiethreads, chat en live activiteit op web, mobiel en serverapps.

Live chatrooms

Stream berichten realtime naar iedereen in de room, met presence-tellingen en typ-activiteit.

Reactiethreads

Voeg geneste, votebare reactiesecties toe aan artikelen, producten en posts met een paar API-aanroepen.

Activiteitenfeeds

Post naar een feed en push nieuwe items en reacties naar verbonden clients zodra ze binnenkomen.

Q&A en polls

Verzamel vragen, antwoorden, stemmen en pollresultaten, en rangschik en toon ze vervolgens live.

Live in drie stappen

1

Haal je API-sleutel op

Start een gratis proefperiode en pak je tenant-ID en API-sleutel uit het dashboard.

2

Installeer de SDK

Voeg de SDK voor jouw taal toe, of roep de REST-API rechtstreeks aan met cURL en je x-api-key-header.

3

Ophalen, plaatsen en live gaan

Laad reacties, plaats vanaf je backend en abonneer je op wijzigingen om updates naar elke lezer te streamen.

Wereldwijd gedistribueerd en hoog beschikbaar

FastComments draait over meerdere regio's op onze eigen infrastructuur. Writes repliceren tussen regio's, nodes vallen automatisch over en lezers worden bediend vanaf de locatie die het dichtst bij hen is.

Multi-master, multi-regio

Writes worden in meer dan één regio geaccepteerd en tussen die regio's gerepliceerd, zodat er geen enkel punt van falen is.

Ons eigen edge-netwerk

Reacties en media worden geleverd vanaf ons eigen wereldwijde CDN en DNS, afgeleverd vanaf de locatie die het dichtst bij je gebruikers is. Geen externe CDN.

Automatische failover

Redundante nodes vallen zelfstandig over, zodat het verkeer blijft doorstromen tijdens een storing. Ondersteund door 99.99% uptime.

Regionale dataresidentie

Draai in de US of de EU. De EU-regio op eu.fastcomments.com houdt data binnen de regio voor compliance.

Sluit je aan bij onze tevreden klanten

Duizenden tevreden klanten vertrouwen op ons vanwege onze uitzonderlijke service, betrouwbaarheid en innovatieve oplossingen. Sluit u aan bij onze groeiende community en ervaar vandaag nog het verschil!

Aan de slag

Veelgestelde vragen over de Commenting-API

Moet ik de FastComments-widget gebruiken?

Nee. De widget is optioneel. Je kunt je hele reactie-ervaring bouwen op de REST-API en SDK's en alles zelf renderen.

Welke talen hebben een SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ en Nim, plus een React Native SDK voor mobiel. Elke taal kan de REST-API ook rechtstreeks aanroepen.

Hoe werkt realtime?

Clients openen een WebSocket en ontvangen nieuwe reacties, bewerkingen, stemmen en presence-updates als events, zodat er geen verversen en geen pollen nodig is. Er gaat geen enkel event verloren: als een client de verbinding verbreekt, haalt deze bij een herverbinding het event log opnieuw op om alles af te spelen dat is verstuurd terwijl hij offline was.

Moet ik mijn eigen WebSocket-server draaien?

Nee. FastComments host de realtime-infrastructuur. Je client abonneert zich met de SDK en wij leveren de events.

Hoe blijven talen zonder native abonnee live?

Ze pollen het event log-endpoint, dat elke wijziging sinds een tijdstempel teruggeeft. De SDK's voor Node, React Native, Java, Swift en C++ bevatten in plaats daarvan een native WebSocket-abonnee.

Hoe werkt paginering?

Specifiek voor reacties berekent FastComments de paginering vooraf bij elke write voor optimale laadtijden, zodat zelfs zeer grote threads snel pagineren.

Is er een gratis proefperiode?

Ja. Start een gratis proefperiode met volledige toegang tot de API en SDK's, geen creditcard nodig. Na de proefperiode schalen de betaalde abonnementen mee met je verkeer.

Waar staat de API-documentatie?

De volledige REST-API- en SDK-referentie staat op docs.fastcomments.com, waar elk endpoint, elke parameter en elke response is gedocumenteerd.

Kan ik data in de EU houden?

Ja. FastComments biedt een EU-regio op eu.fastcomments.com, en de SDK's ondersteunen routering daarnaartoe.

Begin binnen enkele minuten met bouwen

Start een gratis proefperiode, pak je API-sleutel en voeg vandaag nog live discussies toe aan je app.