API для коментарів і живих обговорень

Коментарі, модерація та соціальні стрічки через один REST API і SDK для 10+ мов. Отримуйте, публікуйте та модеруйте з вашого бекенду, а потім передавайте нову активність кожному читачеві в реальному часі через WebSockets.

Одна платформа, три API

FastComments це більше, ніж коментарі. Створюйте обговорення, модерацію та соціальні стрічки на одному наборі API та SDK.

API коментарів

Деревоподібні коментарі та живий чат. Отримання, публікація, голосування, закріплення, відповіді та пошук з вбудованими SSO й оновленнями в реальному часі.

API модерації

Окремий інтерфейс модерації з понад 40 ендпоінтами. Схвалюйте, позначайте, блокуйте, банте, закривайте та перевіряйте, з підтримкою автоматичної фільтрації спаму.

API соціальної стрічки

Створюйте стрічки активності та соціальні стрічки з дописами, медіа, реакціями та підписками, а потім передавайте нові дописи кожному клієнту в реальному часі.

Викликайте API з будь-якого стеку

cURL і типізовані SDK для Node, Python, PHP, Ruby, Go, Java, Rust, Swift і C++. Понад 200 ендпоінтів охоплюють коментарі, голоси, сторінки, SSO-користувачів, дописи стрічки, модерацію та сповіщення, і все це за одним ключем API.

Встановитиnpm 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'
Встановитиpip 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)
Встановити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 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
Встановитиgo 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();

Підпишіться на живу стрічку

Відкрийте одне з'єднання й отримуйте кожен новий коментар, редагування, голос і оновлення присутності в мить, коли це відбувається. Жодна подія не втрачається: під час повторного з'єднання event log завантажується заново, щоб відтворити все, що було надіслано, поки клієнт був офлайн. Нативні WebSocket-підписники доступні для Node, React Native, Java, Swift і C++. Усі інші мови залишаються в реальному часі завдяки опитуванню event log.

Встановитиnpm 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();
Встановитиnpm 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();
Встановитиpip 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, готові до інтеграції

Не витрачайте час на створення й підтримку власного інтерфейсу коментарів. Наші спеціальні підтримувані SDK для React Native, Android та iOS постачаються з нативними UI-компонентами для деревоподібних коментарів, живого чату та стрічок. Додайте вигляд, передайте конфігурацію, і все готово.

React Native

npm: fastcomments-react-native-sdk

Нативні компоненти, без webview. Додайте FastCommentsLiveCommenting, FastCommentsLiveChat або FastCommentsFeed і передайте конфігурацію.

Переглянути живе демо

Android

com.fastcomments:sdk

Нативні UI-компоненти Android. Додайте FastCommentsView до вашого макета для деревоподібних коментарів, голосування, сповіщень і стрічок. Android 8.0+.

Переглянути на GitHub

iOS

Swift Package: FastCommentsUI

Нативна бібліотека SwiftUI для деревоподібних коментарів, соціальних стрічок і живого чату. iOS 16+ і macOS 14+.

Переглянути на GitHub

Частини, які інакше довелося б робити самостійно

200+ REST-ендпоінтів

Один ключ API, один базовий URL. Усе, що робить панель керування, може робити і ваш код.

SDK для 10+ мов

Типізовані клієнти для Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ та інших, тож ви розробляєте у своєму стеку, а не в нашому.

Реальний час через WebSockets

Нові коментарі доходять до кожного читача в мить публікації, без оновлення сторінки та без опитування. Якщо читач перепідключається, пропущені події відтворюються з журналу.

Модерація, SSO та захист від спаму

Єдиний вхід, модерація коментарів і фільтрація спаму вбудовані, тож складні частини вирішено ще до того, як ви напишете перший рядок.

Хостинг і масштабування для вас

Ми забезпечуємо сховище та інфраструктуру реального часу в глобальній мережі. Ви викликаєте API і випускаєте продукт.

Що ви можете створити

Один набір API та SDK за гілками коментарів, чатом і живою активністю у веб-, мобільних і серверних застосунках.

Кімнати живого чату

Передавайте повідомлення всім у кімнаті в реальному часі, з підрахунком присутності та індикацією набору тексту.

Гілки коментарів

Додавайте вкладені секції коментарів із голосуванням до статей, товарів і дописів за кілька викликів API.

Стрічки активності

Публікуйте у стрічку та передавайте нові елементи й реакції підключеним клієнтам у міру їхнього надходження.

Питання-відповіді та опитування

Збирайте питання, відповіді, голоси та результати опитувань, а потім ранжуйте й показуйте їх у реальному часі.

Запуск у три кроки

1

Отримайте ключ API

Розпочніть безкоштовний пробний період і візьміть ідентифікатор орендаря та ключ API з панелі керування.

2

Встановіть SDK

Додайте SDK для вашої мови або викликайте REST API напряму за допомогою cURL і заголовка x-api-key.

3

Отримуйте, публікуйте та виходьте в ефір

Завантажуйте коментарі, публікуйте з вашого бекенду й підписуйтеся на зміни, щоб передавати оновлення кожному читачеві.

Глобально розподілено та високодоступно

FastComments працює в кількох регіонах на власній інфраструктурі. Записи реплікуються між регіонами, вузли автоматично перемикаються при збоях, а читачів обслуговують із найближчого до них розташування.

Multi-master, кілька регіонів

Записи приймаються в кількох регіонах і реплікуються між ними, тож немає єдиної точки відмови.

Власна edge-мережа

Коментарі та медіа обслуговуються з нашого власного глобального CDN і DNS, доставляються з найближчого до ваших користувачів розташування. Без сторонніх CDN.

Автоматичне перемикання при збоях

Резервні вузли перемикаються самостійно, тож трафік продовжує проходити навіть під час збою. Із підтримкою 99.99% безперебійної роботи.

Регіональне зберігання даних

Працюйте в регіоні US або EU. Регіон EU за адресою eu.fastcomments.com зберігає дані в межах регіону для дотримання нормативних вимог.

Приєднуйтесь до наших задоволених клієнтів

Тисячі задоволених клієнтів довіряють нам за наш винятковий сервіс, надійність та інноваційні рішення. Приєднуйтесь до нашої зростаючої спільноти та відчуйте різницю вже сьогодні!

Почати

Поширені питання про API коментарів

Чи обов'язково використовувати віджет FastComments?

Ні. Віджет необов'язковий. Ви можете побудувати весь досвід коментування на REST API та SDK і відображати все самостійно.

Для яких мов є SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ і Nim, а також SDK для React Native на мобільних. Будь-яка мова також може викликати REST API напряму.

Як працює реальний час?

Клієнти відкривають WebSocket і отримують нові коментарі, редагування, голоси та оновлення присутності у вигляді подій, тож немає ані оновлення сторінки, ані опитування. Жодна подія не втрачається: якщо клієнт від'єднується, він повторно завантажує event log при перепідключенні, щоб відтворити все, що було надіслано, поки він був офлайн.

Чи потрібно запускати власний WebSocket-сервер?

Ні. FastComments хостить інфраструктуру реального часу. Ваш клієнт підписується через SDK, а ми доставляємо події.

Як мови без нативного підписника залишаються в реальному часі?

Вони опитують ендпоінт event log, який повертає кожну зміну з певної позначки часу. SDK для Node, React Native, Java, Swift і C++ натомість містять нативний WebSocket-підписник.

Як працює пагінація?

Саме для коментарів FastComments попередньо обчислює пагінацію при кожному записі для оптимального часу завантаження, тож навіть дуже великі гілки гортаються швидко.

Чи є безкоштовний пробний період?

Так. Розпочніть безкоштовний пробний період із повним доступом до API та SDK, без потреби в кредитній картці. Після пробного періоду платні тарифи масштабуються разом із вашим трафіком.

Де знайти документацію API?

Повна довідка з REST API та SDK доступна за адресою docs.fastcomments.com, де задокументовано кожен ендпоінт, параметр і відповідь.

Чи можу я зберігати дані в EU?

Так. FastComments обслуговує регіон EU за адресою eu.fastcomments.com, і SDK підтримують маршрутизацію до нього.

Почніть створювати за лічені хвилини

Розпочніть безкоштовний пробний період, візьміть ключ API та додайте живі обговорення до вашого застосунку вже сьогодні.