
Lingua 🇮🇹 Italiano
Risorse API
Aggregazioni
Log di audit
Commenti
Modelli email
Hashtag
Moderatori
Conteggio notifiche
Notifiche
Pagine
Eventi webhook in sospeso
Utenti SSO
Abbonamenti
Utilizzo giornaliero del tenant
Tenant
Pacchetti tenant
Utenti tenant
Utenti
Voti
Configurazioni dominio
Configurazioni delle domande
Risultati delle domande
Aggregazione dei risultati delle domande
Badge utente
Progresso badge utente
L'API di FastComments
FastComments fornisce un'API per interagire con molte risorse. Crea integrazioni con la nostra piattaforma, o persino costruisci i tuoi client!
In questa documentazione troverai tutte le risorse supportate dall'API documentate con i loro tipi di richiesta e risposta.
Per i clienti Enterprise, tutto l'accesso all'API viene registrato nel registro di audit.
SDK generati
FastComments ora genera una Specifiche API dal nostro codice (non è ancora completa, ma include molte API).
Abbiamo inoltre SDK per i linguaggi più diffusi:
- fastcomments-cpp
- fastcomments-go
- fastcomments-java
- fastcomments-sdk-js
- fastcomments-nim
- fastcomments-php
- fastcomments-php-sso
- fastcomments-python
- fastcomments-ruby
- fastcomments-rust
- fastcomments-swift
Autenticazione
L'API si autentica passando la tua chiave API come intestazione X-API-KEY oppure come parametro di query API_KEY. Avrai anche bisogno del tuo tenantId per effettuare chiamate API. Puoi recuperarlo dalla stessa pagina della tua chiave API.
Nota sulla sicurezza
Questi endpoint sono pensati per essere chiamati da un server. NON CHIAMARLI da un browser. In questo modo esporrai la tua chiave API - ciò concederà accesso completo al tuo account a chiunque possa visualizzare il codice sorgente di una pagina!
Opzione di autenticazione uno - Intestazioni
- Header:
X-API-KEY - Header:
X-TENANT-ID
Opzione di autenticazione due - Parametri di query
- Query Param:
API_KEY - Query Param:
tenantId
Risorse API 
Utilizzo delle risorse
Si noti che il recupero dei dati dall'API viene conteggiato come utilizzo sul tuo account.
Ogni risorsa indicherà quale sia tale utilizzo nella propria sezione.
Alcune risorse costano più di altre da servire. Ogni endpoint ha un costo fisso di crediti per chiamata API. Per alcuni endpoint, il numero di crediti varia in base alle opzioni e alle dimensioni delle risposte.
L'utilizzo dell'API può essere controllato nella pagina Analisi della fatturazione ed è aggiornato ogni pochi minuti.
Nota!
Suggeriamo di leggere prima la documentazione Pages, per limitare la confusione quando si determina quali valori passare per urlId nella Comment API.
Aggrega i tuoi dati 
Questa API aggrega documenti raggruppandoli (se viene fornito groupBy) e applicando più operazioni. Sono supportate diverse operazioni (ad es. sum, countDistinct, avg, ecc.).
Il costo è variabile. Ogni 500 oggetti scansionati costa 1 credito API.
La memoria massima consentita per chiamata API di default è 64MB, e per impostazione predefinita puoi avere una sola aggregazione in esecuzione alla volta. Se invii più aggregazioni simultaneamente, verranno messe in coda ed eseguite nell'ordine di invio. Le aggregazioni in attesa rimarranno in coda per un massimo di 60 secondi, dopodiché la richiesta scadrà. Le singole aggregazioni possono essere eseguite per un massimo di 5 minuti.
Se hai tenant gestiti, puoi aggregare tutte le risorse dei tenant figli in una singola chiamata passando il parametro di query parentTenantId.
Esempi
Esempio: Conteggio valori unici


Esempio: Conteggio valori distinti

Risposta:

Esempio: Somma dei valori di più campi

Risposta:

Esempio: Media dei valori di più campi

Risposta:

Esempio: Valori min/max di più campi

Risposta:

Esempio: Conteggio valori unici di più campi

Risposta:

Esempio: Creazione di query

Risposta:

Esempio: Conteggio dei commenti in attesa di revisione

Risposta:

Esempio: Ripartizione dei commenti approvati, revisionati e spam

Risposta:

Strutture


Le seguenti risorse possono essere aggregate:
- 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
Struttura dei log di audit 
Un AuditLog è un oggetto che rappresenta un evento sottoposto ad audit per i tenant che hanno accesso a questa funzionalità.
La struttura dell'oggetto AuditLog è la seguente:

Il registro di audit è immutabile. Inoltre non può essere scritto manualmente. Solo FastComments.com può decidere quando scrivere nel registro di audit. Tuttavia, è possibile leggerlo tramite questa API.
Gli eventi nel registro di audit scadono dopo due anni.
GET /api/v1/audit-logs 
Questa API utilizza la paginazione, fornita dai parametri skip, before e after. AuditLogs vengono restituiti in pagine di 1000, ordinate per when e id.
Recuperare ogni 1000 log ha un costo in crediti di 10.
Per impostazione predefinita, riceverai una lista con i più recenti per primi. In questo modo, puoi eseguire il polling iniziando con skip=0, impaginando finché non trovi l'ultimo record che hai consumato.
In alternativa, puoi ordinare dal più vecchio al più recente e impaginare fino a quando non ci sono più record.
L'ordinamento può essere effettuato impostando order su ASC o DESC. Il valore predefinito è ASC.
È possibile effettuare query per data tramite before e after come timestamp in millisecondi. before e after NON sono inclusivi.



Struttura del commento 
Un oggetto Comment rappresenta un commento lasciato da un utente.
La relazione tra commenti genitore e figli è definita tramite parentId.
La struttura dell'oggetto Comment è la seguente:

Alcuni di questi campi sono contrassegnati come READONLY - vengono restituiti dall'API ma non possono essere impostati.
Struttura del Testo del Commento
I commenti sono scritti in una variante di markdown di FastComments, che è semplicemente markdown più i tradizionali tag in stile bbcode per le immagini, ad esempio [img]path[/img].
Il testo è memorizzato in due campi. Il testo inserito dall'utente è memorizzato non modificato nel campo comment. Questo viene renderizzato e memorizzato nel campo commentHTML.
I tag HTML consentiti sono b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br.
Si consiglia di renderizzare l'HTML, dato che è un sottinsieme molto piccolo di HTML: creare un renderer è piuttosto semplice. Esistono diverse librerie per React Native e Flutter, ad esempio, che possono aiutare in questo
È possibile scegliere di renderizzare il valore non normalizzato del campo comment. Un parser di esempio è qui..
Il parser di esempio può anche essere adattato per funzionare con HTML e trasformare i tag HTML negli elementi attesi da renderizzare per la tua piattaforma.
Menzioni
Quando gli utenti vengono taggati in un commento, le informazioni vengono memorizzate in una lista chiamata mentions. Ogni oggetto in quella lista
ha la seguente struttura.
Run 
Hashtag
Quando gli hashtag vengono usati e correttamente parsati, le informazioni sono memorizzate in una lista chiamata hashTags. Ogni oggetto in quella lista
ha la seguente struttura. Gli hashtag possono anche essere aggiunti manualmente all'array hashTags del commento per le query, se retain è impostato.
Run 
GET /api/v1/comments 
Questa API viene utilizzata per ottenere i commenti da mostrare a un utente. Per esempio, filtra automaticamente i commenti non approvati o lo spam.
Paginazione
La paginazione può essere fatta in uno di due modi, a seconda dei requisiti di performance e del caso d'uso:
- Più veloce: Paginazione Precalcolata:
- Questo è il modo in cui FastComments funziona quando si utilizzano i nostri widget e client predefiniti.
- Cliccare su "next" semplicemente incrementa il conteggio della pagina.
- Si può pensare a questo come recuperato da un key-value store.
- In questo modo, definire semplicemente un parametro
pageche inizia da0e una direzione di ordinamentodirection. - Le dimensioni delle pagine possono essere personalizzate tramite regole di customizzazione.
- Più flessibile: Paginazione Flessibile:
- In questo modo puoi definire parametri personalizzati
limiteskip. Non passarepage. - È supportata anche la direzione di ordinamento
direction. limitè il numero totale da restituire dopo cheskipè stato applicato.- Esempio: imposta
skip = 200, limit = 100quandopage size = 100epage = 2.
- Esempio: imposta
- I commenti figli contano ancora nella paginazione. Puoi aggirare questo usando l'opzione
asTree.- Puoi effettuare la paginazione dei figli tramite
limitChildreneskipChildren. - Puoi limitare la profondità dei thread restituiti tramite
maxTreeDepth.
- Puoi effettuare la paginazione dei figli tramite
- In questo modo puoi definire parametri personalizzati
Thread
- Quando si utilizza la
Paginazione Precalcolata, i commenti sono raggruppati per pagina e i commenti nei thread influenzano la pagina complessiva.- In questo modo, i thread possono essere determinati sul client in base a
parentId. - Per esempio, con una pagina con un commento di primo livello e 29 risposte, impostando
page=0nell'API — otterrai solo il commento di primo livello e i 29 figli. - Immagine di esempio qui che illustra più pagine.
- In questo modo, i thread possono essere determinati sul client in base a
- Quando si utilizza la
Paginazione Flessibile, puoi definire un parametroparentId.- Impostalo su null per ottenere solo i commenti di primo livello.
- Poi, per visualizzare i thread, richiama l'API e passa
parentId. - Una soluzione comune è effettuare una chiamata API per i commenti di primo livello e poi effettuare chiamate API parallele per ottenere i commenti figli di ciascun commento.
- NUOVO da febbraio 2023! Recupera come albero usando
&asTree=true.- Puoi pensarlo come una
Paginazione Flessibile come Albero. - Solo i commenti di primo livello contano nella paginazione.
- Imposta
parentId=nullper iniziare l'albero alla radice (devi impostareparentId). - Imposta
skipelimitper la paginazione. - Imposta
asTreesutrue. - Il costo in crediti aumenta di
2x, poiché il nostro backend deve fare molto più lavoro in questo scenario. - Imposta
maxTreeDepth,limitChildreneskipChildrencome desiderato.
- Puoi pensarlo come una
Alberi Spiegati
Quando si usa asTree, può essere difficile comprendere la paginazione. Ecco un grafico utile:
Recupero dei Commenti nel Contesto di un Utente
L'API /comments può essere utilizzata in due contesti, per diversi casi d'uso:
- Per restituire commenti ordinati e taggati con informazioni per costruire il proprio client.
- In questo caso, definisci un parametro di query
contextUserId.
- In questo caso, definisci un parametro di query
- Per recuperare commenti dal tuo backend per integrazioni personalizzate.
- La piattaforma userà questo comportamento di default senza
contextUserId.
- La piattaforma userà questo comportamento di default senza




Ottenere i Commenti come un Albero
È possibile ottenere i commenti restituiti come un albero, con la paginazione che conta solo i commenti di primo livello.

Vuoi ottenere solo i commenti di primo livello e i figli immediati? Ecco un modo:

Tuttavia, nella tua UI potresti aver bisogno di sapere se mostrare un pulsante "mostra risposte" su
ogni commento. Quando si recuperano commenti tramite un albero esiste una proprietà hasChildren aggiunta
ai commenti quando applicabile.
Ottenere i Commenti come un Albero, Ricerca per Hashtag
È possibile cercare per hashtag usando l'API, su tutto il tenant (non limitato a una singola pagina o a urlId).
In questo esempio, omettiamo urlId, e cerchiamo per più hashtag. L'API restituirà solo i commenti che contengono tutti gli hashtag richiesti.

Tutti i Parametri della Richiesta

La Risposta

Suggerimenti Utili
URL ID
Probabilmente vorrai usare l'API Comment con il parametro urlId. Puoi chiamare prima l'API Pages, per vedere come sono i valori urlId disponibili per te.
Azioni Anonime
Per commentare in modo anonimo probabilmente vorrai passare anonUserId quando recuperi i commenti, e quando effettui segnalazioni e blocchi.
(!) Questo è richiesto da molti store di app poiché gli utenti devono essere in grado di segnalare contenuti creati dagli utenti che possono vedere, anche se non hanno effettuato l'accesso. Non farlo potrebbe causare la rimozione della tua app da tali store.
Commenti Non Restituiti
Controlla che i tuoi commenti siano approvati e che non siano spam.
GET /api/v1/comments/:id 
Questa API fornisce la possibilità di recuperare un singolo commento tramite id.



POST /api/v1/comments 
Questo endpoint API consente di creare commenti.
Gli usi comuni sono interfacce utente personalizzate, integrazioni o importazioni.
Note:
- Questa API può aggiornare il widget dei commenti in "live" se desiderato (questo aumenta
creditsCostda1a2). - Questa API creerà automaticamente oggetti utente nel nostro sistema se viene fornita un'email.
- Tentare di salvare due commenti con email diverse, ma lo stesso username, risulterà in un errore per il secondo commento.
- Se specifichi
parentId, e un commento figlio hanotificationSentForParentimpostato su false, invieremo notifiche per il commento genitore. Questo viene fatto ogni ora (raggruppiamo le notifiche insieme per diminuire il numero di email inviate). - Se vuoi inviare email di benvenuto quando crei utenti, o email di verifica del commento, imposta
sendEmailssutruenei parametri di query. - I commenti creati tramite questa API appariranno nelle pagine Analytics e Moderation dell'app di amministrazione.
- Le "bad words" sono ancora mascherate nei nomi dei commentatori e nel testo del commento se l'impostazione è attivata.
- I commenti creati tramite questa API possono comunque essere controllati per spam, se desiderato.
- La configurazione come la lunghezza massima del commento, se configurata tramite la pagina admin Customization Rule, si applicherà qui.
I dati minimi richiesti per l'invio che verranno visualizzati nel widget dei commenti, sono i seguenti:

Una richiesta più realistica potrebbe apparire così:



PATCH /api/v1/comments/:id 
Questo endpoint API consente di aggiornare un singolo commento.
Note:
- Questa API può aggiornare il widget dei commenti "live" se desiderato (questo aumenta il
creditsCostbase da1a2).- Questo può rendere "live" la migrazione dei commenti tra pagine (cambiando
urlId). - Le migrazioni costano ulteriori
2crediti poiché le pagine vengono precalcolate ed è intensivo in termini di CPU.
- Questo può rendere "live" la migrazione dei commenti tra pagine (cambiando
- A differenza dell'API di creazione, questa API NON creerà automaticamente oggetti utente nel nostro sistema se viene fornita un'email.
- I commenti aggiornati tramite questa API possono ancora essere controllati per spam se desiderato.
- Le configurazioni come la lunghezza massima del commento, se impostate tramite la pagina di amministrazione Customization Rule, si applicheranno qui.
- Per consentire agli utenti di aggiornare il testo del loro commento, è sufficiente specificare
commentnel corpo della richiesta. Genereremo ilcommentHTMLrisultante.- Se definisci sia
commentsiacommentHTML, non genereremo automaticamente l'HTML. - Se l'utente aggiunge menzioni o hashtag nel nuovo testo, verrà comunque elaborato come nell'API
POST.
- Se definisci sia
- Quando si aggiorna
commenterEmailsu un commento, è meglio specificare ancheuserId. Altrimenti, devi assicurarti che l'utente con questa email appartenga al tuo tenant, altrimenti la richiesta fallirà.



DELETE /api/v1/comments/:id 
Questo endpoint API consente di eliminare un commento.
Note:
- Questa API può aggiornare il widget dei commenti "live" se desiderato (ciò aumenta
creditsCostda1a2). - Questa API eliminerà tutti i commenti figli.



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 
Questo endpoint API fornisce la possibilità di rimuovere la segnalazione di un commento per uno specifico utente.
Note:
- Questa chiamata deve sempre essere effettuata nel contesto di un utente. L'utente può essere un FastComments.com User, SSO User, o Tenant User.
- Dopo che un commento è stato automaticamente non approvato (nascosto) - il commento può essere ri-approvato solo da un amministratore o moderatore. La rimozione della segnalazione (un-flag) non ri-approverà il commento.

Per la segnalazione anonima, dobbiamo specificare un anonUserId. Questo può essere un ID che rappresenta la sessione anonima, o un UUID casuale.



POST /api/v1/comments/:id/block 
Questo endpoint API consente di bloccare l'utente che ha scritto un determinato commento. Supporta il blocco per commenti scritti da FastComments.com Users, SSO Users, and Tenant Users.
Supporta un parametro nel body commentIdsToCheck per verificare se altri commenti potenzialmente visibili nel client debbano essere bloccati/sbloccati dopo l'esecuzione di questa azione.
Notes:
- Questa chiamata deve sempre essere effettuata nel contesto di un utente. L'utente può essere un FastComments.com User, SSO User, o Tenant User.
- Il
userIdnella richiesta è l'utente che sta eseguendo il blocco. Per esempio:User Avuole bloccareUser B. PassauserId=User Ae l'id del commento cheUser Bha scritto. - Commenti completamente anonimi (no user id, no email) non possono essere bloccati e verrà restituito un errore.

Per il blocco anonimo, dobbiamo specificare un anonUserId. Questo può essere un ID che rappresenta la sessione anonima, o un UUID casuale.
Questo ci permette di supportare il blocco dei commenti anche se un utente non è autenticato recuperando i commenti con lo stesso anonUserId.



POST /api/v1/comments/:id/un-block 
Questo endpoint API fornisce la possibilità di sbloccare un utente che ha scritto un determinato commento. Supporta lo sblocco di commenti scritti da FastComments.com Users, SSO Users, e Tenant Users.
Supporta un parametro body commentIdsToCheck per verificare se altri commenti potenzialmente visibili sul client dovrebbero essere bloccati/sbloccati dopo che questa azione è stata eseguita.
Note:
- Questa chiamata deve essere sempre effettuata nel contesto di un utente. L'utente può essere un FastComments.com User, SSO User, o Tenant User.
- Il
userIdnella richiesta è l'utente che sta effettuando lo sblocco. Per esempio:User Avuole sbloccareUser B. PassauserId=User Ae l'id del commento cheUser Bha scritto. - I commenti completamente anonimi (nessun user id, nessuna email) non possono essere bloccati e verrà restituito un errore.




Struttura del modello email 
Un oggetto EmailTemplate rappresenta la configurazione per un modello di posta elettronica personalizzato, per un tenant.
Il sistema selezionerà il modello di posta elettronica da utilizzare tramite:
- Il suo identificatore di tipo, che chiamiamo
emailTemplateId. Sono costanti. - The
domain. Cercheremo prima di trovare un template per il dominio a cui è legato l'oggetto correlato (come unComment), e se non viene trovata una corrispondenza proveremo a trovare un template in cui domain è null o*.
La struttura per l'oggetto EmailTemplate è la seguente:

Note
- Puoi ottenere i valori validi di
emailTemplateIddall'endpoint/definitions. - L'endpoint
/definitionsinclude anche le traduzioni predefinite e i dati di test. - I template non verranno salvati se la struttura o i dati di test non sono validi.
GET /api/v1/email-templates/:id 
I singoli EmailTemplate possono essere recuperati tramite il loro corrispondente id (NON emailTemplateId).



GET /api/v1/email-templates 
Questa API utilizza la paginazione, fornita dal parametro di query page. Gli EmailTemplates vengono restituiti in pagine da 100, ordinati per createdAt e poi per id.



PATCH /api/v1/email-templates/:id 
Questo endpoint API fornisce la possibilità di aggiornare un template email specificando solo l'id e gli attributi da aggiornare.
Nota che tutte le stesse validazioni per la creazione di un template si applicano anche qui, per esempio:
- Il template deve poter essere renderizzato. Questo viene controllato ad ogni aggiornamento.
- Non puoi avere template duplicati per lo stesso dominio (altrimenti uno verrebbe ignorato silenziosamente).



POST /api/v1/email-templates 
Questo endpoint API consente di creare modelli email.
Note:
- Non puoi avere più template con lo stesso
emailTemplateIdnello stesso dominio. - Tuttavia puoi avere un template wildcard (
domain=*) e un template specifico per dominio per lo stessoemailTemplateId. - Specificare
domainè rilevante solo se hai domini diversi, o vuoi usare template specifici per i test (domainimpostato sulocalhostecc). - Se specifichi
domaindeve corrispondere a unaDomainConfig. In caso di errore viene fornito un elenco di domini validi. - La sintassi del template è EJS e viene renderizzata con un timeout di 500ms. Il P99 per il rendering è <5ms, quindi se raggiungi i 500ms qualcosa non va.
- Il tuo template deve essere renderizzato con i
testDataforniti per poter essere salvato. Gli errori di rendering vengono aggregati e riportati nella dashboard (presto disponibile via API).
I dati minimi richiesti per aggiungere un template sono i seguenti:

Potresti voler avere template per sito, nel qual caso definisci domain:



POST /api/v1/email-templates/render 
Questo endpoint API fornisce la possibilità di visualizzare in anteprima i modelli di email.



DELETE /api/v1/email-templates/:id 
Questa route consente la rimozione di un singolo EmailTemplate tramite id.



Struttura dell'hashtag 
Un oggetto HashTag rappresenta un tag che può essere lasciato da un utente. Gli HashTag possono essere usati per collegarsi a un contenuto esterno o per
collegare insieme commenti correlati.
La struttura dell'oggetto HashTag è la seguente:

Note:
- In alcuni endpoint API vedrai che l'hashtag viene usato nell'URL. Ricordati di codificare i valori per URI. Per esempio,
#dovrebbe invece essere rappresentato come%23. - Alcuni di questi campi sono contrassegnati come
READONLY- vengono restituiti dall'API ma non possono essere impostati.
GET /api/v1/hash-tags 
Questa API utilizza la paginazione, fornita dal parametro di query page. Gli HashTag vengono restituiti in pagine di 100, ordinati per tag.



PATCH /api/v1/hash-tags/:tag 
Questa route consente di aggiornare un singolo HashTag.



POST /api/v1/hash-tags 
Questa route consente di aggiungere un singolo HashTag.



POST /api/v1/hash-tags/bulk 
Questa route consente di aggiungere fino a 100 oggetti HashTag alla volta.



DELETE /api/v1/hash-tags/:tag 
Questo endpoint permette la rimozione di un HashTag identificato dal tag fornito.
Nota che, a meno che la creazione automatica dei HashTag non sia disabilitata, gli hashtag possono essere ricreati da un utente che fornisce l'hashtag nel commento.



Struttura del moderatore 
Un oggetto Moderator rappresenta la configurazione per un moderatore.
Ci sono tre tipi di moderatori:
- Utenti amministratori che hanno il flag
isCommentModeratorAdmin. - Utenti SSO con il flag
isCommentModeratorAdmin. - Commentatori normali, o utenti FastComments.com, che vengono invitati come Moderatori.
La struttura Moderator viene usata per rappresentare lo stato di moderazione nel caso d'uso 3.
Se vuoi invitare un utente a diventare moderatore tramite l'API, usa l'API Moderator creando un Moderator e inviting them.
Se l'utente non ha un account FastComments.com, l'email di invito li aiuterà a configurarsi. Se hanno già un account, verrà loro concesso l'accesso di moderazione al tuo tenant e il userId dell'oggetto Moderator verrà aggiornato per puntare al loro utente. Non avrai accesso API al loro utente, poiché in questo caso l'account appartiene a loro ed è gestito da FastComments.com.
Se necessiti della gestione completa dell'account dell'utente, raccomandiamo di usare SSO oppure aggiungerli come Utente del tenant e poi aggiungere un oggetto Moderator per tracciare le loro statistiche.
La struttura Moderator può essere usata come meccanismo di tracciamento delle statistiche per i casi d'uso 1 e 2. Dopo aver creato l'utente, aggiungi un oggetto Moderator con il loro userId definito e le loro statistiche verranno tracciate nella Pagina Moderatori dei Commenti.
La struttura dell'oggetto Moderator è la seguente:

GET /api/v1/moderators/:id 
Questa route restituisce un singolo moderatore in base al suo id.



GET /api/v1/moderators 
Questa API utilizza la paginazione, fornita dal parametro di query skip. I moderatori vengono restituiti in pagine da 100, ordinati per createdAt e id.
Il costo si basa sul numero di moderatori restituiti, con un costo di 1 credit per 10 moderatori restituiti.



PATCH /api/v1/moderators/:id 
Questo endpoint API fornisce la possibilità di aggiornare un Moderator tramite id.
L'aggiornamento di un Moderator ha le seguenti restrizioni:
- I seguenti valori non possono essere forniti durante l'aggiornamento di un
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Quando viene specificato un
userId, l'utente deve esistere. - Quando viene specificato un
userId, questo deve appartenere allo stessotenantIdspecificato nei parametri di query. - Due moderatori nello stesso tenant non possono essere aggiunti con la stessa
email. - Non è possibile modificare il
tenantIdassociato a unModerator.



POST /api/v1/moderators 
Questa route fornisce la possibilità di aggiungere un singolo Moderator.
La creazione di un Moderator presenta le seguenti restrizioni:
- Devono sempre essere forniti
nameeemail.userIdè opzionale. - I seguenti valori non possono essere forniti durante la creazione di un
Moderator:acceptedInvitemarkReviewedCountdeletedCountmarkedSpamCountapprovedCounteditedCountbannedCountverificationIdcreatedAt
- Quando è specificato un
userId, l'utente deve esistere. - Quando è specificato un
userId, questo deve appartenere allo stessotenantIdspecificato nei parametri di query. - Due moderatori nello stesso tenant non possono essere aggiunti con la stessa
email.
Possiamo creare un Moderator per un utente di cui conosciamo solo l'email:

Oppure possiamo creare un Moderator per un utente che appartiene al nostro tenant, per monitorare le sue statistiche di moderazione:



POST /api/v1/moderators/:id/send-invite 
Questa route permette di invitare un singolo Moderator.
Le seguenti restrizioni si applicano per inviare un'email di invito a un Moderator:
- Il
Moderatordeve già esistere. - Il
fromNamenon può superare i100 characters.
Note:
- Se esiste già un utente con l'email fornita, gli verrà inviato un invito a moderare i commenti del tuo tenant.
- Se un utente con l'email fornita non esiste, il link d'invito lo guiderà nella creazione del proprio account.
- L'invito scade dopo
30 days.
Possiamo creare un Moderator per un utente di cui conosciamo solo l'email:

Questo invierà un'email come Bob at TenantName is inviting you to be a moderator...


DELETE /api/v1/moderators/:id 
Questa route consente la rimozione di un Moderator tramite id.



Struttura del conteggio notifiche 
Un oggetto NotificationCount rappresenta il conteggio delle notifiche non lette e i metadati per un utente.
Se non ci sono notifiche non lette, non esisterà alcun NotificationCount per l'utente.
Gli oggetti NotificationCount vengono creati automaticamente e non possono essere creati tramite l'API. Scadono inoltre dopo un anno.
Puoi azzerare il conteggio delle notifiche non lette di un utente eliminando il relativo NotificationCount.
La struttura dell'oggetto NotificationCount è la seguente:

GET /api/v1/notification-count/:user_id 
Questa route restituisce un singolo NotificationCount dato l'id utente. Con SSO, l'id utente è nel formato <tenant id>:<user id>.
Se non ci sono notifiche non lette, non ci sarà un NotificationCount - quindi otterrai un 404.
Questo è diverso da notifications/count in quanto è molto più veloce, ma non permette il filtraggio.



DELETE /api/v1/notification-count/:user_id 
Questa route elimina un singolo NotificationCount per ID utente. Con SSO, l'ID utente ha il formato <tenant id>:<user id>.
Questo azzererà il conteggio delle notifiche non lette dell'utente (la campanella rossa nel widget dei commenti svanirà e il conteggio scomparirà).



Struttura della notifica 
Un oggetto Notification rappresenta una notifica per un utente.
Gli oggetti Notification vengono creati automaticamente e non possono essere creati tramite l'API. Scadono inoltre dopo un anno.
Le notifiche non possono essere eliminate. Possono comunque essere aggiornate impostando viewed su false, e puoi interrogarle tramite viewed.
Un utente può anche rinunciare alle notifiche per un commento specifico impostando optedOut nella notifica su true. Puoi riattivare le notifiche impostandolo su false.
Esistono diversi tipi di notifiche - controlla relatedObjectType e type.
I metodi con cui vengono create le notifiche sono piuttosto flessibili e possono essere attivati da molti scenari (vedi NotificationType).
Al momento, l'esistenza di una Notification non implica necessariamente che una email sia stata o debba essere inviata. Piuttosto, le notifiche
sono utilizzate per il feed delle notifiche e le integrazioni correlate.
La struttura dell'oggetto Notification è la seguente:

GET /api/v1/notifications 
Questa route restituisce fino a 30 oggetti Notification ordinati per createdAt, dal più recente al più vecchio.
Puoi filtrare per userId. Con SSO, l'id utente è nel formato <tenant id>:<user id>.



GET /api/v1/notifications/count 
Questa route restituisce un oggetto contenente il numero di notifiche sotto il parametro count.
È più lenta di /notification-count/ e costa il doppio in crediti, ma permette di filtrare su più dimensioni.
Puoi filtrare con gli stessi parametri dell'endpoint /notifications come userId. Con SSO, l'id utente è nel formato <tenant id>:<user id>.




PATCH /api/v1/notifications/:id 
Questo endpoint API consente di aggiornare una Notification tramite id.
L'aggiornamento di una Notification presenta le seguenti restrizioni:
- È possibile aggiornare solo i seguenti campi:
viewedoptedOut



Struttura della pagina 
Un oggetto Page rappresenta la pagina a cui possono appartenere molti commenti. Questa relazione è definita da
urlId.
Un oggetto Page memorizza informazioni come il titolo della pagina, il numero di commenti e urlId.
La struttura per l'oggetto Page è la seguente:

GET /api/v1/pages 
Al momento puoi recuperare solo tutte le pagine (o una singola pagina tramite /by-url-id) associate al tuo account. Se desideri ricerche più dettagliate, contattaci.



Suggerimento utile
L'API Comment richiede un urlId. Puoi chiamare prima l'API Pages, per vedere quali valori urlId sono disponibili per te
e come appaiono.
GET /api/v1/pages/by-url-id 
Le singole pagine possono essere recuperate tramite il corrispondente urlId. Questo può essere utile per cercare i titoli delle pagine o il numero di commenti.



Suggerimento utile
Ricorda di codificare in URI valori come il urlId.
PATCH /api/v1/pages/:id 
Questa route fornisce la possibilità di aggiornare una singola Page. I commenti corrispondenti verranno aggiornati.



Nota
Alcuni parametri nell'oggetto Page vengono aggiornati automaticamente. Questi sono i conteggi e gli attributi del titolo. I conteggi non possono essere aggiornati tramite l'API poiché sono valori calcolati. Il title della pagina può essere impostato tramite l'API, ma verrebbe sovrascritto se il widget dei commenti viene utilizzato su una pagina con lo stesso urlId e un titolo di pagina diverso.
POST /api/v1/pages 
Questo endpoint API permette di creare pagine.
Un caso d'uso comune è il controllo degli accessi.
Note:
- Se hai commentato in un thread di commenti, o hai chiamato l'API per creare un
Comment, hai già creato un oggettoPage! Puoi provare a recuperarlo tramite la routePage/by-url-id, passando lo stessourlIdfornito al widget dei commenti. - La struttura
Pagecontiene alcuni valori calcolati. Attualmente, questi sonocommentCounterootCommentCount. Vengono popolati automaticamente e non possono essere impostati tramite l'API. Tentare di farlo farà sì che l'API restituisca un errore.



DELETE /api/v1/pages/:id 
Questa route consente la rimozione di una singola pagina tramite id.
Nota che interagire con il widget dei commenti per una pagina con lo stesso urlId ricreerà semplicemente la Page senza soluzione di continuità.



Struttura dell'evento webhook in sospeso 
Un oggetto PendingWebhookEvent rappresenta un evento webhook accodato in attesa.
PendingWebhookEvent objects are created automatically and cannot be manually created via the API. They also expire after one year.
Possono essere eliminati, il che rimuove il task dalla coda.
Esistono diversi tipi di eventi - controlla eventType (OutboundSyncEventType) e type (OutboundSyncType).
Un uso comune di questa API è implementare un monitoraggio personalizzato. Potresti voler chiamare periodicamente l'endpoint /count
per interrogare il conteggio in sospeso per filtri specifici.
La struttura dell'oggetto PendingWebhookEvent è la seguente:

GET /api/v1/pending-webhook-events 
Questa route restituisce un elenco di eventi webhook in sospeso sotto il parametro pendingWebhookEvents.
Questa API utilizza la paginazione, fornita dal parametro skip. PendingWebhookEvents vengono restituiti in pagine da 100, ordinati per createdAt dal più recente al più vecchio.



GET /api/v1/pending-webhook-events/count 
Questa route restituisce un oggetto contenente il numero di eventi webhook in sospeso sotto il parametro count.
Puoi filtrare con gli stessi parametri dell'endpoint /pending-webhook-events



DELETE /api/v1/pending-webhook-events/:id 
Questa route consente l'eliminazione di un singolo PendingWebhookEvent.
Se devi eliminare più elementi in blocco, chiama l'API GET con paginazione e poi richiama questa API in sequenza.



Struttura utente SSO 
FastComments fornisce una soluzione SSO facile da usare. Aggiornare le informazioni di un utente con l'integrazione basata su HMAC è semplice come fare in modo che l'utente carichi la pagina con un payload aggiornato.
Tuttavia, potrebbe essere desiderabile gestire un utente al di fuori di quel flusso, per migliorare la coerenza della tua applicazione.
L'SSO User API fornisce un modo per creare, leggere, aggiornare e cancellare oggetti che chiamiamo SSOUsers. Questi oggetti sono diversi dagli Users regolari e vengono mantenuti separati per sicurezza di tipo.
La struttura dell'oggetto SSOUser è la seguente:

Billing for SSO Users
Gli SSO users vengono fatturati in modo diverso in base ai loro flag di permesso:
- Regular SSO Users: Utenti senza permessi di admin o moderatore vengono fatturati come regular SSO users
- SSO Admins: Utenti con i flag
isAccountOwneroisAdminAdminvengono fatturati separatamente come SSO Admins (stessa tariffa degli admin regolari del tenant) - SSO Moderators: Utenti con il flag
isCommentModeratorAdminvengono fatturati separatamente come SSO Moderators (stessa tariffa dei moderatori regolari)
Importante: Per evitare doppia fatturazione, il sistema deduplica automaticamente gli SSO users rispetto agli utenti e moderatori regolari del tenant basandosi sull'indirizzo email. Se un SSO user ha la stessa email di un utente o moderatore regolare del tenant, non verrà fatturato due volte.
Access Control
Gli utenti possono essere suddivisi in gruppi. Questo è lo scopo del campo groupIds, ed è opzionale.
@Mentions
Di default @mentions utilizzerà username per cercare altri sso users quando viene digitato il carattere @. Se viene utilizzato displayName, allora i risultati che corrispondono a username saranno ignorati quando c'è una corrispondenza per displayName, e i risultati della ricerca per gli @mention useranno displayName.
Subscriptions
Con FastComments, gli utenti possono iscriversi a una pagina cliccando l'icona della campanella nel widget dei commenti e selezionando Subscribe.
Con un utente regolare, inviamo loro email di notifica in base alle loro impostazioni di notifica.
Con gli SSO Users, abbiamo separato questo comportamento per compatibilità retroattiva. Gli utenti riceveranno queste email di notifica aggiuntive per le subscription solo se imposti optedInSubscriptionNotifications su true.
Badges
Puoi assegnare badge agli SSO users usando la proprietà badgeConfig. I badge sono indicatori visivi che appaiono accanto al nome di un utente nei commenti.
badgeIds- Un array di ID dei badge da assegnare all'utente. Devono essere ID validi di badge creati nel tuo account FastComments. Limitato a 30 badge.override- Se true, tutti i badge esistenti visualizzati sui commenti saranno sostituiti con quelli forniti. Se false o omesso, i badge forniti saranno aggiunti a quelli esistenti.update- Se true, le proprietà di visualizzazione dei badge verranno aggiornate dalla configurazione del tenant ogni volta che l'utente effettua il login.
GET /api/v1/sso-users 
Questa route restituisce gli utenti SSO in pagine da 100. La paginazione è fornita dal parametro skip. Gli utenti sono ordinati per il loro signUpDate e id.



GET /api/v1/sso-users/by-id/:id 
Questa route restituisce un singolo utente SSO in base al suo id.



GET /api/v1/sso-users/by-email/:email 
Questa route restituisce un singolo utente SSO in base alla sua email.



PATCH /api/v1/sso-users/:id 
Questa route consente di aggiornare un singolo utente SSO.



POST /api/v1/sso-users 
Questa route fornisce la creazione di un singolo utente SSO.
Tentare di creare due utenti con lo stesso ID genererà un errore.

In questo esempio specifichiamo groupIds per il controllo degli accessi, ma è facoltativo.


Nota sull'integrazione
I dati inviati tramite l'API possono essere sovrascritti semplicemente passando un payload HMAC dell'utente SSO diverso. Ad esempio, se imposti un username tramite l'API, ma poi ne fornisci uno diverso tramite il flusso SSO al caricamento della pagina, aggiorneremo automaticamente il loro username.
Non aggiorneremo i parametri dell'utente in questo flusso a meno che non li specifichi esplicitamente o li imposti a null (non undefined).
PUT /api/v1/sso-users/:id 
Questa route consente di aggiornare un singolo utente SSO.

In questo esempio specifichiamo groupIds per il controllo degli accessi, ma questo è opzionale.


DELETE /api/v1/sso-users/:id 
Questa route fornisce la rimozione di un singolo utente SSO tramite il suo id.
Nota che ricaricando il widget dei commenti con un payload per questo utente verrà semplicemente ricreato l'utente in modo trasparente.
La cancellazione dei commenti dell'utente è possibile tramite il parametro di query deleteComments. Nota che se questo è true:
- Tutti i commenti dell'utente saranno cancellati in tempo reale.
- Tutti i commenti child (ora orfani) saranno cancellati o anonimizzati in base alla configurazione della pagina associata a ciascun commento. Per esempio, se la modalità di cancellazione del thread è "anonymize", allora le risposte rimarranno e i commenti dell'utente verranno anonimizzati. Questo si applica solo quando
commentDeleteModeèRemove(il valore predefinito). - Il
creditsCostdiventa2.
Commenti anonimizzati
Puoi conservare i commenti dell'utente ma semplicemente anonimizzarli impostando commentDeleteMode=1.
Se i commenti dell'utente vengono anonimizzati, i seguenti valori vengono impostati a null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted e isDeletedUser vengono impostati a true.
Durante il rendering, il widget dei commenti utilizzerà DELETED_USER_PLACEHOLDER (default: "[deleted]") per il nome dell'utente e DELETED_CONTENT_PLACEHOLDER per il commento. Questi possono essere personalizzati tramite l'interfaccia di personalizzazione del widget.
Esempi



Struttura dell'abbonamento 
Un oggetto Subscription rappresenta una sottoscrizione per un utente.
Gli oggetti Subscription vengono creati quando un utente clicca la campanella delle notifiche nel widget dei commenti e seleziona "Iscriviti a questa pagina".
Le sottoscrizioni possono anche essere create via API.
Avere un oggetto Subscription fa sì che vengano generati oggetti Notification e inviate email quando vengono lasciati nuovi commenti nella radice della pagina associata a cui la Subscription si riferisce. L'invio delle email dipende dal tipo di utente. Per gli utenti normali ciò dipende da optedInNotifications. Per gli utenti SSO ciò dipende da optedInSubscriptionNotifications. Nota che alcune applicazioni potrebbero non avere il concetto di una pagina accessibile via web, nel qual caso impostare semplicemente urlId sull'id dell'elemento a cui si sta sottoscrivendo (stesso valore per urlId che si passerebbe al widget dei commenti).
La struttura dell'oggetto Subscription è la seguente:

GET /api/v1/subscriptions/:id 
Questa route restituisce fino a 30 oggetti Subscription ordinati per createdAt, dal più recente.
Puoi filtrare per userId. Con SSO, l'ID utente ha il formato <tenant id>:<user id>.



POST /api/v1/subscriptions 
Questo endpoint API consente di creare una Subscription. Nota che un utente può avere soltanto una subscription per pagina, poiché più di una sarebbe ridondante, e provare
a creare più di una subscription per lo stesso utente sulla stessa pagina genererà un errore.
La creazione di una subscription farà sì che vengano creati oggetti Notification quando viene lasciato un nuovo commento nella root del urlId sottoscritto (quando il parentId del commento è null).



DELETE /api/v1/subscriptions/:id 
Questa route elimina un singolo oggetto Subscription per id.



Struttura dell'utilizzo giornaliero del tenant 
Un oggetto TenantDailyUsage rappresenta l'utilizzo per un tenant in un dato giorno. Se non c'è stata attività per un tenant in un determinato giorno, quel giorno non avrà un oggetto TenantDailyUsage.
L'oggetto TenantDailyUsage non è in tempo reale e può essere indietro di alcuni minuti rispetto all'utilizzo effettivo.
La struttura dell'oggetto TenantDailyUsage è la seguente:

GET /api/v1/tenant-daily-usage 
This route allows searching for the usage of a tenant by year, month, and day. Up to 365 objects can be returned, and the cost is 1 api credit per 10 objects.
Response objects are sorted by the date they are created (the oldest first).



Struttura del tenant 
Il Tenant definisce un cliente di FastComments.com. Possono essere creati tramite l'API dai tenant con accesso al white labeling. I tenant white-labeled non possono creare altri tenant white-labeled (è consentito un solo livello di annidamento).
La struttura dell'oggetto Tenant è la seguente:

GET /api/v1/tenants/:id 
Questo endpoint restituisce un singolo Tenant per id.



GET /api/v1/tenants 
Questa API restituisce i tenant che sono gestiti dal tuo tenant.
La paginazione è fornita dal parametro di query skip. I tenant vengono restituiti in pagine di 100, ordinate per signUpDate e id.
Il costo è basato sul numero di tenant restituiti, pari a 1 credit per 10 tenant restituiti.

Puoi definire parametri meta sugli oggetti Tenant e interrogare per trovare i tenant corrispondenti. Ad esempio, per la chiave someKey e il valore meta some-value, possiamo
costruire un oggetto JSON con questa coppia chiave/valore e poi codificarlo URI come parametro di query per filtrare:



POST /api/v1/tenants 
Questa route fornisce la possibilità di aggiungere un singolo Tenant.
La creazione di un Tenant ha le seguenti restrizioni:
- Un
nameè obbligatorio. domainConfigurationè obbligatorio.- I seguenti valori non possono essere forniti durante la creazione di un
Tenant:hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmount
- La
signUpDatenon può essere nel futuro. - Il
namenon può essere più lungo di200 characters. - L'
emailnon può essere più lunga di300 characters. - L'
emaildeve essere unica tra tutti i tenant di FastComments.com. - Non puoi creare tenant se il tenant genitore non ha definito un
TenantPackagevalido.- Se il tuo tenant è stato creato tramite FastComments.com, questo non dovrebbe essere un problema.
- Non puoi creare più tenant di quanti definiti da
maxWhiteLabeledTenantsnel tuo pacchetto. - Devi specificare il parametro di query
tenantIdche è l'id del tuoparent tenantcon il white labeling abilitato.
Possiamo creare un Tenant con solo pochi parametri:



PATCH /api/v1/tenants/:id 
Questo endpoint API permette di aggiornare un Tenant tramite il suo id.
L'aggiornamento di un Tenant è soggetto alle seguenti restrizioni:
- I seguenti valori non possono essere aggiornati:
hasFlexPricinglastBillingIssueReminderDateflexLastBilledAmountmanagedByTenantId
- La
signUpDatenon può essere nel futuro. - La
namenon può essere più lunga di200 characters. - La
emailnon può essere più lunga di300 characters. - La
emaildeve essere unica tra tutti i tenant di FastComments.com. - Quando si imposta
billingInfoValidatrue,billingInfodeve essere fornito nella stessa richiesta. - Non è possibile aggiornare il
packageIdassociato al proprio tenant. - Non è possibile aggiornare il
paymentFrequencyassociato al proprio tenant.



DELETE /api/v1/tenants/:id 
Questa route permette la rimozione di un Tenant e di tutti i dati associati (utenti, commenti, ecc.) per id.
Esistono le seguenti restrizioni per la rimozione dei tenant:
- Il tenant deve essere il tuo, o un tenant white-label che gestisci.
- Il parametro di query
suredeve essere impostato sutrue.



Struttura del pacchetto tenant 
Il TenantPackage definisce le informazioni sul pacchetto disponibili per un Tenant. Un tenant può avere molti pacchetti disponibili, ma solo
uno in uso in un dato momento.
Un Tenant non può essere utilizzato per alcun prodotto finché il suo packageId non punta a un TenantPackage valido.
Esistono due tipi di oggetti TenantPackage:
- Pacchetti a prezzo fisso - dove
hasFlexPricingè false. - Prezzi flessibili - dove
hasFlexPricingè true.
In entrambi i casi i limiti sono definiti sull'account che utilizza il pacchetto, tuttavia con Flex il tenant viene addebitato un prezzo base più
l'utilizzo effettivo, definito dai parametri flex*.
Un tenant può avere più tenant package e può cambiare il pacchetto da solo dalla Pagina delle informazioni di fatturazione.
Se gestirete voi stessi la fatturazione per i tenant, dovrete comunque definire un pacchetto per ciascun tenant per definire i loro limiti. Impostate semplicemente billingHandledExternally su true nel Tenant e non potranno modificare autonomamente le loro informazioni di fatturazione o il pacchetto attivo.
Non è possibile creare pacchetti con limiti superiori rispetto al tenant padre.
La struttura dell'oggetto TenantPackage è la seguente:

GET /api/v1/tenant-packages/:id 
Questa route restituisce un singolo Tenant Package per ID.



GET /api/v1/tenant-packages 
Questa API utilizza la paginazione, fornita dal parametro di query skip. I TenantPackages vengono restituiti in pagine da 100, ordinati per createdAt e id.
Il costo si basa sul numero di tenant packages restituiti, pari a 1 credit per 10 tenant packages restituiti.



POST /api/v1/tenant-packages 
Questa route consente di aggiungere un singolo TenantPackage.
La creazione di un TenantPackage ha le seguenti restrizioni:
- I seguenti parametri sono obbligatori:
nametenantIdmonthlyCostUSD- Può essere null.yearlyCostUSD- Può essere null.maxMonthlyPageLoadsmaxMonthlyAPICreditsmaxMonthlyCommentsmaxConcurrentUsersmaxTenantUsersmaxSSOUsersmaxModeratorsmaxDomainshasDebrandingforWhoTextfeatureTaglineshasFlexPricing- SehasFlexPricingè true, allora tutti i parametriflex*sono obbligatori.
- Il
namenon può essere più lungo di50 characters. - Ogni elemento
forWhoTextnon può essere più lungo di200 characters. - Ogni elemento
featureTaglinesnon può essere più lungo di100 characters. - Il
TenantPackagedeve essere "smaller" rispetto al tenant padre. Ad esempio, tutti i parametrimax*devono avere valori inferiori rispetto al tenant padre. - Un tenant con white labeling può avere al massimo cinque pacchetti.
- Solo i tenant con accesso al white labeling possono creare un
TenantPackage. - Non puoi aggiungere pacchetti al tuo tenant. :)
Possiamo creare un TenantPackage come segue:



PATCH /api/v1/tenant-packages/:id 
Questo endpoint API fornisce la possibilità di aggiornare un TenantPackage tramite id.
L'aggiornamento di un TenantPackage ha le seguenti restrizioni:
- Se si imposta
hasFlexPricingsu true, allora tutti i parametriflex*sono obbligatori nella stessa richiesta. - Il
namenon può essere più lungo di50 characters. - Ogni elemento
forWhoTextnon può essere più lungo di200 characters. - Ogni elemento
featureTaglinesnon può essere più lungo di100 characters. - Il
TenantPackagedeve essere "più piccolo" del tenant principale. Ad esempio, tutti i parametrimax*devono avere valori inferiori rispetto al tenant principale. - Non è possibile modificare il
tenantIdassociato a unTenantPackage.



DELETE /api/v1/tenant-packages/:id 
Questa route fornisce la rimozione di un TenantPackage per id.
Non puoi rimuovere un TenantPackage che è in uso (il packageId di un tenant punta al pacchetto). Aggiorna prima il Tenant.



Struttura dell'utente tenant 
Il TenantUser definisce un User che è gestito da un tenant specifico. Il loro account è sotto il completo controllo del tenant
a cui sono associati, e il loro account può essere aggiornato o eliminato tramite l'UI o l'API.
Gli utenti del tenant possono essere amministratori con tutti i permessi e accesso al Tenant, oppure possono essere limitati a permessi specifici per
moderare i commenti, accedere alle chiavi API, ecc.
La struttura dell'oggetto TenantUser è la seguente:

GET /api/v1/tenant-users/:id 
Questa route restituisce un singolo TenantUser per id.



GET /api/v1/tenant-users 
Questa API utilizza la paginazione, fornita dal parametro di query skip. TenantUsers vengono restituiti in pagine da 100, ordinati per signUpDate, username e id.
Il costo è basato sul numero di tenant users restituiti, con un costo di 1 credit per 10 tenant users restituiti.



POST /api/v1/tenant-users 
Questa route consente di aggiungere un singolo TenantUser.
La creazione di un TenantUser ha le seguenti restrizioni:
- Un
usernameè obbligatorio. - Una
emailè obbligatoria. - La
signUpDatenon può essere nel futuro. - La
localedeve essere nella lista di Locali supportate. - Il
usernamedeve essere unico su tutto FastComments.com. Se questo è un problema, suggeriamo di usare l'SSO. - La
emaildeve essere unica su tutto FastComments.com. Se questo è un problema, suggeriamo di usare l'SSO. - Non è possibile creare più tenant user di quanti definiti sotto
maxTenantUsersnel tuo pacchetto.
Possiamo creare un TenantUser come segue



POST /api/v1/tenant-users/:id/send-login-link 
Questa route fornisce la possibilità di inviare un link di accesso a un singolo TenantUser.
Utile quando si creano utenti in batch e non si vuole dover spiegare loro come effettuare il login su FastComments.com. Questo invierà loro semplicemente un "link magico" per accedere che scade dopo 30 days.
Esistono le seguenti restrizioni per inviare un link di accesso a un TenantUser:
- Il
TenantUserdeve già esistere. - Devi avere accesso per gestire il
Tenanta cui appartiene ilTenantUser.
Possiamo inviare un link di accesso a un TenantUser come segue:

Questo invierà un'email come Bob at TenantName is inviting you to be a moderator...


PATCH /api/v1/tenant-users/:id 
Questa route fornisce la possibilità di aggiornare un singolo TenantUser.
L'aggiornamento di un TenantUser ha le seguenti restrizioni:
- Il
signUpDatenon può essere nel futuro. - Il
localedeve essere nella lista dei Locali supportati. - Il
usernamedeve essere univoco in tutto FastComments.com. Se questo è un problema, suggeriamo di usare SSO. - La
emaildeve essere univoca in tutto FastComments.com. Se questo è un problema, suggeriamo di usare SSO. - Non è possibile aggiornare il
tenantIddi un utente.
Possiamo creare un TenantUser come segue



DELETE /api/v1/tenant-users/:id 
Questa route consente la rimozione di un TenantUser tramite ID.
È possibile eliminare i commenti dell'utente tramite il parametro di query deleteComments. Nota che se questo è true:
- Tutti i commenti dell'utente saranno eliminati in tempo reale.
- Tutti i child (ora orfani) commenti saranno eliminati o anonimizzati in base alla configurazione della pagina associata a ciascun commento. Ad esempio se la modalità di cancellazione del thread è "anonymize", allora le risposte rimarranno, e i commenti dell'utente saranno anonimizzati. Questo si applica solo quando
commentDeleteModeèRemove(il valore predefinito). - Il
creditsCostdiventa2.
Commenti anonimizzati
Puoi conservare i commenti dell'utente ma semplicemente anonimizzarli impostando commentDeleteMode=1.
Se i commenti dell'utente vengono anonimizzati, i seguenti valori vengono impostati su null:
- commenterName
- commenterEmail
- avatarSrc
- userId
- anonUserId
- mentions
- badgesisDeleted e isDeletedUser vengono impostati a true.
Durante il rendering, il widget dei commenti utilizzerà DELETED_USER_PLACEHOLDER (default: "[deleted]") per il nome dell'utente e DELETED_CONTENT_PLACEHOLDER per il commento. Questi possono essere personalizzati tramite l'interfaccia di personalizzazione del Widget.
Esempi



Struttura utente 
User è un oggetto che rappresenta il denominatore più comune di tutti gli utenti.
Tieni presente che in FastComments abbiamo una serie di casi d'uso diversi per gli utenti:
- Secure SSO
- Simple SSO
- Tenant Users (Ad esempio: Administrators)
- Commenters
This API is for Commenters and users created via Simple SSO. Basically, any user created
through your site can be accessed via this API. Tenant Users can also be fetched this way, but you'll get more information by interacting with the /tenant-users/ API.
For Secure SSO please use the /sso-users/ API.
You cannot update these types of users. They created their account through your site, so we provide some basic read-only access, but
you cannot make changes. If you want to have this type of flow - you need to setup Secure SSO.
La struttura dell'oggetto User è la seguente:

GET /api/v1/users/:id 
Questa route restituisce un singolo User per id.



Struttura del voto 
Un oggetto Vote rappresenta un voto lasciato da un utente.
La relazione tra commenti e il voto è definita tramite commentId.
La struttura dell'oggetto Vote è la seguente:

GET /api/v1/votes 
I voti devono essere recuperati tramite urlId.
Tipi di voti
Esistono tre tipi di voti:
- Voti autenticati, che vengono applicati al commento corrispondente. È possibile crearli tramite questa API.
- Voti autenticati, che sono in attesa di verifica e quindi non sono ancora applicati al commento. Questi vengono creati quando un utente usa il meccanismo FastComments.com accedi per votare.
- Voti anonimi, che vengono applicati al commento corrispondente. Questi vengono creati insieme ai commenti anonimi.
Questi vengono restituiti in liste separate nell'API per ridurre la confusione.



Note sui voti anonimi
Nota che i voti anonimi creati tramite questa API appariranno nella lista appliedAuthorizedVotes. Sono considerati autorizzati poiché sono stati creati tramite l'API con una API key.
La struttura appliedAnonymousVotes è per voti creati senza email, API key, ecc.
GET /api/v1/votes/for-user 
Permette di recuperare i voti lasciati da un utente su un determinato urlId. Richiede un userId che può essere un utente FastComments.com o un SSO User.
Questo è utile se vuoi mostrare se un utente ha votato un commento. Quando recuperi i commenti, chiama semplicemente questa API nello stesso momento per l'utente con lo stesso urlId.
Se usi il voto anonimo, dovresti invece passare anonUserId.


Nota che i voti anonimi appariranno nella lista appliedAuthorizedVotes. Sono considerati autorizzati poiché sono stati creati tramite l'API con una API key.


POST /api/v1/votes 
Questa route fornisce la possibilità di aggiungere un singolo Vote autorizzato. I voti possono essere up (+1) o down (-1).




Creazione di voti anonimi
I voti anonimi possono essere creati impostando anonUserId nei parametri di query invece di userId.
Questo id non deve corrispondere a un oggetto utente da nessuna parte (da qui anonimo). È semplicemente un identificatore per la sessione, così puoi recuperare nuovamente i voti nella stessa sessione, per verificare se a un commento è stato dato un voto.
Se non hai qualcosa come "sessioni anonime" come fa FastComments, puoi semplicemente impostarlo su un ID casuale, come un UUID (anche se apprezziamo identificatori più piccoli per risparmiare spazio).
Altre note
- Questa API rispetta le impostazioni a livello di tenant. Per esempio, se disabiliti il voto per una determinata pagina e tenti di creare un voto tramite l'API, fallirà con il codice di errore
voting-disabled. - Questa API è attiva di default.
- Questa API aggiornerà i
votesdel corrispondenteComment.
DELETE /api/v1/votes/:id 
Questa route fornisce la possibilità di eliminare un singolo Vote.



Note:
- Questa API rispetta le impostazioni a livello di tenant. Ad esempio, se disabiliti il voto per una data pagina, e tenti di creare un voto tramite l'API, fallirà con il codice di errore
voting-disabled. - Questa API è attiva per impostazione predefinita.
- Questa API aggiornerà i
votesdel corrispondenteComment.
Struttura della configurazione dominio 
Un oggetto DomainConfig rappresenta la configurazione per un dominio di un tenant.
La struttura dell'oggetto DomainConfig è la seguente:


Per l'autenticazione
La configurazione del dominio viene usata per determinare quali siti possono ospitare il widget FastComments per il tuo account. Questa è una forma basilare di autenticazione, il che significa che aggiungere o rimuovere qualsiasi configurazione di dominio può influenzare la disponibilità della tua installazione FastComments in produzione.
Non rimuovere o aggiornare la proprietà domain di un Domain Config per un dominio attualmente in uso a meno che non sia intenzionale disabilitare quel dominio.
Questo ha lo stesso comportamento della rimozione di un dominio da /auth/my-account/configure-domains.
Nota anche che rimuovere un dominio dall'interfaccia My Domains rimuoverà qualsiasi configurazione corrispondente per quel dominio che potrebbe essere stata aggiunta tramite questa interfaccia.
Per la personalizzazione delle email
Il link di cancellazione nel piè di pagina dell'email, e la funzionalità di annullamento dell'iscrizione con un clic offerta da molti client di posta, possono essere configurati tramite questa API definendo rispettivamente footerUnsubscribeURL e emailHeaders.
Per DKIM
Dopo aver definito i record DNS DKIM, aggiorna semplicemente il DomainConfig con la tua configurazione DKIM usando la struttura definita.
GET /api/v1/domain-configs 
Questa API consente di recuperare tutti gli oggetti DomainConfig per un tenant.



GET /api/v1/domain-configs/:domain 
I singoli DomainConfigs possono essere recuperati tramite il corrispondente domain.



POST /api/v1/domain-configs 
Questo endpoint API consente di creare configurazioni di dominio.
Aggiungere una configurazione per un dominio autorizza quel dominio per l'account FastComments.
I casi d'uso comuni per questa API sono la configurazione iniziale, l'aggiunta di molti domini, o la personalizzazione della configurazione per l'invio di email.



PATCH /api/v1/domain-configs/:domain 
Questo endpoint API consente di aggiornare la configurazione di un dominio specificando solamente il dominio e l'attributo da aggiornare.



PUT /api/v1/domain-configs/:domain 
Questo endpoint API consente di sostituire una configurazione del dominio.



DELETE /api/v1/domain-configs/:domain 
This route provides the removal of a single DomainConfig by id.
- Note: Removing a
DomainConfigwill un-authorize that domain from using FastComments. - Note: Re-adding a domain via the UI will recreate the object (with just
domainpopulated).



Struttura della configurazione della domanda 
FastComments fornisce un modo per creare domande e aggregarne i risultati. Un esempio di domanda (d'ora in poi chiamata QuestionConfig) potrebbe essere una valutazione a stelle, uno slider, o una domanda NPS (determinata tramite type).
I dati delle domande possono essere aggregati individualmente, insieme, nel tempo, complessivamente, per pagina, e così via.
Il framework dispone di tutte le funzionalità necessarie per costruire widget client-side (con il tuo server davanti a questa API), pannelli di amministrazione e strumenti di reporting.
Per prima cosa, dobbiamo definire un QuestionConfig. La struttura è la seguente:

GET /api/v1/question-configs 
Questa route restituisce fino a 100 oggetti QuestionConfig alla volta, paginati. Il costo è 1 per ogni 100 oggetti. Sono
ordinati per testo della domanda in ordine ascendente (question field).



GET /api/v1/question-configs/:id 
Questa route restituisce un singolo QuestionConfig per il suo id.



POST /api/v1/question-configs 
Questo endpoint API consente di creare un QuestionConfig.



PATCH /api/v1/question-configs/:id 
Questa route permette di aggiornare un singolo QuestionConfig.
La seguente struttura rappresenta tutti i valori che possono essere modificati:




DELETE /api/v1/question-configs/:id 
Questa route permette la rimozione di un QuestionConfig tramite id.
Questo cancellerà tutti i risultati delle domande corrispondenti (ma non i commenti). Fa parte del costo elevato in crediti.



Struttura del risultato della domanda 
Per salvare i risultati delle domande, crei un QuestionResult. Puoi quindi aggregare i risultati delle domande e anche collegarli ai commenti per scopi di reportistica.

GET /api/v1/question-results 
Questa route restituisce fino a 1000 oggetti QuestionResults alla volta, paginati. Il costo è 1 ogni 100 oggetti. Sono
ordinati per createdAt, in ordine crescente. Puoi filtrare per vari parametri.



GET /api/v1/question-results/:id 
Questa route restituisce un singolo QuestionResult in base al suo id.



POST /api/v1/question-results 
Questo endpoint API consente di creare un QuestionResult.



PATCH /api/v1/question-results/:id 
Questa route fornisce la possibilità di aggiornare un singolo QuestionResult.
La struttura seguente rappresenta tutti i valori che possono essere modificati:




DELETE /api/v1/question-results/:id 
Questa route consente la rimozione di un QuestionResult tramite id.



GET /api/v1/question-results-aggregate 
Qui avviene l'aggregazione dei risultati.
La struttura della risposta di aggregazione è la seguente:

Here are the query parameters available for aggregation:

Ecco una richiesta di esempio:

Esempio di risposta:


Note sulle prestazioni
- In caso di cache miss, le aggregazioni generalmente richiedono cinque secondi per milione di risultati.
- Altrimenti, le richieste sono a tempo costante.
Note su caching e costi
- Quando
forceRecalculateè specificato il costo è sempre10, invece del normale2. - Se la cache scade e i dati vengono ricalcolati, il costo rimane comunque un valore costante di
2seforceRecalculatenon è specificato. La scadenza della cache dipende dalla dimensione del set di dati aggregato (può variare tra 30 secondi e 5 minuti). - Questo serve a incentivare l'uso della cache.
GET /api/v1/question-results-aggregate/combine/comments 
Qui avviene la combinazione dei risultati con i commenti. Utile, per esempio, per creare un grafico di "commenti recenti positivi e negativi" per un prodotto.
È possibile cercare tramite un intervallo di valori (inclusivo), una o più domande e per data di inizio (inclusiva).
La struttura della risposta è la seguente:

Ecco i parametri di query disponibili per l'aggregazione:

Ecco una richiesta di esempio:

Esempio di risposta:


Note sulla cache e sui costi
- Quando
forceRecalculateè specificato, il costo è sempre10, invece del normale2. - Se la cache scade e i dati vengono ricalcolati, il costo rimane comunque una costante di
2seforceRecalculatenon è specificato. - Questo per incentivare l'uso della cache.
Struttura del badge utente 
UserBadge è un oggetto che rappresenta un badge assegnato a un utente nel sistema FastComments.
I badge possono essere assegnati agli utenti automaticamente in base alla loro attività (ad esempio conteggio dei commenti, tempo di risposta, stato di veterano) o manualmente dagli amministratori del sito.
La struttura per l'oggetto UserBadge è la seguente:

GET /api/v1/user-badges 
Questo endpoint consente di recuperare i badge degli utenti in base a diversi criteri.
Esempio di richiesta:
Run 
Puoi aggiungere vari parametri di query per filtrare i risultati:
userId- Ottieni badge per un utente specificobadgeId- Ottieni istanze di un badge specificotype- Filtra per tipo di badge (0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, etc. See UserBadge structure for full list)displayedOnComments- Filtra se il badge è visualizzato nei commenti (true/false)limit- Numero massimo di badge da restituire (default 30, max 200)skip- Numero di badge da saltare (per la paginazione)
Esempio di risposta:

Possibili risposte di errore:


GET /api/v1/user-badges/:id 
Questo endpoint consente di recuperare un badge utente specifico tramite il suo ID univoco.
Esempio di richiesta:
Run 
Esempio di risposta:

Possibili risposte di errore:


POST /api/v1/user-badges 
Questo endpoint consente di creare una nuova assegnazione di badge per un utente.
Esempio di richiesta:
Run 
Il corpo della richiesta deve contenere i seguenti parametri:
userId(obbligatorio) - L'ID dell'utente a cui assegnare il badgebadgeId(obbligatorio) - L'ID del badge da assegnaredisplayedOnComments(opzionale) - Se il badge deve essere visualizzato nei commenti dell'utente (predefinito: true)
Note importanti:
- Il badge deve esistere ed essere abilitato nel catalogo dei badge del tuo tenant
- Puoi assegnare badge solo agli utenti che appartengono al tuo tenant o che hanno commentato sul tuo sito
Esempio di risposta:

Possibili risposte di errore:





PUT /api/v1/user-badges/:id 
Questo endpoint ti consente di aggiornare l'assegnazione di un badge utente.
Attualmente, l'unica proprietà che può essere aggiornata è displayedOnComments, che controlla se il badge viene mostrato nei commenti dell'utente.
Esempio di richiesta:
Run 
Esempio di risposta:

Possibili risposte di errore:



DELETE /api/v1/user-badges/:id 
Questo endpoint consente di eliminare un'assegnazione di badge utente.
Esempio di richiesta:
Run 
Esempio di risposta:

Possibili risposte di errore:



Struttura del progresso del badge utente 
UserBadgeProgress è un oggetto che rappresenta il progresso di un utente verso l'ottenimento di vari badge nel sistema FastComments.
Questo tracciamento aiuta a determinare quando gli utenti dovrebbero ricevere badge automatici in base alla loro attività e partecipazione nella tua community.
La struttura per l'oggetto UserBadgeProgress è la seguente:

GET /api/v1/user-badge-progress 
Questo endpoint permette di recuperare i record di avanzamento dei badge utente in base a vari criteri.
Example Request:
Run 
Puoi aggiungere vari parametri di query per filtrare i risultati:
userId- Ottieni l'avanzamento per uno specifico utentelimit- Numero massimo di record da restituire (default 30, max 200)skip- Numero di record da saltare (per la paginazione)
Example Response:

Possible Error Responses:


GET /api/v1/user-badge-progress/:id 
Questo endpoint consente di recuperare un record specifico di avanzamento del badge utente tramite il suo ID univoco.
Esempio di richiesta:
Run 
Esempio di risposta:

Possibili risposte di errore:


GET /api/v1/user-badge-progress/user/:userId 
Questo endpoint consente di recuperare il record di avanzamento del badge di un utente tramite il suo ID utente.
Esempio di richiesta:
Run 
Esempio di risposta:

Possibili risposte di errore:



In conclusione
Speriamo che tu abbia trovato la nostra documentazione API esaustiva e facile da comprendere. Se trovi delle lacune, faccelo sapere qui sotto.