Kommentar-API'en til live-diskussioner

Kommentarer, moderation og sociale feeds gennem én REST API og SDK'er til 10+ sprog. Hent, publicer og modererer fra din backend, og stream derefter ny aktivitet til hver læser i realtid over WebSockets.

Én platform, tre API'er

FastComments er mere end kommentarer. Byg diskussioner, moderation og sociale feeds på den samme API- og SDK-pakke.

Kommentar-API

Trådede kommentarer og live-chat. Hent, publicer, stem, fastgør, svar og søg, med SSO og opdateringer i realtid indbygget.

Moderations-API

En dedikeret moderationsflade med 40+ endpoints. Godkend, markér, bloker, udeluk, lås og revidér, understøttet af automatisk spamfiltrering.

Social Feed-API

Byg aktivitets- og sociale feeds med opslag, medier, reaktioner og følgere, og push derefter nye opslag til hver klient live.

Kald API'en fra enhver stack

cURL og typede SDK'er til Node, Python, PHP, Ruby, Go, Java, Rust, Swift og C++. Over 200 endpoints dækker kommentarer, stemmer, sider, SSO-brugere, feed-opslag, moderation og notifikationer, alt sammen bag én enkelt API-nøgle.

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();

Abonnér på live-feedet

Åbn én forbindelse og modtag hver ny kommentar, redigering, stemme og tilstedeværelsesopdatering i det øjeblik den sker. Ingen begivenheder går tabt: ved genforbindelse hentes event log på ny for at afspille alt, der blev sendt, mens klienten var offline. Native WebSocket-abonnenter leveres til Node, React Native, Java, Swift og C++. Alle andre sprog forbliver i realtid ved at polle 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'

Native mobil-SDK'er, klar til at sætte ind

Slip for at bygge og vedligeholde din egen kommentar-UI. Vores dedikerede, vedligeholdte SDK'er til React Native, Android og iOS leverer native UI-komponenter til trådede kommentarer, live-chat og feeds. Sæt en visning ind, angiv en konfiguration, og så er du færdig.

React Native

npm: fastcomments-react-native-sdk

Native komponenter, ingen webview. Sæt FastCommentsLiveCommenting, FastCommentsLiveChat eller FastCommentsFeed ind og angiv en konfiguration.

Se live-demoen

Android

com.fastcomments:sdk

Native Android UI-komponenter. Tilføj FastCommentsView til dit layout for trådede kommentarer, afstemning, notifikationer og feeds. Android 8.0+.

Se på GitHub

iOS

Swift Package: FastCommentsUI

Et native SwiftUI-bibliotek til trådede kommentarer, sociale feeds og live-chat. iOS 16+ og macOS 14+.

Se på GitHub

De dele, du ellers selv skulle bygge

200+ REST-endpoints

Én API-nøgle, én base-URL. Alt hvad dashboardet kan, kan din kode også.

SDK'er til 10+ sprog

Typede klienter til Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ og flere, så du bygger i din stack i stedet for vores.

Realtid over WebSockets

Nye kommentarer når hver læser i det øjeblik de publiceres, uden opdatering og uden polling. Hvis en læser genforbinder, afspilles mistede begivenheder fra loggen.

Moderation, SSO og spam-beskyttelse

Single sign-on, kommentarmoderation og spamfiltrering er indbygget, så de svære dele er håndteret, før du skriver en eneste linje.

Hostet og skaleret for dig

Vi driver lageret og realtidsinfrastrukturen på tværs af et globalt netværk. Du kalder API'en og leverer.

Hvad du kan bygge

Én API- og SDK-pakke bag kommentartråde, chat og live-aktivitet på tværs af web-, mobil- og server-apps.

Live-chatrum

Stream beskeder til alle i rummet i realtid, med tilstedeværelsestal og skriveaktivitet.

Kommentartråde

Tilføj indlejrede kommentarsektioner med afstemning til artikler, produkter og opslag med få API-kald.

Aktivitetsfeeds

Publicer til et feed og push nye elementer og reaktioner til tilsluttede klienter, efterhånden som de ankommer.

Q&A og afstemninger

Indsaml spørgsmål, svar, stemmer og afstemningsresultater, og ranger og vis dem derefter live.

Live i tre trin

1

Få din API-nøgle

Start en gratis prøveperiode og hent dit tenant-ID og din API-nøgle fra dashboardet.

2

Installer SDK'en

Tilføj SDK'en til dit sprog, eller kald REST API'en direkte med cURL og din x-api-key-header.

3

Hent, publicer og gå live

Indlæs kommentarer, publicer fra din backend, og abonnér på ændringer for at streame opdateringer til hver læser.

Globalt distribueret og med høj tilgængelighed

FastComments kører på tværs af flere regioner på vores egen infrastruktur. Skrivninger replikeres mellem regioner, noder failover automatisk, og læsere betjenes fra den placering, der er nærmest dem.

Multi-master, multi-region

Skrivninger accepteres i mere end én region og replikeres mellem dem, så der er ingen enkelt fejlkilde.

Vores eget edge-netværk

Kommentarer og medier betjenes fra vores eget globale CDN og DNS, leveret fra den placering, der er nærmest dine brugere. Ingen tredjeparts-CDN.

Automatisk failover

Redundante noder failover af sig selv, så trafikken bliver ved med at flyde gennem et nedbrud. Understøttet af 99.99% oppetid.

Regional dataopbevaring

Kør i USA eller EU. EU-regionen på eu.fastcomments.com holder data i regionen af hensyn til compliance.

Bliv en del af vores glade kunder

Tusindvis af tilfredse kunder stoler på os for vores exceptionelle service, pålidelighed og innovative løsninger. Bliv en del af vores voksende fællesskab og oplev forskellen i dag!

Kom i gang

FAQ om kommentar-API

Skal jeg bruge FastComments-widgetten?

Nej. Widgetten er valgfri. Du kan bygge hele din kommentaroplevelse på REST API'en og SDK'erne og rendere alt selv.

Hvilke sprog har en SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ og Nim, plus en React Native SDK til mobil. Ethvert sprog kan også kalde REST API'en direkte.

Hvordan fungerer realtid?

Klienter åbner en WebSocket og modtager nye kommentarer, redigeringer, stemmer og tilstedeværelsesopdateringer som begivenheder, så der er ingen opdatering og ingen polling. Ingen begivenheder går tabt: hvis en klient afbrydes, henter den event log på ny ved genforbindelse for at afspille alt, der blev sendt, mens den var offline.

Skal jeg køre min egen WebSocket-server?

Nej. FastComments hoster realtidsinfrastrukturen. Din klient abonnerer med SDK'en, og vi leverer begivenhederne.

Hvordan forbliver sprog uden en native abonnent live?

De poller event log-endpointet, som returnerer hver ændring siden et tidsstempel. SDK'erne til Node, React Native, Java, Swift og C++ inkluderer i stedet en native WebSocket-abonnent.

Hvordan fungerer paginering?

Specifikt for kommentarer forudberegner FastComments paginering ved hver skrivning for optimale indlæsningstider, så selv meget store tråde pagineres hurtigt.

Er der en gratis prøveperiode?

Ja. Start en gratis prøveperiode med fuld adgang til API'en og SDK'erne, uden kreditkort. Efter prøveperioden skalerer betalte planer med din trafik.

Hvor er API-dokumentationen?

Den fulde REST API- og SDK-reference findes på docs.fastcomments.com, hvor hvert endpoint, parameter og svar er dokumenteret.

Kan jeg holde data i EU?

Ja. FastComments betjener en EU-region på eu.fastcomments.com, og SDK'erne understøtter routing til den.

Begynd at bygge på få minutter

Start en gratis prøveperiode, hent din API-nøgle, og tilføj live-diskussioner til din app i dag.