
Język 🇵🇱 Polski
Zasoby API
Agregacje
Dzienniki audytu
Komentarze
Szablony e-mail
Hashtagi
Moderatorzy
Liczba powiadomień
Powiadomienia
Strony
Oczekujące zdarzenia webhook
Użytkownicy SSO
Subskrypcje
Dzienne zużycie najemcy
Najemcy
Pakiety najemcy
Użytkownicy najemcy
Użytkownicy
Głosy
Konfiguracje domen
Konfiguracje pytań
Wyniki pytań
Agregacja wyników pytań
Odznaki użytkowników
Postęp odznaki użytkownika
API FastComments
FastComments udostępnia API do interakcji z wieloma zasobami. Twórz integracje z naszą platformą lub nawet własnych klientów!
W tej dokumentacji znajdziesz wszystkie zasoby obsługiwane przez API wraz z udokumentowanymi typami żądań i odpowiedzi.
Dla klientów Enterprise cały dostęp do API jest rejestrowany w Audit Log.
Wygenerowane SDK
FastComments generuje teraz API Spec z naszego kodu (nie jest jeszcze kompletna, ale obejmuje wiele interfejsów API).
Mamy również SDKi dla popularnych języków:
- fastcomments-cpp
- fastcomments-go
- fastcomments-java
- fastcomments-sdk-js
- fastcomments-nim
- fastcomments-php
- fastcomments-php-sso
- fastcomments-python
- fastcomments-ruby
- fastcomments-rust
- fastcomments-swift
Uwierzytelnianie
API uwierzytelnia się poprzez przekazanie Twojego api key jako nagłówka X-API-KEY lub parametru zapytania API_KEY. Do wykonywania wywołań API będziesz także potrzebować tenantId. Można go pobrać z tej samej strony co Twój api key.
Uwaga dotycząca bezpieczeństwa
Te trasy są przeznaczone do wywoływania z serwera. NIE wywołuj ich z przeglądarki. Spowoduje to ujawnienie Twojego API key — zapewni to pełny dostęp do Twojego konta każdemu, kto może zobaczyć kod źródłowy strony!
Opcja uwierzytelniania jedna - Nagłówki
- Nagłówek:
X-API-KEY - Nagłówek:
X-TENANT-ID
Opcja uwierzytelniania druga - Parametry zapytania
- Parametr zapytania:
API_KEY - Parametr zapytania:
tenantId
Zasoby API 
Wykorzystanie zasobów
Należy zauważyć, że pobieranie danych z API jest naliczane jako użycie na Twoim koncie.
Każdy zasób wskaże, jakie jest to użycie, w swojej własnej sekcji.
Niektóre zasoby są droższe w obsłudze niż inne. Każde endpoint ma stały koszt kredytów za wywołanie API. Dla niektórych endpointów liczba kredytów różni się w zależności od opcji i rozmiaru odpowiedzi.
Użycie API można sprawdzić na stronie Billing Analytics i jest ono aktualizowane co kilka minut.
Uwaga!
Zalecamy najpierw przeczytać dokumentację Pages, aby ograniczyć nieporozumienia przy ustalaniu, jakie wartości przekazać dla urlId w Comment API.
Agreguj swoje dane 
To API agreguje dokumenty, grupując je (jeśli zostanie podany parametr groupBy) i stosując wiele operacji. Obsługiwane są różne operacje (np. sum, countDistinct, avg, itp.).
Koszt jest zmienny. Za każde 500 przeskanowanych obiektów pobierany jest 1 kredyt API.
Maksymalne zużycie pamięci przy pojedynczym wywołaniu API domyślnie wynosi 64MB, a domyślnie można mieć uruchomioną tylko jedną agregację na raz. Jeśli wyślesz wiele agregacji jednocześnie, zostaną one umieszczone w kolejce i wykonywane w kolejności zgłoszeń. Agregacje oczekujące będą czekać maksymalnie 60 sekund, po tym czasie żądanie wygaśnie. Pojedyncze agregacje mogą działać do 5 minut.
Jeśli masz zarządzanych tenantów, możesz agregować zasoby wszystkich podrzędnych tenantów w jednym wywołaniu, przekazując parametr zapytania parentTenantId.
Przykłady
Przykład: Zliczanie unikalnych


Przykład: Zliczanie różnych wartości

Odpowiedź:

Przykład: Suma wartości wielu pól

Odpowiedź:

Przykład: Średnie wartości wielu pól

Odpowiedź:

Przykład: Wartości minimalne/maksymalne wielu pól

Odpowiedź:

Przykład: Zliczanie unikalnych wartości wielu pól

Odpowiedź:

Przykład: Tworzenie zapytania

Odpowiedź:

Przykład: Zliczanie komentarzy oczekujących na recenzję

Odpowiedź:

Przykład: Podział komentarzy na zatwierdzone, zrecenzowane i spam

Odpowiedź:

Struktury


Następujące zasoby można agregować:
- AffiliateEvent
- AnonymousVote
- BannedUser
- BatchJob
- BlockedUser
- Comment
- CommentDeleted
- CommentIdToSyncOutbound
- CommentScheduled
- CommentSyncLog
- CustomConfig
- CustomEmailTemplateRenderError
- EmailToSend
- EventLogEntry
- ImportedCommentScheduled
- ModerationGroup
- Moderator
- Page
- PageReact
- PendingVote
- QuestionResult
- SSOUser
- SentEmail
- SpamEvent
- Tenant
- TenantAuditLog
- TenantBadge
- TenantDailyUsage
- TenantInvoiceHistory
- TenantPackage
- User
- UserBadge
- UserBadgeProgress
- UserNotification
- UserSubscription
- UserUsage
- Vote
Struktura dziennika audytu 
Obiekt AuditLog reprezentuje zdarzenie podlegające audytowi dla tenantów, którzy mają dostęp do tej funkcji.
Struktura obiektu AuditLog wygląda następująco:

Dziennik audytu jest niezmienny. Nie można też zapisywać do niego ręcznie. FastComments.com decyduje jedynie, kiedy zapisywać wpisy w dzienniku audytu. Możesz jednak odczytywać go za pomocą tego API.
Wpisy w dzienniku audytu wygasają po dwóch latach.
GET /api/v1/audit-logs 
To API używa paginacji, zapewnianej przez parametry skip, before i after. AuditLogs są zwracane stronami po 1000, posortowane według when i id.
Pobranie każdej partii 1000 logów kosztuje 10 kredytów.
Domyślnie otrzymasz listę z najnowszymi elementami na początku. Dzięki temu możesz odpytywać zaczynając od skip=0, paginując aż znajdziesz ostatni rekord, który przetworzyłeś.
Alternatywnie możesz sortować od najstarszych i paginować, aż nie będzie więcej rekordów.
Sortowanie można ustawić przez przypisanie wartości order na ASC lub DESC. Domyślną wartością jest ASC.
Zapytania według daty są możliwe przy użyciu before i after jako znaczników czasu z milisekundami. before i after NIE są włączające.



Struktura komentarza 
A Comment object represents a comment left by a user.
The relationship between parent and child comments is defined via parentId.
The structure for the Comment object is as follows:

Some of these fields are marked READONLY - these are returned by the API but cannot be set.
Struktura tekstu komentarza
Comments are written in a FastComments flavor of markdown, which is just markdown plus traditional bbcode style tags for images, like [img]path[/img].
Text is stored in two fields. The text the user entered is stored unmodified in the comment field. This is rendered and stored in the commentHTML field.
The allowed HTML tags are b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.
It's recommended to render the HTML, since it is a very small subset of HTML, building a renderer is pretty straightforward. There are multiple libraries for React Native and Flutter, for instance, to help with this
You may choose to render the un-normalized value of the comment field. An example parser is here..
The example parser could also be adjusted to work with HTML, and transform the HTML tags into expected elements to render for your platform.
Oznaczanie
When users are tagged in a comment, the information is stored in a list called mentions. Each object in that list
has the following structure.
Run 
Hashtagi
When hashtags are used and successfully parsed, the information is stored in a list called hashTags. Each object in that list
has the following structure. Hashtags can also be manually added to the comment hashTags array for querying, if retain is set.
Run 
GET /api/v1/comments 
To API służy do pobierania komentarzy do wyświetlenia użytkownikowi. Na przykład automatycznie filtruje komentarze niezatwierdzone lub oznaczone jako spam.
Paginacja
Paginację można wykonać na jeden z dwóch sposobów, w zależności od wymagań dotyczących wydajności i przypadku użycia:
- Najszybszy: Prekalkulowana paginacja:
- Tak działa FastComments, gdy korzystasz z naszych wbudowanych widgetów i klientów.
- Kliknięcie „dalej” po prostu zwiększa numer strony.
- Można to sobie wyobrazić jako pobierane z magazynu klucz-wartość.
- W ten sposób wystarczy zdefiniować parametr
pagezaczynający się od0oraz kierunek sortowaniadirection. - Rozmiary stron można dostosować za pomocą reguł dostosowywania.
- Najbardziej elastyczny: Elastyczna paginacja:
- W ten sposób możesz zdefiniować niestandardowe parametry
limitiskip. Nie przekazujpage. - Obsługiwany jest również kierunek sortowania
direction. limitto łączna liczba do zwrócenia po zastosowaniuskip.- Przykład: ustaw
skip = 200, limit = 100gdypage size = 100ipage = 2.
- Przykład: ustaw
- Komentarze podrzędne nadal liczą się w paginacji. Można to obejść, używając opcji
asTree.- Możesz paginować dzieci za pomocą
limitChildreniskipChildren. - Możesz ograniczyć głębokość zwracanych wątków za pomocą
maxTreeDepth.
- Możesz paginować dzieci za pomocą
- W ten sposób możesz zdefiniować niestandardowe parametry
Wątki
- Przy użyciu
Precalculated Pagination, komentarze są grupowane według strony, a komentarze w wątkach wpływają na ogólną stronę.- W ten sposób wątki można określić po stronie klienta na podstawie
parentId. - Na przykład, mając stronę z jednym komentarzem najwyższego poziomu i 29 odpowiedziami, przy ustawieniu
page=0w API - otrzymasz tylko komentarz najwyższego poziomu i 29 dzieci. - Example image here illustrating multiple pages.
- W ten sposób wątki można określić po stronie klienta na podstawie
- Przy użyciu
Flexible Pagination, możesz zdefiniować parametrparentId.- Ustaw go na null, aby pobrać tylko komentarze najwyższego poziomu.
- Aby wyświetlić wątki, wywołaj API ponownie i przekaż
parentId. - Popularnym rozwiązaniem jest wykonanie wywołania API dla komentarzy najwyższego poziomu, a następnie równoległe wywołania API, aby pobrać komentarze dla dzieci każdego komentarza.
- NOWE Od lutego 2023! Pobierz jako drzewo używając
&asTree=true.- Można to traktować jako
Flexible Pagination as a Tree. - Tylko komentarze najwyższego poziomu liczą się w paginacji.
- Ustaw
parentId=null, aby rozpocząć drzewo od korzenia (musisz ustawićparentId). - Ustaw
skipilimitdla paginacji. - Ustaw
asTreenatrue. - Koszt kredytów wzrasta o
2x, ponieważ nasz backend musi wykonać znacznie więcej pracy w tym scenariuszu. - Ustaw
maxTreeDepth,limitChildreniskipChildrenwedług potrzeb.
- Można to traktować jako
Wyjaśnienie drzew
Gdy używasz asTree, trudno przewidzieć paginację. Oto pomocna grafika:
Pobieranie komentarzy w kontekście użytkownika
API /comments może być używane w dwóch kontekstach, dla różnych przypadków użycia:
- Do zwracania komentarzy posortowanych i oznaczonych informacjami do budowy własnego klienta.
- W tym przypadku zdefiniuj parametr zapytania
contextUserId.
- W tym przypadku zdefiniuj parametr zapytania
- Do pobierania komentarzy z twojego backendu do niestandardowych integracji.
- Platforma domyślnie będzie używać tego bez
contextUserId.
- Platforma domyślnie będzie używać tego bez




Pobierz komentarze jako drzewo
Możliwe jest pobranie komentarzy zwróconych jako drzewo, gdzie paginacja liczy tylko komentarze najwyższego poziomu.

Chcesz pobrać tylko komentarze najwyższego poziomu i bezpośrednie dzieci? Oto jeden sposób:

Jednak w interfejsie użytkownika możesz potrzebować wiedzieć, czy pokazać przycisk „show replies” przy każdym komentarzu. Podczas pobierania komentarzy jako drzewo do komentarzy, gdy dotyczy, dołączana jest właściwość hasChildren.
Pobierz komentarze jako drzewo, wyszukując według hashtagu
Możliwe jest wyszukiwanie po hashtagu za pomocą API, w całym tenantcie (nie ograniczając się do jednej strony ani urlId).
W tym przykładzie pomijamy urlId i wyszukujemy po wielu hashtagach. API zwróci tylko komentarze, które zawierają wszystkie żądane hashtagi.

Wszystkie parametry żądania

Odpowiedź

Przydatne wskazówki
Identyfikator URL
Prawdopodobnie chcesz użyć API Comment z parametrem urlId. Możesz najpierw wywołać API Pages, aby zobaczyć, jak wyglądają dostępne wartości urlId.
Anonimowe działania
Dla anonimowego komentowania prawdopodobnie chcesz przekazać anonUserId podczas pobierania komentarzy oraz podczas wykonywania zgłoszeń i blokad.
(!) Jest to wymagane przez wiele sklepów z aplikacjami, ponieważ użytkownicy muszą mieć możliwość zgłaszania treści tworzonych przez użytkowników, które widzą, nawet jeśli nie są zalogowani. Brak takiej możliwości może spowodować usunięcie Twojej aplikacji z danego sklepu.
Komentarze nie są zwracane
Sprawdź, czy Twoje komentarze zostały zatwierdzone i nie są spamem.
GET /api/v1/comments/:id 
To API umożliwia pobranie pojedynczego komentarza po identyfikatorze.



POST /api/v1/comments 
Ten endpoint API umożliwia tworzenie komentarzy.
Typowe przypadki użycia to niestandardowe interfejsy użytkownika, integracje lub importy.
Uwagi:
- Ten interfejs API może zaktualizować widżet komentarzy "na żywo", jeśli jest taka potrzeba (zwiększa to
creditsCostz1do2). - Ten interfejs API automatycznie utworzy obiekty użytkowników w naszym systemie, jeśli podany zostanie adres e-mail.
- Próba zapisania dwóch komentarzy z różnymi adresami e-mail, ale taką samą nazwą użytkownika, spowoduje błąd dla drugiego komentarza.
- Jeśli określasz
parentId, a komentarz potomny manotificationSentForParentustawione na false, wyślemy powiadomienia dla komentarza nadrzędnego. Odbywa się to co godzinę (grupujemy powiadomienia, aby zmniejszyć liczbę wysyłanych e-maili). - Jeśli chcesz wysyłać e-maile powitalne podczas tworzenia użytkowników lub e-maile weryfikacyjne komentarzy, ustaw
sendEmailsnatruew parametrach zapytania. - Komentarze utworzone za pomocą tego interfejsu API będą widoczne na stronach Analityka i Moderacja w aplikacji administracyjnej.
- „wulgaryzmy” nadal są maskowane w nazwach komentujących i tekście komentarza, jeśli ustawienie jest włączone.
- Komentarze utworzone przez ten interfejs API nadal mogą być sprawdzane pod kątem spamu, jeśli zajdzie taka potrzeba.
- Konfiguracje, takie jak maksymalna długość komentarza, jeśli są skonfigurowane za pomocą strony administracyjnej Customization Rule, będą miały tu zastosowanie.
Minimalne dane wymagane do przesłania, które będą wyświetlane w widżecie komentarzy, są następujące:

Bardziej realistyczne żądanie może wyglądać następująco:



PATCH /api/v1/comments/:id 
Ten endpoint API umożliwia aktualizację pojedynczego komentarza.
Notes:
- To API może zaktualizować widżet komentarzy „na żywo”, jeśli chcesz (to zwiększa podstawowy
creditsCostz1do2).- To może sprawić, że migracje komentarzy między stronami będą „na żywo” (zmieniając
urlId). - Migracje kosztują dodatkowe
2kredyty, ponieważ strony są wstępnie przeliczane i jest to proces intensywny dla CPU.
- To może sprawić, że migracje komentarzy między stronami będą „na żywo” (zmieniając
- W przeciwieństwie do API tworzenia, to API NIE utworzy automatycznie obiektów użytkownika w naszym systemie, jeśli zostanie podany adres e-mail.
- Komentarze zaktualizowane przez to API nadal mogą być sprawdzane pod kątem spamu, jeśli chcesz.
- Ustawienia takie jak maksymalna długość komentarza, jeśli skonfigurowane na stronie administracyjnej Customization Rule, będą miały tutaj zastosowanie.
- Aby umożliwić użytkownikom aktualizację tekstu komentarza, możesz po prostu określić
commentw ciele żądania. My wygenerujemy wynikowycommentHTML.- Jeśli zdefiniujesz zarówno
comment, jak icommentHTML, nie wygenerujemy automatycznie HTML. - Jeśli użytkownik doda wzmianki lub hashtagi w nowym tekście, zostaną one przetworzone tak samo jak w API
POST.
- Jeśli zdefiniujesz zarówno
- Podczas aktualizacji
commenterEmailw komentarzu najlepiej podać takżeuserId. W przeciwnym razie musisz upewnić się, że użytkownik z tym adresem e-mail należy do Twojego tenantu, inaczej żądanie się nie powiedzie.



DELETE /api/v1/comments/:id 
Ten endpoint API umożliwia usunięcie komentarza.
Notes:
- To API może zaktualizować widżet komentarzy "na żywo", jeśli zajdzie taka potrzeba (zwiększa to
creditsCostz1do2). - To API usunie wszystkie komentarze podrzędne.



POST /api/v1/comments/:id/flag 
This API endpoint provides the ability to flag a comment for a specific user.
Notes:
- This call must always be made in the context of a user. The user can be a FastComments.com User, SSO User, or Tenant User.
- If a flag-to-hide threshold is set, the comment will be automatically hidden live after it has been flagged the defined number of times.
- After it is automatically un-approved (hidden) - the comment can only be re-approved by an administrator or moderator. Un-flagging will not re-approve the comment.

For anonymous flagging, we must specify an anonUserId. This can be an ID that represents the anonymous session, or a random UUID.
This allows us to support flagging and un-flagging comments even if a user is not logged in. This way, the comment can be marked as
flagged when comments are fetched with the same anonUserId.



POST /api/v1/comments/:id/un-flag 
Ten endpoint API umożliwia usunięcie flagi z komentarza dla konkretnego użytkownika.
Notes:
- To wywołanie musi być zawsze wykonane w kontekście użytkownika. The user can be a FastComments.com User, SSO User, or Tenant User.
- Po tym, jak komentarz zostanie automatycznie odrzucony (ukryty) - komentarz może zostać ponownie zatwierdzony tylko przez administratora lub moderatora. Usunięcie flagi nie spowoduje ponownego zatwierdzenia komentarza.

W przypadku anonimowego zgłaszania musimy określić anonUserId. Może to być identyfikator reprezentujący sesję anonimową lub losowy UUID.



POST /api/v1/comments/:id/block 
Ten endpoint API umożliwia zablokowanie użytkownika, który napisał dany komentarz. Obsługuje blokowanie komentarzy napisanych przez użytkowników FastComments.com, użytkowników SSO oraz użytkowników najemcy.
Obsługuje parametr w treści żądania commentIdsToCheck, aby sprawdzić, czy inne potencjalnie widoczne komentarze po stronie klienta powinny zostać zablokowane/odblokowane po wykonaniu tej akcji.
Notes:
- To wywołanie musi być zawsze wykonane w kontekście użytkownika. Użytkownikiem może być użytkownik FastComments.com, użytkownik SSO lub użytkownik najemcy.
- The
userIdin the request is the user that is doing the blocking. For example:User Awants to BlockUser B. PassuserId=User Aand the comment id thatUser Bwrote. - Całkowicie anonimowe komentarze (bez identyfikatora użytkownika, bez adresu e-mail) nie mogą być zablokowane i zostanie zwrócony błąd.

For anonymous blocking, we must specify an anonUserId. This can be an ID that represents the anonymous session, or a random UUID.
This allows us to support blocking comments even if a user is not logged in by fetching the comments with the same anonUserId.



POST /api/v1/comments/:id/un-block 
Ten punkt końcowy API umożliwia odblokowanie użytkownika, który napisał dany komentarz. Obsługuje odblokowywanie komentarzy napisanych przez użytkowników FastComments.com, użytkowników SSO oraz użytkowników najemcy.
Obsługuje parametr w body commentIdsToCheck, aby sprawdzić, czy po wykonaniu tej akcji inne potencjalnie widoczne komentarze po stronie klienta powinny zostać zablokowane/odblokowane.
Uwagi:
- To wywołanie musi być zawsze wykonane w kontekście użytkownika. Użytkownik może być użytkownikiem FastComments.com, użytkownikiem SSO lub użytkownikiem najemcy.
- Pole
userIdw żądaniu to użytkownik, który wykonuje odblokowanie. Na przykład:User Achce odblokowaćUser B. PrzekażuserId=User Aoraz identyfikator komentarza, który napisałUser B. - Całkowicie anonimowe komentarze (bez id użytkownika, bez adresu e-mail) nie mogą być zablokowane i zostanie zwrócony błąd.




Struktura szablonu e-mail 
Obiekt EmailTemplate reprezentuje konfigurację niestandardowego szablonu e-mail dla dzierżawcy.
System wybierze używany szablon e-mail na podstawie:
- jego identyfikatora typu, nazywanego
emailTemplateId. Są to stałe. domain. Najpierw spróbujemy znaleźć szablon dla domeny, z którą powiązany jest dany obiekt (np.Comment), a jeśli nie znajdzie się dopasowanie, spróbujemy znaleźć szablon, gdzie domain jest null lub*.
Struktura obiektu EmailTemplate wygląda następująco:

Uwagi
- Poprawne wartości
emailTemplateIdmożna pobrać z endpointu/definitions. - Endpoint
/definitionszawiera również domyślne tłumaczenia i dane testowe. - Zapisywanie szablonów zakończy się niepowodzeniem, jeśli struktura lub dane testowe są nieprawidłowe.
GET /api/v1/email-templates/:id 
Poszczególne obiekty EmailTemplate można pobrać za pomocą odpowiadającego im id (NIE emailTemplateId).



GET /api/v1/email-templates 
To API używa paginacji, dostarczanej przez parametr zapytania page. EmailTemplates są zwracane w stronach po 100, posortowane według createdAt, a następnie id.



PATCH /api/v1/email-templates/:id 
Ten punkt końcowy API umożliwia aktualizację szablonu e-mail poprzez podanie jedynie id oraz atrybutów do zaktualizowania.
Zauważ, że wszystkie te same walidacje, które obowiązują przy tworzeniu szablonu, mają zastosowanie również tutaj, na przykład:
- Szablon musi się renderować. Jest to sprawdzane przy każdej aktualizacji.
- Nie można mieć zduplikowanych szablonów dla tej samej domeny (w przeciwnym razie jeden zostałby zignorowany bez komunikatu).



POST /api/v1/email-templates 
This API endpoint provides the ability to create email templates.
Notes:
- You can't have multiple templates with the same
emailTemplateIdwith the same domain. - But you can have a wildcard template (
domain=*and a domain specific template for the sameemailTemplateId). - Specifying
domainis only relevant if you have different domains, or want to use specific templates for testing (domainset tolocalhostetc). - If you do specify
domainit must match aDomainConfig. On error a list of valid domains is provided. - The template syntax is EJS and is rendered with a 500ms timeout. P99 for rendering is <5ms, so if you hit 500ms something is wrong.
- Your template must render with your given
testDatato save. Render errors are aggregated and reported on in the dashboard (soon available via API).
The minimum data required to add a template is as follows:

You may want to have templates per-site, in which case you define domain:



POST /api/v1/email-templates/render 
Ten punkt końcowy API umożliwia podgląd szablonów e-mail.



DELETE /api/v1/email-templates/:id 
Ta trasa umożliwia usunięcie pojedynczego EmailTemplate według identyfikatora.



Struktura hashtagu 
Obiekt HashTag reprezentuje tag, który może zostawić użytkownik. Hashtagi mogą być używane do łączenia z zewnętrzną treścią lub do
łączenia ze sobą powiązanych komentarzy.
Struktura obiektu HashTag jest następująca:

Notes:
- W niektórych punktach końcowych API zobaczysz, że hashtag jest używany w URL. Pamiętaj o kodowaniu wartości URI. Na przykład,
#powinien być zamiast tego reprezentowany jako%23. - Niektóre z tych pól są oznaczone
READONLY- są one zwracane przez API, ale nie można ich ustawić.
GET /api/v1/hash-tags 
To API używa paginacji, udostępnianej przez parametr zapytania page. HashTags są zwracane w stronach po 100, posortowane według tag.



PATCH /api/v1/hash-tags/:tag 
Ten endpoint umożliwia zaktualizowanie pojedynczego HashTag.



POST /api/v1/hash-tags 
Ta trasa umożliwia dodanie pojedynczego HashTag.



POST /api/v1/hash-tags/bulk 
Ta ścieżka umożliwia dodanie do 100 HashTag obiektów jednocześnie.



DELETE /api/v1/hash-tags/:tag 
Ta trasa umożliwia usunięcie HashTag na podstawie podanego tagu.
Należy pamiętać, że jeśli automatyczne tworzenie HashTag nie jest wyłączone, hashtagi mogą zostać ponownie utworzone przez użytkownika, który poda hashtag podczas komentowania.



Struktura moderatora 
Obiekt Moderator reprezentuje konfigurację moderatora.
Istnieją trzy typy moderatorów:
- Użytkownicy administratorzy, którzy mają flagę
isCommentModeratorAdmin. - Użytkownicy SSO z flagą
isCommentModeratorAdmin. - Zwykli komentatorzy, lub użytkownicy FastComments.com, którzy są zapraszani jako moderatorzy.
Struktura Moderator jest używana do reprezentowania stanu moderacji w przypadku użycia 3.
Jeśli chcesz zaprosić użytkownika na moderatora za pomocą API, użyj API Moderator, tworząc Moderator i inviting ich.
Jeśli użytkownik nie ma konta na FastComments.com, wiadomość e-mail z zaproszeniem pomoże mu się skonfigurować. Jeśli ma już konto, otrzyma dostęp moderatorski do Twojego tenanta, a pole userId obiektu Moderator zostanie zaktualizowane, aby wskazywać na jego użytkownika. Nie będziesz mieć dostępu API do ich użytkownika, ponieważ w tym przypadku konto należy do nich i jest zarządzane przez FastComments.com.
Jeśli potrzebujesz pełnego zarządzania kontem użytkownika, zalecamy albo użycie SSO, albo dodanie go jako Użytkownik tenanta i następnie dodanie obiektu Moderator do śledzenia ich statystyk.
Struktura Moderator może być używana jako mechanizm śledzenia statystyk dla przypadków użycia 1 i 2. Po utworzeniu użytkownika dodaj obiekt Moderator z określonym polem userId, a jego statystyki będą śledzone na stronie moderatorów komentarzy.
Struktura obiektu Moderator jest następująca:

GET /api/v1/moderators/:id 
Ten endpoint zwraca pojedynczego moderatora na podstawie jego/jej id.



GET /api/v1/moderators 
To API używa paginacji, realizowanej przez parametr zapytania skip. Moderatorzy są zwracani stronami po 100, posortowani według createdAt i id.
Koszt zależy od liczby zwróconych moderatorów — 1 credit per 10 zwróconych moderatorów.



PATCH /api/v1/moderators/:id 
Ten punkt końcowy API umożliwia zaktualizowanie Moderator za pomocą id.
Aktualizacja Moderator ma następujące ograniczenia:
- Następujące wartości nie mogą być podane podczas aktualizacji
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Jeżeli zostanie podane
userId, użytkownik musi istnieć. - Jeżeli zostanie podane
userId, musi należeć do tego samegotenantId, który został podany w parametrach zapytania. - Dwóch moderatorów w tym samym tenant nie może mieć tego samego
email. - Nie można zmienić
tenantIdpowiązanego zModerator.



POST /api/v1/moderators 
Ten endpoint umożliwia dodanie pojedynczego Moderator.
Tworzenie Moderator ma następujące ograniczenia:
- Zawsze należy podać
nameiemail.userIdjest opcjonalne. - Następujące wartości nie mogą być podawane podczas tworzenia
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Jeśli podano
userId, użytkownik musi istnieć. - Jeśli podano
userId, musi należeć do tego samegotenantIdpodanego w parametrach zapytania. - Dwóch moderatorów w tym samym tenant nie może zostać dodanych z tym samym
email.
Możemy utworzyć Moderator dla użytkownika, którego znamy tylko adres e-mail:

Lub możemy utworzyć Moderator dla użytkownika, który należy do naszego tenant, aby śledzić ich statystyki moderacji:



POST /api/v1/moderators/:id/send-invite 
Ta trasa udostępnia możliwość zaproszenia pojedynczego Moderator.
The following restrictions exist to send an invite email to a Moderator:
- The
Moderatormust already exist. - The
fromNamemay not be longer than100 characters.
Notes:
- Jeśli użytkownik z podanym adresem e-mail już istnieje, zostanie zaproszony do moderowania komentarzy twojego tenanta.
- Jeśli użytkownik z podanym adresem e-mail nie istnieje link zaproszenia poprowadzi go przez proces tworzenia konta.
- Zaproszenie wygaśnie po
30 days.
Możemy utworzyć Moderator dla użytkownika, którego znamy tylko adres e-mail:

To wyśle e-mail podobny do Bob at TenantName is inviting you to be a moderator...


DELETE /api/v1/moderators/:id 
Ta ścieżka umożliwia usunięcie Moderator po id.



Struktura licznika powiadomień 
Obiekt NotificationCount reprezentuje liczbę nieprzeczytanych powiadomień i metadane dla użytkownika.
Jeśli nie ma nieprzeczytanych powiadomień, nie będzie istniał żaden NotificationCount dla użytkownika.
Obiekty NotificationCount są tworzone automatycznie i nie można ich tworzyć za pomocą API. Wygasają również po roku.
Możesz wyczyścić liczbę nieprzeczytanych powiadomień użytkownika, usuwając jego NotificationCount.
Struktura obiektu NotificationCount jest następująca:

GET /api/v1/notification-count/:user_id 
Ta trasa zwraca pojedynczy NotificationCount według identyfikatora użytkownika. Przy SSO identyfikator użytkownika ma format <tenant id>:<user id>.
Jeśli nie ma nieprzeczytanych powiadomień, nie będzie NotificationCount - otrzymasz wtedy 404.
To różni się od notifications/count tym, że jest znacznie szybsze, ale nie pozwala na filtrowanie.



DELETE /api/v1/notification-count/:user_id 
Ta ścieżka usuwa pojedynczy NotificationCount według identyfikatora użytkownika. Przy SSO identyfikator użytkownika ma format <tenant id>:<user id>.
Spowoduje to wyczyszczenie nieprzeczytanej liczby powiadomień użytkownika (czerwony dzwonek w widżecie komentarzy zniknie, a liczba przestanie być wyświetlana).



Struktura powiadomienia 
Obiekt Notification reprezentuje powiadomienie dla użytkownika.
Obiekty Notification są tworzone automatycznie i nie można ich tworzyć przez API. Wygasają też po roku.
Powiadomień nie można usuwać. Można jednak zaktualizować je, ustawiając viewed na false, i można filtrować zapytania po viewed.
Użytkownik może również zrezygnować z powiadomień dla konkretnego komentarza, ustawiając optedOut w powiadomieniu na true. Można ponownie wyrazić zgodę, ustawiając je na false.
Istnieją różne typy powiadomień - sprawdź relatedObjectType i type.
Sposoby tworzenia powiadomień są dość elastyczne i mogą być wyzwalane w wielu scenariuszach (zob. NotificationType).
Na dzień dzisiejszy istnienie Notification niekoniecznie oznacza, że e-mail został lub powinien zostać wysłany. Raczej powiadomienia
są używane do kanału powiadomień i powiązanych integracji.
Struktura obiektu Notification jest następująca:

GET /api/v1/notifications 
Ten endpoint zwraca do 30 obiektów Notification posortowanych według createdAt, od najnowszych.
Możesz filtrować po userId. Przy SSO identyfikator użytkownika ma format <tenant id>:<user id>.



GET /api/v1/notifications/count 
Ta trasa zwraca obiekt zawierający liczbę powiadomień w parametrze count.
Jest wolniejsza niż /notification-count/ i kosztuje dwukrotnie więcej kredytów, ale umożliwia filtrowanie po większej liczbie wymiarów.
Możesz filtrować za pomocą tych samych parametrów co endpoint /notifications, takich jak userId. Przy SSO identyfikator użytkownika ma format <tenant id>:<user id>.




PATCH /api/v1/notifications/:id 
Ten endpoint API umożliwia zaktualizowanie Notification po id.
Aktualizacja Notification ma następujące ograniczenia:
- Można zaktualizować tylko następujące pola:
viewedoptedOut



Struktura strony 
Obiekt Page reprezentuje stronę, do której może należeć wiele komentarzy. Ten związek jest określony przez urlId.
Obiekt Page przechowuje informacje takie jak tytuł strony, liczba komentarzy oraz urlId.
Struktura obiektu Page jest następująca:

GET /api/v1/pages 
Obecnie możesz pobrać tylko wszystkie strony (lub pojedynczą stronę przez /by-url-id) powiązane z Twoim kontem. Jeśli chciałbyś bardziej precyzyjnych możliwości wyszukiwania, skontaktuj się z nami.



Przydatna wskazówka
API Comment wymaga urlId. Możesz najpierw wywołać API Pages, aby zobaczyć, jak wyglądają dostępne dla Ciebie wartości urlId.
GET /api/v1/pages/by-url-id 
Pojedyncze strony można pobrać za pomocą odpowiadającego im urlId. Może to być przydatne do wyszukiwania tytułów stron lub liczby komentarzy.



Przydatna wskazówka
Pamiętaj o zakodowaniu URI wartości takich jak urlId.
PATCH /api/v1/pages/:id 
Ta trasa zapewnia możliwość aktualizacji pojedynczej Page. Odpowiadające jej komentarze zostaną zaktualizowane.



Note
Some parameters in the Page object get automatically updated. These are the counts and title attributes. Counts cannot be updated
via the API since they are calculated values. The page title can be set via the API, but would get overwritten if the comment widget is used on
a page with the same urlId and a different page title.
POST /api/v1/pages 
This API endpoint provides the ability to create pages.
A common use cases is access control.
Notes:
- If you've commented on a comment thread, or called the API to create a
Comment, you've already created aPageobject! You can try fetching it via the/by-url-idPageroute, passing in the sameurlIdpassed to the comment widget. - The
Pagestructure contains some calculated values. Currently, these arecommentCountandrootCommentCount. They are populated automatically and cannot be set by the API. Attempting to do so will cause the API to return an error.



DELETE /api/v1/pages/:id 
Ta ścieżka umożliwia usunięcie pojedynczej strony według identyfikatora.
Należy pamiętać, że interakcja z widżetem komentarzy dla strony o tym samym urlId spowoduje po prostu ponowne utworzenie Page.



Struktura oczekującego zdarzenia webhook 
Obiekt PendingWebhookEvent reprezentuje zdarzenie webhooka w kolejce oczekujące na przetworzenie.
Obiekty PendingWebhookEvent są tworzone automatycznie i nie można ich tworzyć ręcznie przez API. Wygasają też po roku.
Można je usunąć, co usuwa zadanie z kolejki.
Istnieją różne typy zdarzeń - sprawdź eventType (OutboundSyncEventType) oraz type (OutboundSyncType).
Typowym przypadkiem użycia tego API jest implementacja niestandardowego monitorowania. Możesz chcieć okresowo wywoływać endpoint /count
aby odpytywać liczbę oczekujących zadań dla określonych filtrów.
Struktura obiektu PendingWebhookEvent jest następująca:

GET /api/v1/pending-webhook-events 
Ta ścieżka zwraca listę oczekujących zdarzeń webhook w parametrze pendingWebhookEvents.
To API używa paginacji, udostępnianej przez parametr skip. Zdarzenia PendingWebhookEvents są zwracane w stronach po 100, posortowane według createdAt od najnowszych.



GET /api/v1/pending-webhook-events/count 
This route returns an object containing the number of pending webhook events under a count parameter.
You can filter by the same parameters as the /pending-webhook-events endpoint



DELETE /api/v1/pending-webhook-events/:id 
Ta trasa pozwala na usunięcie pojedynczego PendingWebhookEvent.
Jeśli potrzebujesz usunąć masowo, wywołaj API GET z paginacją, a następnie wywołuj to API sekwencyjnie.



Struktura użytkownika SSO 
FastComments provides an easy to use SSO solution. Updating a user's information with the HMAC-based integration is as simple as having the user load the page with an updated payload.
However, it may be desirable to manage a user outside that flow, to improve consistency of your application.
The SSO User API provides a way to CRUD objects that we call SSOUsers. These objects are different from regular Users and kept separate for type safety.
The structure for the SSOUser object is as follows:

Billing for SSO Users
SSO users are billed differently based on their permission flags:
- Zwykli użytkownicy SSO: Users without admin or moderator permissions are billed as regular SSO users
- Administratorzy SSO: Users with
isAccountOwnerorisAdminAdminflags are billed separately as SSO Admins (same rate as regular tenant admins) - Moderatorzy SSO: Users with
isCommentModeratorAdminflag are billed separately as SSO Moderators (same rate as regular moderators)
Ważne: Aby zapobiec podwójnemu naliczaniu, system automatycznie deduplikuje użytkowników SSO względem zwykłych użytkowników i moderatorów konta na podstawie adresu e-mail. Jeśli użytkownik SSO ma ten sam adres e-mail co zwykły użytkownik konta lub moderator, nie zostanie naliczony dwukrotnie.
Access Control
Użytkownicy mogą być podzieleni na grupy. Do tego służy pole groupIds i jest ono opcjonalne.
@Wzmianki
Domyślnie @mentions używają username do wyszukiwania innych użytkowników SSO, gdy wpisany zostanie znak @. Jeśli użyty jest displayName, wyniki pasujące do username zostaną zignorowane, gdy istnieje zgodność z displayName, a wyniki wyszukiwania @mention będą używać displayName.
Subscriptions
W FastComments użytkownicy mogą subskrybować stronę, klikając ikonę dzwonka w widgetcie komentarzy i wybierając Subskrybuj.
W przypadku zwykłego użytkownika wysyłamy mu e-maile z powiadomieniami na podstawie jego ustawień powiadomień.
W przypadku użytkowników SSO rozdzielamy to dla zachowania kompatybilności wstecz. Użytkownicy otrzymają dodatkowe e-maile z powiadomieniami o subskrypcji tylko jeśli ustawisz optedInSubscriptionNotifications na true.
Badges
Możesz przypisać odznaki użytkownikom SSO za pomocą właściwości badgeConfig. Odznaki to wizualne wskaźniki pojawiające się obok nazwy użytkownika w komentarzach.
badgeIds- Tablica identyfikatorów odznak, które zostaną przypisane użytkownikowi. Muszą to być prawidłowe identyfikatory odznak utworzone na Twoim koncie FastComments. Ograniczenie do 30 odznak.override- Jeślitrue, wszystkie istniejące odznaki wyświetlane w komentarzach zostaną zastąpione dostarczonymi. Jeślifalselub pominięte, dostarczone odznaki zostaną dodane do istniejących.update- Jeślitrue, właściwości wyświetlania odznak będą aktualizowane z konfiguracji konta za każdym razem, gdy użytkownik się zaloguje.
GET /api/v1/sso-users 
Ta trasa zwraca SSO Users w stronach po 100. Paginacja jest zapewniona przez parametr skip. Użytkownicy są sortowani według signUpDate i id.



GET /api/v1/sso-users/by-id/:id 
Ta ścieżka zwraca pojedynczego użytkownika SSO po jego id.



GET /api/v1/sso-users/by-email/:email 
Ta trasa zwraca pojedynczego użytkownika SSO na podstawie jego adresu e-mail.



PATCH /api/v1/sso-users/:id 
Ta trasa umożliwia aktualizację pojedynczego użytkownika SSO.



POST /api/v1/sso-users 
Ta ścieżka umożliwia utworzenie pojedynczego użytkownika SSO.
Próba utworzenia dwóch użytkowników z tym samym identyfikatorem zakończy się błędem.

W tym przykładzie określamy groupIds dla kontroli dostępu, ale jest to opcjonalne.


Uwaga integracyjna
Dane przesłane przez API można nadpisać, po prostu przekazując inny ładunek HMAC użytkownika SSO. Na przykład, jeśli ustawisz nazwę użytkownika przez API, ale następnie przekażesz inną w przepływie SSO podczas ładowania strony, automatycznie zaktualizujemy jego nazwę użytkownika.
Nie będziemy aktualizować parametrów użytkownika w tym przepływie, chyba że wyraźnie je określisz lub ustawisz na null (nie undefined).
PUT /api/v1/sso-users/:id 
Ta trasa umożliwia aktualizację pojedynczego użytkownika SSO.

W tym przykładzie określamy groupIds dla kontroli dostępu, ale jest to opcjonalne.


DELETE /api/v1/sso-users/:id 
Ta ścieżka umożliwia usunięcie pojedynczego użytkownika SSO na podstawie jego id.
Zwróć uwagę, że ponowne załadowanie widżetu komentarzy z danymi tego użytkownika spowoduje po prostu bezproblemowe ponowne utworzenie użytkownika.
Usunięcie komentarzy użytkownika jest możliwe za pomocą parametru zapytania deleteComments. Zauważ, że jeśli ma on wartość true:
- Wszystkie komentarze użytkownika zostaną usunięte na żywo.
- Wszystkie child (teraz osierocone) komentarze zostaną usunięte lub zanonimizowane na podstawie konfiguracji strony powiązanej z każdym komentarzem. Na przykład, jeśli tryb usuwania wątku to "anonymize", odpowiedzi pozostaną, a komentarze użytkownika zostaną zanonimizowane. Dotyczy to tylko, gdy
commentDeleteModejest ustawione naRemove(wartość domyślna). - Wartość
creditsCoststaje się2.
Zanonimizowane komentarze
Możesz zachować komentarze użytkownika, ale po prostu je zanonimizować ustawiając commentDeleteMode=1.
Jeśli komentarze użytkownika zostaną zanonimizowane, następujące wartości zostaną ustawione na null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesWłaściwości isDeleted i isDeletedUser są ustawiane na true.
Podczas renderowania widżet komentarzy użyje DELETED_USER_PLACEHOLDER (domyślnie: "[deleted]") dla nazwy użytkownika oraz DELETED_CONTENT_PLACEHOLDER dla treści komentarza. Można to dostosować za pomocą interfejsu dostosowywania widżetu (Widget Customization UI).
Przykłady



Struktura subskrypcji 
Obiekt Subscription reprezentuje subskrypcję dla użytkownika.
Obiekty Subscription są tworzone, gdy użytkownik kliknie dzwonek powiadomień w widżecie komentarzy i wybierze "Subskrybuj tę stronę".
Subskrypcje można również tworzyć za pomocą API.
Posiadanie obiektu Subscription powoduje wygenerowanie obiektów Notification i wysłanie e-maili, gdy nowe komentarze zostaną umieszczone w korzeniu powiązanej strony
na którą dotyczy Subscription. Wysyłanie e-maili zależy od typu użytkownika. Dla zwykłych użytkowników zależy to od optedInNotifications. Dla użytkowników SSO zależy to od optedInSubscriptionNotifications. Zwróć uwagę, że niektóre aplikacje mogą nie mieć pojęcia strony dostępnej w sieci, w takim przypadku po prostu ustaw urlId na
identyfikator elementu, który subskrybujesz (ta sama wartość urlId, którą przekazałbyś do widżetu komentarzy).
Struktura obiektu Subscription jest następująca:

GET /api/v1/subscriptions/:id 
Ta trasa zwraca do 30 obiektów Subscription posortowanych według createdAt, od najnowszych.
Możesz filtrować według userId. Przy SSO identyfikator użytkownika ma format <tenant id>:<user id>.



POST /api/v1/subscriptions 
Ten endpoint API umożliwia utworzenie Subscription. Należy pamiętać, że użytkownik może mieć tylko jedną subskrypcję na stronę, ponieważ więcej jest zbędne, a próba utworzenia więcej niż jednej subskrypcji dla tego samego użytkownika i tej samej strony spowoduje błąd.
Utworzenie subskrypcji spowoduje utworzenie obiektów Notification, gdy nowy komentarz zostanie dodany w korzeniu subskrybowanego urlId (gdy parentId komentarza jest null).



DELETE /api/v1/subscriptions/:id 
Ten endpoint usuwa pojedynczy obiekt Subscription po id.



Struktura dziennego zużycia najemcy 
Obiekt TenantDailyUsage reprezentuje użycie dla najemcy w danym dniu. Jeżeli nie było aktywności dla danego najemcy na danym
dniu, ten dzień nie będzie miał obiektu TenantDailyUsage.
Obiekt TenantDailyUsage nie jest w czasie rzeczywistym i może być opóźniony o kilka minut względem rzeczywistego użycia.
Struktura obiektu TenantDailyUsage jest następująca:

GET /api/v1/tenant-daily-usage 
Ta trasa umożliwia wyszukiwanie użycia tenantów według roku, miesiąca i dnia. Może zostać zwróconych do 365 obiektów, a koszt to 1 kredyt API za każde 10 obiektów.
Obiekty odpowiedzi są sortowane według daty ich utworzenia (najpierw najstarsze).



Struktura najemcy 
Tenant definiuje klienta FastComments.com. Mogą być tworzone za pomocą API przez tenantów z dostępem do white labelingu. Tenanci z white-labelingiem
nie mogą tworzyć innych tenantów z white-labelingiem (dozwolony jest tylko jeden poziom zagnieżdżenia).
Struktura obiektu Tenant jest następująca:

GET /api/v1/tenants/:id 
Ta trasa zwraca pojedynczy Tenant na podstawie id.



GET /api/v1/tenants 
To API zwraca tenantów, którymi zarządza Twój tenant.
Paginacja jest realizowana za pomocą parametru zapytania skip. Tenanci są zwracani stronami po 100, posortowane według signUpDate i id.
Koszt jest naliczany na podstawie liczby zwróconych tenantów, wynosząc 1 credit per 10 zwróconych tenantów.

Możesz zdefiniować parametry meta na obiektach Tenant i wyszukiwać pasujących tenantów. Na przykład, dla klucza someKey i wartości meta some-value, możemy skonstruować obiekt JSON z tą parą klucz/wartość, a następnie zakodować go do URI jako parametr zapytania, aby przefiltrować:



POST /api/v1/tenants 
Ta trasa umożliwia dodanie pojedynczego Tenant.
Tworzenie Tenant podlega następującym ograniczeniom:
- Wymagane jest pole
name. - Wymagane jest pole
domainConfiguration. - Następujące wartości nie mogą być podane podczas tworzenia
Tenant:hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmount
signUpDatenie może być w przyszłości.namenie może być dłuższe niż200 characters.emailnie może być dłuższe niż300 characters.emailmusi być unikalny wśród wszystkich tenantów FastComments.com.- Nie możesz tworzyć tenantów, jeśli tenant nadrzędny nie ma zdefiniowanego prawidłowego
TenantPackage.- Jeśli Twój tenant został utworzony za pośrednictwem FastComments.com, nie powinno to stanowić problemu.
- Nie możesz utworzyć więcej tenantów niż zdefiniowano w
maxWhiteLabeledTenantsw Twoim pakiecie. - Musisz określić parametr zapytania
tenantId, który jest identyfikatorem Twojegoparent tenantz włączonym white labelingiem.
Możemy utworzyć Tenant podając tylko kilka parametrów:



PATCH /api/v1/tenants/:id 
Ten punkt końcowy API umożliwia aktualizację Tenant według id.
Aktualizacja Tenant ma następujące ograniczenia:
- Następujące wartości nie mogą być aktualizowane:
hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmountmanagedByTenantId
signUpDatenie może być w przyszłości.namenie może być dłuższe niż200 characters.emailnie może być dłuższe niż300 characters.emailmusi być unikalny wśród wszystkich tenantów FastComments.com.- Jeśli ustawiasz
billingInfoValidnatrue,billingInfomusi być podane w tym samym żądaniu. - Nie możesz zaktualizować
packageIdpowiązanego z Twoim tenantem. - Nie możesz zaktualizować
paymentFrequencypowiązanego z Twoim tenantem.



DELETE /api/v1/tenants/:id 
Ten endpoint umożliwia usunięcie Tenant i wszystkich powiązanych danych (użytkowników, komentarzy itp.) na podstawie id.
Istnieją następujące ograniczenia dotyczące usuwania tenantów:
- Tenant musi być Twój własny lub white-labeled tenant, którym zarządzasz.
- Parametr zapytania
suremusi być ustawiony natrue.



Struktura pakietu najemcy 
The TenantPackage definiuje informacje o pakiecie dostępne dla Tenant. Tenant może mieć wiele dostępnych pakietów, ale tylko
jeden używany w danym momencie.
Tenant nie może być używany do żadnych produktów, dopóki jego packageId nie wskazuje na prawidłowy TenantPackage.
Istnieją dwa typy obiektów TenantPackage:
- Pakiety o stałej cenie - gdzie
hasFlexPricingjest false. - Elastyczne wycenianie - gdzie
hasFlexPricingjest true.
W obu przypadkach limity są definiowane na koncie używającym pakietu, jednak w przypadku Flex tenant jest obciążany ceną podstawową plus
tym, co zużył, określonym przez parametry flex*.
Tenant może mieć wiele pakietów tenant i mieć możliwość zmiany pakietu samodzielnie ze Strony informacji o rozliczeniach.
Jeśli będziecie sami obsługiwać rozliczenia za tenantów, nadal będziecie musieli zdefiniować pakiet dla każdego tenant, aby określić ich limity. Po prostu ustaw billingHandledExternally na true w Tenant i
nie będą mogli samodzielnie zmieniać swoich informacji rozliczeniowych ani aktywnego pakietu.
Nie można tworzyć pakietów z wyższymi limitami niż tenant nadrzędny.
Struktura obiektu TenantPackage jest następująca:

GET /api/v1/tenant-packages/:id 
Ta trasa zwraca pojedynczy Tenant Package według id.



GET /api/v1/tenant-packages 
To API używa paginacji, zapewnianej przez parametr zapytania skip. TenantPackages są zwracane stronami po 100, uporządkowane według createdAt i id.
Koszt zależy od liczby zwróconych tenant packages i wynosi 1 credit per 10 zwróconych tenant packages.



POST /api/v1/tenant-packages 
Ta trasa umożliwia dodanie pojedynczego TenantPackage.
Tworzenie TenantPackage ma następujące ograniczenia:
- Następujące parametry są wymagane:
nametenantIdmonthlyCostUSD- Może być null.yearlyCostUSD- Może być null.maxMonthlyPageLoadsmaxMonthlyAPICreditsmaxMonthlyCommentsmaxConcurrentUsersmaxTenantUsersmaxSSOUsersmaxModeratorsmaxDomainshasDebrandingforWhoTextfeatureTaglineshasFlexPricing- Jeśli true, wtedy wszystkie parametryflex*są wymagane.
namenie może być dłuższe niż50 characters.- Każdy element
forWhoTextnie może być dłuższy niż200 characters. - Każdy element
featureTaglinesnie może być dłuższy niż100 characters. TenantPackagemusi być "mniejszy" niż nadrzędny tenant. Na przykład wszystkie parametrymax*muszą mieć niższe wartości niż nadrzędny tenant.- Najemca z white-labelingiem może mieć maksymalnie pięć pakietów.
- Tylko tenanci z dostępem do white labelingu mogą tworzyć
TenantPackage. - Nie możesz dodawać pakietów do własnego najemcy. :)
Możemy utworzyć TenantPackage w następujący sposób:



PATCH /api/v1/tenant-packages/:id 
Ten endpoint API umożliwia zaktualizowanie TenantPackage według id.
Aktualizacja TenantPackage ma następujące ograniczenia:
- Jeśli ustawiasz
hasFlexPricingna true, to wszystkie parametryflex*są wymagane w tym samym żądaniu. namenie może być dłuższy niż50 characters.- Każdy element
forWhoTextnie może być dłuższy niż200 characters. - Każdy element
featureTaglinesnie może być dłuższy niż100 characters. TenantPackagemusi być "mniejszy" niż parent tenant. Na przykład wszystkie parametrymax*muszą mieć mniejsze wartości niż parent tenant.- Nie możesz zmienić
tenantIdpowiązanego zTenantPackage.



DELETE /api/v1/tenant-packages/:id 
Ten endpoint umożliwia usunięcie TenantPackage według identyfikatora.
Nie można usunąć TenantPackage, który jest w użyciu (pole packageId najemcy wskazuje na pakiet). Najpierw zaktualizuj Tenant.



Struktura użytkownika najemcy 
TenantUser definiuje User, którym zarządza konkretny tenant. Ich konto jest w pełni kontrolowane przez tenant,
z którym są powiązani, a konto może być zaktualizowane lub usunięte za pomocą UI lub API.
Użytkownicy tenantów mogą być administratorami z wszystkimi uprawnieniami i dostępem do Tenant, albo mogą mieć ograniczone do konkretnych uprawnień,
takich jak moderacja komentarzy, dostęp do kluczy API itp.
Struktura obiektu TenantUser jest następująca:

GET /api/v1/tenant-users/:id 
Ta trasa zwraca pojedynczego TenantUsera po id.



GET /api/v1/tenant-users 
To API używa paginacji, realizowanej za pomocą parametru zapytania skip. TenantUsers są zwracane w stronach po 100, posortowane według signUpDate, username i id.
Koszt opiera się na liczbie zwróconych tenant users — 1 credit per 10 zwróconych tenant users.



POST /api/v1/tenant-users 
Ta ścieżka umożliwia dodanie pojedynczego TenantUser.
Tworzenie TenantUser ma następujące ograniczenia:
- Wymagane jest podanie
username. - Wymagane jest podanie
email. signUpDatenie może być w przyszłości.localemusi być na liście Obsługiwane lokalizacje.usernamemusi być unikalny na całym FastComments.com. Jeśli stanowi to problem, sugerujemy użycie SSO.emailmusi być unikalny na całym FastComments.com. Jeśli stanowi to problem, sugerujemy użycie SSO.- Nie można utworzyć więcej użytkowników najemcy niż zdefiniowano w
maxTenantUsersw Twoim pakiecie.
Możemy utworzyć TenantUser w następujący sposób



POST /api/v1/tenant-users/:id/send-login-link 
Ta trasa umożliwia wysłanie linku logowania do pojedynczego TenantUser.
Przydatne przy masowym tworzeniu użytkowników, aby nie instruować ich, jak logować się do FastComments.com. Spowoduje to po prostu wysłanie im "magicznego linku" do logowania, który wygasa po 30 days.
Istnieją następujące ograniczenia dotyczące wysyłania linku logowania do TenantUser:
TenantUsermusi już istnieć.- Musisz mieć dostęp do zarządzania
Tenant, do którego należyTenantUser.
Możemy wysłać link logowania do TenantUser w następujący sposób:

To spowoduje wysłanie wiadomości e-mail takiej jak Bob at TenantName is inviting you to be a moderator...


PATCH /api/v1/tenant-users/:id 
Ta trasa zapewnia możliwość aktualizacji pojedynczego TenantUser.
Aktualizacja TenantUser ma następujące ograniczenia:
signUpDatenie może być w przyszłości.localemusi znajdować się na liście Obsługiwane lokalizacje.usernamemusi być unikalny w całym serwisie FastComments.com. Jeśli to problem, sugerujemy użycie SSO.emailmusi być unikalny w całym serwisie FastComments.com. Jeśli to problem, sugerujemy użycie SSO.- Nie można zaktualizować
tenantIdużytkownika.
Możemy utworzyć TenantUser w następujący sposób



DELETE /api/v1/tenant-users/:id 
Ta trasa umożliwia usunięcie TenantUser po id.
Usunięcie komentarzy użytkownika jest możliwe za pomocą parametru zapytania deleteComments. Zauważ, że jeśli to jest true:
- Wszystkie komentarze użytkownika zostaną usunięte na żywo.
- Wszystkie child (teraz osierocone) komentarze zostaną usunięte lub zanonimizowane w zależności od konfiguracji strony powiązanej z każdym komentarzem. Na przykład jeśli tryb usuwania wątku to "anonymize", odpowiedzi pozostaną, a komentarze użytkownika zostaną zanonimizowane. Dotyczy to tylko gdy
commentDeleteModema wartośćRemove(wartość domyślna). creditsCostzmienia się na2.
Zanonimizowane komentarze
Możesz zachować komentarze użytkownika, ale zanonimizować je, ustawiając commentDeleteMode=1.
Jeśli komentarze użytkownika zostaną zanonimizowane, następujące wartości zostaną ustawione na null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted i isDeletedUser zostają ustawione na true.
Podczas renderowania widget komentarzy użyje DELETED_USER_PLACEHOLDER (domyślnie: "[deleted]") jako nazwy użytkownika oraz DELETED_CONTENT_PLACEHOLDER dla treści komentarza. Można je dostosować za pomocą interfejsu Widget Customization UI.
Przykłady



Struktura użytkownika 
User to obiekt, który reprezentuje wspólny mianownik wszystkich użytkowników.
Pamiętaj, że w FastComments mamy wiele różnych zastosowań użytkowników:
- Secure SSO
- Simple SSO
- Tenant Users (Na przykład: Administratorzy)
- Commenters
To API jest przeznaczone dla Commenters oraz użytkowników utworzonych przez Simple SSO. Zasadniczo każdy użytkownik utworzony przez Twoją stronę może być dostępny przez to API. Tenant Users można również pobrać w ten sposób, ale uzyskasz więcej informacji, korzystając z API /tenant-users/.
Dla Secure SSO użyj API /sso-users/.
Nie możesz aktualizować tych typów użytkowników. Utworzyli oni swoje konto przez Twoją stronę, więc zapewniamy podstawowy dostęp tylko do odczytu, ale nie możesz wprowadzać zmian. Jeśli chcesz mieć taki sposób działania — musisz skonfigurować Secure SSO.
Struktura obiektu User jest następująca:

GET /api/v1/users/:id 
Ta trasa zwraca pojedynczego użytkownika według id.



Struktura głosu 
Obiekt Vote reprezentuje głos oddany przez użytkownika.
Relacja między komentarzami a głosami jest określona za pomocą commentId.
Struktura obiektu Vote jest następująca:

GET /api/v1/votes 
Głosy muszą być pobierane za pomocą urlId.
Typy głosów
Istnieją trzy rodzaje głosów:
- Uwierzytelnione głosy, które są przypisane do odpowiadającego komentarza. Możesz je tworzyć za pomocą tego API.
- Uwierzytelnione głosy, które są w oczekiwaniu na weryfikację, i w związku z tym nie zostały jeszcze zastosowane do komentarza. Są tworzone, gdy użytkownik użyje mechanizmu FastComments.com login to vote.
- Anonimowe głosy, które są przypisane do odpowiadającego komentarza. Są tworzone wraz z anonimowym komentowaniem.
Są one zwracane w oddzielnych listach w API, aby zmniejszyć zamieszanie.



Uwagi dotyczące anonimowych głosów
Zauważ, że anonimowe głosy utworzone za pomocą tego API będą pojawiać się na liście appliedAuthorizedVotes. Są one uznawane za autoryzowane, ponieważ zostały utworzone przez API z wykorzystaniem klucza API.
Struktura appliedAnonymousVotes dotyczy głosów utworzonych bez adresu e-mail, klucza API itp.
GET /api/v1/votes/for-user 
Pozwala pobrać głosy oddane przez użytkownika na danym urlId. Przyjmuje userId, który może być dowolnym użytkownikiem FastComments.com lub SSO User.
Jest to przydatne, jeśli chcesz pokazać, czy użytkownik zagłosował na komentarz. Podczas pobierania komentarzy po prostu wywołaj to API jednocześnie dla użytkownika z tym samym urlId.
Jeśli używasz anonimowego głosowania, zamiast tego przekaż anonUserId.


Zauważ, że anonimowe głosy pojawią się na liście appliedAuthorizedVotes. Są one traktowane jako autoryzowane, ponieważ zostały utworzone za pomocą API z kluczem API.


POST /api/v1/votes 
Ta ścieżka umożliwia dodanie pojedynczego autoryzowanego Vote. Głosy mogą być up (+1) lub down (-1).




Tworzenie anonimowych głosów
Anonimowe głosy można tworzyć, ustawiając anonUserId w parametrach zapytania zamiast userId.
To id nie musi odpowiadać żadnemu obiektowi użytkownika (stąd anonimowość). Jest to po prostu identyfikator sesji, dzięki czemu można ponownie pobrać głosy w tej samej sesji, aby sprawdzić, czy na komentarz zagłosowano.
Jeśli nie masz czegoś takiego jak „anonimowe sesje”, jak robi to FastComments — możesz po prostu ustawić to na losowe ID, np. UUID (chociaż doceniamy mniejsze identyfikatory, aby oszczędzić miejsce).
Inne uwagi
- To API przestrzega ustawień na poziomie tenanta. Na przykład, jeśli wyłączysz głosowanie na danej stronie i spróbujesz utworzyć głos przez API, zakończy się to błędem z kodem
voting-disabled. - To API jest domyślnie aktywne.
- To API zaktualizuje
votesodpowiadającegoComment.
DELETE /api/v1/votes/:id 
Ta ścieżka umożliwia usunięcie pojedynczego Vote.



Notes:
- To API przestrzega ustawień na poziomie najemcy. Na przykład, jeśli wyłączysz głosowanie dla danej strony, i spróbujesz utworzyć głos przez API, operacja zakończy się niepowodzeniem z kodem błędu
voting-disabled. - To API jest domyślnie aktywne.
- To API zaktualizuje
votesodpowiadającegoComment.
Struktura konfiguracji domeny 
A DomainConfig object represents configuration for a domain for a tenant.
The structure for the DomainConfig object is as follows:


Do uwierzytelniania
Konfiguracja domeny jest używana do określenia, które strony mogą hostować widget FastComments dla Twojego konta. Jest to podstawowa forma uwierzytelniania, co oznacza, że dodanie lub usunięcie konfiguracji domen może wpłynąć na dostępność Twojej instalacji FastComments w środowisku produkcyjnym.
Don't remove or update the domain property of a Domain Config for a domain that is currently in use unless disabling that domain is intended.
This has the same behavior as removing a domain from /auth/my-account/configure-domains.
Also note that removing a domain from the My Domains UI will remove any corresponding configuration for that domain that may have been added via this UI.
Dostosowywanie e-maili
The unsubscribe link in the email footer, and the one-click-unsubscribe feature offered by many email clients, can be configured via this API by defining footerUnsubscribeURL and emailHeaders, respectively.
DKIM
Po zdefiniowaniu rekordów DNS DKIM, wystarczy zaktualizować obiekt DomainConfig o konfigurację DKIM, używając podanej struktury.
GET /api/v1/domain-configs 
To API umożliwia pobranie wszystkich obiektów DomainConfig dla danego najemcy.



GET /api/v1/domain-configs/:domain 
Pojedyncze DomainConfig można pobrać, używając odpowiadającej im domain.



POST /api/v1/domain-configs 
Ten endpoint API umożliwia tworzenie konfiguracji domen.
Dodanie konfiguracji dla domeny autoryzuje tę domenę dla konta FastComments.
Typowe zastosowania tego API to początkowa konfiguracja, gdy trzeba dodać wiele domen, lub niestandardowa konfiguracja wysyłania e-maili.



PATCH /api/v1/domain-configs/:domain 
Ten endpoint API umożliwia zaktualizowanie konfiguracji domeny, podając tylko domenę oraz atrybut do zaktualizowania.



PUT /api/v1/domain-configs/:domain 
Ten endpoint API umożliwia zastąpienie konfiguracji domeny.



DELETE /api/v1/domain-configs/:domain 
Ta trasa umożliwia usunięcie pojedynczego DomainConfig według identyfikatora.
- Uwaga: Usunięcie
DomainConfigspowoduje odebranie autoryzacji tej domenie do korzystania z FastComments. - Uwaga: Ponowne dodanie domeny przez UI spowoduje ponowne utworzenie obiektu (z wypełnioną jedynie właściwością
domain).



Struktura konfiguracji pytania 
FastComments zapewnia sposób tworzenia pytań i agregowania ich wyników. Przykładem pytania (dalej nazywanego QuestionConfig) może być ocena w gwiazdkach, suwak lub pytanie NPS (określane przez type).
Dane z pytań można agregować indywidualnie, łącznie, w czasie, ogólnie, według strony i tak dalej.
Framework posiada wszystkie niezbędne możliwości do budowy widgetów po stronie klienta (z Twoim serwerem przed tym API), paneli administracyjnych i narzędzi raportujących.
Najpierw musimy zdefiniować QuestionConfig. Struktura jest następująca:

GET /api/v1/question-configs 
Ta trasa zwraca do 100 obiektów QuestionConfig na raz, z paginacją. Koszt to 1 na każde 100 obiektów. One są
posortowane rosnąco według tekstu pytania (question field).



GET /api/v1/question-configs/:id 
Ta ścieżka zwraca pojedynczy QuestionConfig na podstawie jego id.



POST /api/v1/question-configs 
Ten punkt końcowy API umożliwia utworzenie QuestionConfig.



PATCH /api/v1/question-configs/:id 
Ta trasa umożliwia aktualizację pojedynczego QuestionConfig.
Poniższa struktura przedstawia wszystkie wartości, które można zmienić:




DELETE /api/v1/question-configs/:id 
Ta trasa zapewnia usunięcie QuestionConfig według id.
Spowoduje to usunięcie wszystkich odpowiadających wyników pytań (ale nie komentarzy). Jest to część wysokiego kosztu kredytów.



Struktura wyniku pytania 
Aby zapisać wyniki dla pytań, tworzysz QuestionResult. Następnie możesz agregować wyniki pytań, a także powiązać je z komentarzami do celów raportowania.

GET /api/v1/question-results 
Ta trasa zwraca maksymalnie 1000 obiektów QuestionResults jednocześnie, stronicowanych. Koszt to 1 za każde 100 obiektów. Są
posortowane według createdAt, rosnąco. Możesz filtrować według różnych parametrów.



GET /api/v1/question-results/:id 
Ten endpoint zwraca pojedynczy QuestionResult na podstawie jego id.



POST /api/v1/question-results 
Ten punkt końcowy API umożliwia utworzenie QuestionResult.



PATCH /api/v1/question-results/:id 
Ta trasa umożliwia aktualizację pojedynczego QuestionResult.
Poniższa struktura przedstawia wszystkie wartości, które można zmienić:




DELETE /api/v1/question-results/:id 
Ta trasa umożliwia usunięcie QuestionResult według id.



GET /api/v1/question-results-aggregate 
Tutaj odbywa się agregacja wyników.
Struktura odpowiedzi agregacji wygląda następująco:

Oto parametry zapytania dostępne dla agregacji:

Oto przykład żądania:

Przykładowa odpowiedź:


Uwagi dotyczące wydajności
- W przypadku braku w pamięci podręcznej agregacje zazwyczaj zajmują pięć sekund na milion wyników.
- W przeciwnym razie żądania wykonują się w stałym czasie.
Uwagi dotyczące pamięci podręcznej i kosztów
- Gdy
forceRecalculatejest określone, koszt zawsze wynosi10, zamiast standardowego2. - Jeżeli pamięć podręczna wygaśnie i dane zostaną przeliczone, koszt wciąż wynosi stałe
2, jeśliforceRecalculatenie jest określone. Pamięć podręczna wygasa w zależności od rozmiaru agregowanego zestawu danych (może się wahać między 30 sekundami a 5 minutami). - Ma to na celu zachęcenie do korzystania z pamięci podręcznej.
GET /api/v1/question-results-aggregate/combine/comments 
Tutaj odbywa się łączenie wyników z komentarzami. Przydatne np. do tworzenia wykresu „ostatnie pozytywne i negatywne komentarze” dla produktu.
Możesz wyszukiwać w zakresie wartości (włącznie), dla jednego lub kilku pytań oraz według daty początkowej (włącznie).
Struktura odpowiedzi jest następująca:

Oto parametry zapytania dostępne do agregacji:

Oto przykład żądania:

Przykładowa odpowiedź:


Pamięć podręczna i uwagi dotyczące kosztów
- Gdy podano
forceRecalculate, koszt zawsze wynosi10, zamiast normalnego2. - Jeśli pamięć podręczna wygaśnie i dane zostaną przeliczone, koszt nadal wynosi
2, jeśli nie podanoforceRecalculate. - Ma to na celu zachęcenie do korzystania z pamięci podręcznej.
Struktura odznaki użytkownika 
UserBadge jest obiektem, który reprezentuje odznakę przypisaną użytkownikowi w systemie FastComments.
Odznaki mogą być przydzielane użytkownikom automatycznie na podstawie ich aktywności (takiej jak liczba komentarzy, czas odpowiedzi, status weterana) lub ręcznie przez administratorów strony.
Struktura dla obiektu UserBadge jest następująca:

GET /api/v1/user-badges 
Ten punkt końcowy pozwala pobrać odznaki użytkowników na podstawie różnych kryteriów.
Przykładowe żądanie:
Run 
Możesz dodać różne parametry zapytania, aby filtrować wyniki:
userId- Pobierz odznaki dla konkretnego użytkownikabadgeId- Pobierz wystąpienia konkretnej odznakitype- Filtruj według typu odznaki (0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, itd. Zobacz strukturę UserBadge, aby poznać pełną listę)displayedOnComments- Filtruj według tego, czy odznaka jest wyświetlana przy komentarzach (true/false)limit- Maksymalna liczba zwracanych odznak (domyślnie 30, maks. 200)skip- Liczba odznak do pominięcia (do paginacji)
Przykładowa odpowiedź:

Możliwe odpowiedzi z błędem:


GET /api/v1/user-badges/:id 
Ten endpoint pozwala pobrać konkretną odznakę użytkownika według jej unikalnego ID.
Przykład żądania:
Run 
Przykładowa odpowiedź:

Możliwe odpowiedzi z błędem:


POST /api/v1/user-badges 
Ten endpoint umożliwia utworzenie nowego przypisania odznaki użytkownikowi.
Przykładowe żądanie:
Run 
Ciało żądania musi zawierać następujące parametry:
userId(required) - The ID of the user to assign the badge tobadgeId(required) - The ID of the badge to assigndisplayedOnComments(optional) - Whether the badge should be displayed on the user's comments (defaults to true)
Ważne uwagi:
- Odznaka musi istnieć i być włączona w katalogu odznak twojego tenant
- Możesz przypisywać odznaki tylko użytkownikom, którzy należą do twojego tenant lub skomentowali twoją stronę
Przykładowa odpowiedź:

Możliwe odpowiedzi z błędem:





PUT /api/v1/user-badges/:id 
Ten endpoint pozwala zaktualizować przypisanie odznaki użytkownika.
Obecnie jedyną właściwością, którą można zaktualizować, jest displayedOnComments, która kontroluje, czy odznaka jest wyświetlana przy komentarzach użytkownika.
Przykład żądania:
Run 
Przykład odpowiedzi:

Możliwe odpowiedzi z błędami:



DELETE /api/v1/user-badges/:id 
Ten endpoint umożliwia usunięcie przypisania odznaki użytkownika.
Przykładowe żądanie:
Run 
Przykładowa odpowiedź:

Możliwe odpowiedzi błędów:



Struktura postępu odznaki użytkownika 
UserBadgeProgress to obiekt, który reprezentuje postęp użytkownika w zdobywaniu różnych odznak w systemie FastComments.
To śledzenie pomaga określić, kiedy użytkownicy powinni otrzymać automatyczne odznaki na podstawie ich aktywności i uczestnictwa w Twojej społeczności.
Struktura obiektu UserBadgeProgress jest następująca:

GET /api/v1/user-badge-progress 
Ten endpoint pozwala pobrać rekordy postępów odznak użytkownika na podstawie różnych kryteriów.
Przykład żądania:
Run 
Możesz dodać różne parametry zapytania, aby filtrować wyniki:
userId- Pobierz postęp dla konkretnego użytkownikalimit- Maksymalna liczba rekordów do zwrócenia (domyślnie 30, maks. 200)skip- Liczba rekordów do pominęcia (do paginacji)
Przykładowa odpowiedź:

Możliwe odpowiedzi z błędem:


GET /api/v1/user-badge-progress/:id 
Ten endpoint umożliwia pobranie konkretnego rekordu postępu odznaki użytkownika na podstawie jego unikalnego identyfikatora.
Przykładowe żądanie:
Run 
Przykładowa odpowiedź:

Możliwe odpowiedzi błędów:


GET /api/v1/user-badge-progress/user/:userId 
Ten endpoint pozwala pobrać rekord postępu odznak użytkownika na podstawie jego identyfikatora.
Przykładowe żądanie:
Run 
Przykładowa odpowiedź:

Możliwe odpowiedzi z błędem:



W podsumowaniu
Mamy nadzieję, że nasza dokumentacja API była wyczerpująca i łatwa do zrozumienia. Jeśli znajdziesz jakieś luki, daj nam znać poniżej.