FastComments.com

FastComments JavaScript/TypeScript SDK


Ceci est le SDK officiel JavaScript/TypeScript pour FastComments.

Gérez les commentaires, les utilisateurs, le SSO et la modération depuis Node.js ou le navigateur.

Dépôt

Voir sur GitHub


Installation Internal Link

npm

npm install fastcomments-sdk

Documentation de l'API Internal Link


Référence complète de l'API: docs/api/README.md

Compatibilité navigateur et serveur Internal Link


Ce SDK utilise des points d'entrée doubles pour garantir une compatibilité optimale et éviter les erreurs d'exécution :

  • fastcomments-sdk/browser - Version sécurisée pour les navigateurs avec fetch natif
  • fastcomments-sdk/server - Version complète pour Node.js avec prise en charge du SSO
  • fastcomments-sdk (par défaut) - Contient uniquement des types, sûr à importer n'importe où

API publiques vs sécurisées Internal Link

Le SDK fournit trois classes d'API principales :

  • DefaultApi - Points de terminaison sécurisés qui nécessitent votre clé API pour l'authentification. Utilisez-les pour les opérations côté serveur.
  • PublicApi - Points de terminaison publics accessibles sans clé API. Ils peuvent être appelés directement depuis des navigateurs, appareils mobiles, etc.
  • HiddenApi - Points de terminaison internes/admin pour des cas d'utilisation avancés.

Exemple : Utilisation de l'API publique (adaptée au navigateur)

import { PublicApi } from 'fastcomments-sdk/browser';

const publicApi = new PublicApi();

// Récupérer les commentaires d'une page (pas de clé API requise)
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Exemple : Utilisation de l'API par défaut (côté serveur uniquement)

import { DefaultApi, Configuration } from 'fastcomments-sdk/server';

const config = new Configuration({
  apiKey: 'your-api-key' // À garder secret !
});
const defaultApi = new DefaultApi(config);

// Récupérer les commentaires avec un accès administrateur complet
const response = await defaultApi.getComments({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

Intégration SSO (Single Sign-On) Internal Link

FastComments prend en charge le SSO pour s'intégrer à votre système d'authentification utilisateur existant. La fonctionnalité SSO n'est disponible que dans l'export côté serveur car elle nécessite les fonctionnalités crypto de Node.js.

SSO simple (côté serveur uniquement)

Le SSO simple doit être généré côté serveur et envoyé au client :

// Code côté serveur (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Créez un SSO simple en utilisant l'assistant intégré  
const userData = {
  username: 'john_doe',
  email: 'john@example.com',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg'
};

const sso = FastCommentsSSO.createSimple(userData, {
  loginURL: '/login',
  logoutURL: '/logout'
});

const ssoToken = sso.createToken();

// Envoyez ssoToken à votre code côté client
// Le code côté client peut ensuite utiliser ce jeton avec le SDK pour navigateur

SSO sécurisé (côté serveur, recommandé)

Le SSO sécurisé doit être implémenté côté serveur et offre une meilleure sécurité :

// Code côté serveur (Node.js/backend)
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

// Créez un SSO sécurisé en utilisant l'assistant intégré
const userData = {
  id: 'user-123',
  email: 'john@example.com',
  username: 'john_doe',
  displayName: 'John Doe',
  avatar: 'https://example.com/avatar.jpg',
  isAdmin: false,
  isModerator: false
};

const sso = FastCommentsSSO.createSecure('your-api-key', userData, {
  loginURL: '/login',
  logoutURL: '/logout'
});

const ssoConfig = sso.prepareToSend();

// À utiliser avec les appels API côté serveur
const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: JSON.stringify(ssoConfig)
});

// Ou envoyez ssoConfig au client pour une utilisation dans le navigateur

Utiliser le SSO depuis le navigateur (avec un jeton généré par le serveur)

// Code côté client (navigateur)
import { PublicApi } from 'fastcomments-sdk/browser';

// Récupérez le jeton SSO depuis votre endpoint serveur
const ssoToken = await fetch('/api/sso-token').then(r => r.json());

const publicApi = new PublicApi();
const response = await publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  sso: ssoToken // Utilisez le jeton SSO généré par le serveur
});

SSO avec création de commentaire

// Côté serveur : créer le SSO et le commentaire
import { FastCommentsSSO, PublicApi } from 'fastcomments-sdk/server';

const sso = FastCommentsSSO.createSecure('your-api-key', userData);
const ssoConfig = sso.prepareToSend();

const response = await publicApi.createCommentPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
  broadcastId: 'unique-broadcast-id',
  commentData: {
    comment: 'This is my comment',
    date: Date.now(),
    commenterName: 'John Doe',
    url: 'https://example.com/page',
    urlId: 'page-url-id'
  },
  sso: JSON.stringify(ssoConfig)
});

Cas d'utilisation courants Internal Link

Récupérer les commentaires d'une page

const comments = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'article-123'
});

Créer un commentaire

const newComment = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'article-123',
    comment: 'Great article!',
    commenterName: 'John Doe',
    commenterEmail: 'john@example.com'
  }
});

Voter sur un commentaire

const voteResponse = await sdk.publicApi.voteComment({
  voteBodyParams: {
    commentId: 'comment-id',
    direction: 1 // 1 pour un vote positif, -1 pour un vote négatif
  }
});

Gestion des utilisateurs (Nécessite une clé API)

// Rechercher des utilisateurs (nécessite DefaultApi)
const users = await sdk.defaultApi.searchUsers({
  tenantId: 'your-tenant-id',
  urlId: 'page-id',
  usernameStartsWith: 'john'
});

Événements en direct (mises à jour en temps réel) Internal Link

Abonnez-vous aux événements en direct pour recevoir des mises à jour en temps réel concernant les commentaires, les votes et autres activités.

Événements au niveau de la page

Écoutez les événements en direct sur une page spécifique (commentaires, votes, etc.) :

import { subscribeToChanges, LiveEvent, LiveEventType } from 'fastcomments-sdk/browser';

const config = {
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id',
};

// Subscribe to live events for a page
const subscription = subscribeToChanges(
  config,
  'your-tenant-id', // tenantIdWS
  'page-url-id',    // urlIdWS  
  'user-session-id', // userIdWS (get this from getComments response)
  (event: LiveEvent) => {
    console.log('Live event received:', event);

    switch (event.type) {
      case LiveEventType.new_comment:
        console.log('New comment:', event.comment);
        // Mettez à jour votre interface avec le nouveau commentaire
        break;
      case LiveEventType.new_vote:
        console.log('New vote:', event.vote);
        // Mettez à jour les compteurs de votes dans votre interface
        break;
      case LiveEventType.updated_comment:
        console.log('Comment updated:', event.comment);
        break;
      default:
        console.log('Other event type:', event.type);
    }

    return true; // Retournez true si l'événement a été traité
  },
  (isConnected: boolean) => {
    console.log('Connection status:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Close the subscription when done
subscription.close();

S'abonner aux événements utilisateur

Écoutez les événements spécifiques à un utilisateur (notifications, mentions, etc.) :

import { subscribeToUserFeed, LiveEvent, LiveEventType } from 'fastcomments-sdk/browser';

const userConfig = {
  userIdWS: 'user-session-id', // Get this from getComments response
};

// Subscribe to user's personal feed
const userSubscription = subscribeToUserFeed(
  userConfig,
  (event: LiveEvent) => {
    console.log('User event received:', event);

    switch (event.type) {
      case LiveEventType.notification:
        console.log('New notification:', event.notification);
        // Affichez la notification dans votre interface
        break;
      case LiveEventType.notification_update:
        console.log('Notification updated:', event.notification);
        break;
      default:
        console.log('Other user event:', event.type);
    }

    return true;
  },
  (isConnected: boolean) => {
    console.log('User feed connection:', isConnected ? 'Connected' : 'Disconnected');
  }
);

// Close when done
userSubscription.close();

Obtenir userIdWS

Le paramètre userIdWS est requis pour les événements en direct et peut être obtenu à partir des réponses de l'API :

const response = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-id'
});

// Extract userIdWS from the response
const userIdWS = response.data?.userSessionInfo?.userIdWS;

if (userIdWS) {
  // Now you can subscribe to live events
  const subscription = subscribeToChanges(config, tenantIdWS, urlIdWS, userIdWS, handleEvent);
}

Identifiants de diffusion Internal Link


Vous verrez qu'il faut transmettre un broadcastId dans certains appels d'API. Quand vous recevez des événements, vous récupérerez cet ID, ce qui vous permet d'ignorer l'événement si vous comptez appliquer les changements de manière optimiste côté client (ce que vous voudrez probablement faire car cela offre la meilleure expérience). Passez un UUID ici. L'ID doit être suffisamment unique pour ne pas apparaître deux fois durant une session de navigateur.

import { v4 as uuidv4 } from 'uuid';

const response = await sdk.publicApi.createCommentPublic({
  createCommentParams: {
    tenantId: 'your-tenant-id',
    urlId: 'page-id',
    comment: 'My comment',
    broadcastId: uuidv4() // ID unique pour cette opération
  }
});

Gestion des erreurs Internal Link

try {
  const comments = await sdk.publicApi.getCommentsPublic({
    tenantId: 'your-tenant-id',
    urlId: 'page-id'
  });
} catch (error) {
  if (error.response?.status === 404) {
    console.log('Page not found');
  } else {
    console.error('API Error:', error.message);
  }
}

Agrégation Internal Link

Agrège les documents en les regroupant (si groupBy est fourni) et en appliquant plusieurs opérations. Différentes opérations (p. ex. sum, countDistinct, avg, etc.) sont prises en charge.

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
aggregationRequest AggregationRequest Oui
parentTenantId string Non
includeStats boolean Non

Réponse

Renvoie : AggregationResponse


Récupérer les journaux d'audit Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
limit number Non
skip number Non
order SORTDIR Non
after number Non
before number Non

Réponse

Renvoie : GetAuditLogs200Response

Exemple

Exemple de getAuditLogs
Copy Copy
1
2const tenantId: string = 'tenant_9a8b7c';
3const limit: number = 100;
4const skip: number = 0;
5const after: number = Date.now() - 30 * 24 * 60 * 60 * 1000; // il y a 30 jours
6const before: number = Date.now();
7const auditLogs: GetAuditLogs200Response = await getAuditLogs(tenantId, limit, skip, undefined, after, before);
8

Bloquer depuis un commentaire (public) Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
publicBlockFromCommentParams PublicBlockFromCommentParams Oui
sso string Non

Réponse

Renvoie : BlockFromCommentPublic200Response

Exemple

Exemple blockFromCommentPublic
Copy Copy
1
2const tenantId: string = "site_7f9b2e";
3const commentId: string = "comment_2026-03-25_001";
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: "Repeated harassment and targeted abuse",
6 blockDurationDays: 90,
7 includeHistory: true,
8 notifyModeratorTeam: true
9};
10const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakePayload.signature";
11const result: BlockFromCommentPublic200Response = await blockFromCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

Débloquer le commentaire (public) Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
publicBlockFromCommentParams PublicBlockFromCommentParams Oui
sso string Non

Réponse

Renvoie : UnBlockCommentPublic200Response

Exemple

Exemple unBlockCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_42e8a1';
3const commentId: string = 'cmt_9b3f2d';
4const publicBlockFromCommentParams: PublicBlockFromCommentParams = {
5 reason: 'abusive_language',
6 blockedByModeratorId: 'mod_17',
7 note: 'Targeted harassment; review complete',
8 unblockRequestedAt: new Date().toISOString()
9};
10const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
11const result: UnBlockCommentPublic200Response = await unBlockCommentPublic(tenantId, commentId, publicBlockFromCommentParams, sso);
12

Vérifier les commentaires bloqués Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentIds string Oui
sso string Non

Réponse

Renvoie : CheckedCommentsForBlocked200Response

Exemple

Exemple de checkedCommentsForBlocked
Copy Copy
1
2const tenantId: string = 'tenant_4f3b2a1e';
3const commentIds: string = 'c_1001,c_1002,c_1003';
4const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIn0.Sf4ke7nQP3mZx9v2';
5
6const resultWithoutSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds);
7const resultWithSSO: CheckedCommentsForBlocked200Response = await checkedCommentsForBlocked(tenantId, commentIds, ssoToken);
8

Bloquer l'utilisateur depuis un commentaire Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
id string Oui
blockFromCommentParams BlockFromCommentParams Oui
userId string Non
anonUserId string Non

Réponse

Renvoie : BlockFromCommentPublic200Response

Exemple

Exemple de blockUserFromComment
Copy Copy
1
2const tenantId: string = 'acme-corp';
3const id: string = 'comment_7f3b2a9c';
4const blockFromCommentParams: BlockFromCommentParams = {
5 reason: 'Repeated abusive language and targeted harassment',
6 durationDays: 90,
7 preventReposting: true
8};
9const userId: string = 'user_12345';
10const anonUserId: string = 'anon_98765';
11
12const result: BlockFromCommentPublic200Response = await blockUserFromComment(
13 tenantId,
14 id,
15 blockFromCommentParams,
16 userId,
17 anonUserId
18);
19

Créer un commentaire (public) Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
urlId string Oui
broadcastId string Oui
commentData CommentData Oui
sessionId string Non
sso string Non

Réponse

Renvoie : CreateCommentPublic200Response

Exemple

Exemple de createCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_prod_42';
3const urlId: string = 'article-2026-03-25-tech-deep-dive';
4const broadcastId: string = 'live-broadcast-001';
5const sessionId: string = 'sess_9f8e7d6a3b';
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
7const commentData: CommentData = {
8 content: 'Great reporting — appreciated the depth on performance tradeoffs.',
9 authorName: 'Jordan M.',
10 language: 'en-US',
11 metadata: { client: 'web' }
12};
13const result: CreateCommentPublic200Response = await createCommentPublic(tenantId, urlId, broadcastId, commentData, sessionId, sso);
14

Supprimer un commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
contextUserId string Non
isLive boolean Non

Réponse

Renvoie : DeleteComment200Response

Exemple

Exemple de deleteComment
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const id: string = "comment_5f3a2b7c";
4const contextUserId: string = "user_1229";
5const isLive: boolean = true;
6const response: DeleteComment200Response = await deleteComment(tenantId, id, contextUserId, isLive);
7

Supprimer un commentaire (public) Internal Link

Paramètres

Name Type Obligatoire Description
tenantId string Oui
commentId string Oui
broadcastId string Oui
editKey string Non
sso string Non

Réponse

Renvoie : DeleteCommentPublic200Response

Exemple

Exemple de deleteCommentPublic
Copy Copy
1
2const tenantId: string = 'tenant_4f2c9b';
3const commentId: string = 'comment-7c3a9f2d';
4const broadcastId: string = 'article-2026-03-20';
5const editKey: string | undefined = 'ek_pub_abc12345';
6const sso: string | undefined = 'sso_eyJhbGciOiJIUzI1Ni';
7
8const result: DeleteCommentPublic200Response = await deleteCommentPublic(
9 tenantId,
10 commentId,
11 broadcastId,
12 editKey,
13 sso
14);
15

Supprimer le vote sur un commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Oui
voteId string Oui
urlId string Oui
broadcastId string Oui
editKey string Non
sso string Non

Réponse

Renvoie : DeleteCommentVote200Response

Exemple

Exemple de deleteCommentVote
Copy Copy
1
2const tenantId: string = 'acme-tenant-87e4fd';
3const commentId: string = 'cmt-9a12b3f4';
4const voteId: string = 'vote-4f6d21b9';
5const urlId: string = 'https://www.acme.com/articles/2026/03/25/how-to-test';
6const broadcastId: string = 'broadcast-20260325-01';
7const editKey: string = 'editkey-6b7c8d9e';
8const sso: string = 'sso-jwt-eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
9
10const response: DeleteCommentVote200Response = await deleteCommentVote(
11 tenantId,
12 commentId,
13 voteId,
14 urlId,
15 broadcastId,
16 editKey,
17 sso
18);
19

Signaler un commentaire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
userId string Non
anonUserId string Non

Réponse

Retourne: FlagComment200Response

Exemple

Exemple de flagComment
Copy Copy
1
2const tenantId: string = 'tenant_7f3b21';
3const commentId: string = 'cmt_9a2b4';
4const userId: string = 'user_1024';
5const result: FlagComment200Response = await flagComment(tenantId, commentId, userId);
6

Récupérer un commentaire Internal Link

Paramètres

Name Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie : GetComment200Response

Exemple

Exemple de getComment
Copy Copy
1
2const tenantId: string = "acme-publishing-001";
3const commentId: string = "f3b2c1d0-9a8e-4b7c-8123-6d5f0a1e2b3c";
4const result: GetComment200Response = await getComment(tenantId, commentId);
5const wrapper: GetComment200Response & { comment?: APIComment } = result;
6const comment: APIComment | undefined = wrapper.comment;
7const authorBadge: CommentUserBadgeInfo | undefined = comment?.user?.badge;
8const userHashTags: CommentUserHashTagInfo[] | undefined = comment?.user?.hashTags
9

Récupérer les commentaires Internal Link

Paramètres

Name Type Obligatoire Description
tenantId string Oui
page number Non
limit number Non
skip number Non
asTree boolean Non
skipChildren number Non
limitChildren number Non
maxTreeDepth number Non
urlId string Non
userId string Non
anonUserId string Non
contextUserId string Non
hashTag string Non
parentId string Non
direction SortDirections Non

Réponse

Renvoie : GetComments200Response

Exemple

Exemple de getComments
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const response: GetComments200Response = await getComments(
4 tenantId,
5 1, // page
6 20, // limit
7 0, // skip
8 true, // asTree
9 1, // skipChildren
10 3, // limitChildren
11 4, // maxTreeDepth
12 'articles/2026/new-product-launch', // urlId
13 'user_7890', // userId
14 'anon_4f3b2', // anonUserId
15 undefined, // contextUserId
16 '#launch', // hashTag
17 undefined // parentId
18);
19

Récupérer les commentaires (public) Internal Link

req tenantId urlId

Paramètres

Nom Type Requis Description
tenantId string Oui
urlId string Oui
page number Non
direction SortDirections Non
sso string Non
skip number Non
skipChildren number Non
limit number Non
limitChildren number Non
countChildren boolean Non
fetchPageForCommentId string Non
includeConfig boolean Non
countAll boolean Non
includei10n boolean Non
locale string Non
modules string Non
isCrawler boolean Non
includeNotificationCount boolean Non
asTree boolean Non
maxTreeDepth number Non
useFullTranslationIds boolean Non
parentId string Non
searchText string Non
hashTags Array Non
userId string Non
customConfigStr string Non
afterCommentId string Non
beforeCommentId string Non

Réponse

Retourne : GetCommentsPublic200Response

Exemple

Exemple de getCommentsPublic
Copy Copy
1
2const tenantId: string = 'tenant_eu-west_01';
3const urlId: string = 'https://www.financialtimes.com/articles/2026/market-update-q1';
4const response: GetCommentsPublic200Response = await getCommentsPublic(
5 tenantId,
6 urlId,
7 2,
8 undefined,
9 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.tokenPayload.signature',
10 undefined,
11 0,
12 50,
13 5,
14 true,
15 undefined,
16 true,
17 false,
18 true,
19 'en-US',
20 'reactions,moderation',
21 false,
22 true,
23 true,
24 3,
25 false,
26 undefined,
27 'performance',
28 ['feature','fastcomments'],
29 'user_9876',
30 undefined,
31 undefined,
32 undefined
33);
34

Récupérer le texte du commentaire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
editKey string Non
sso string Non

Réponse

Renvoie : GetCommentText200Response

Exemple

Exemple de getCommentText
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const commentId: string = 'cmt_7890b';
4const editKey: string = 'edit_4f2d9b7c';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
6
7const result: GetCommentText200Response = await getCommentText(tenantId, commentId, editKey, sso);
8

Récupérer les noms d'utilisateur des votes sur le commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Oui
dir number Oui
sso string Non

Réponse

Renvoie : GetCommentVoteUserNames200Response

Exemple

Exemple de getCommentVoteUserNames
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_4f2c1e';
4 const commentId: string = 'cmt_9a7b3d';
5 const dir: number = 1;
6 const resultUpvotes: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dir);
7 const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.fakepayload.signature';
8 const dirDown: number = -1;
9 const resultDownvotes: GetCommentVoteUserNames200Response = await getCommentVoteUserNames(tenantId, commentId, dirDown, sso);
10 console.log(resultUpvotes, resultDownvotes);
11})();
12

Verrouiller un commentaire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
broadcastId string Oui
sso string Non

Réponse

Retourne: LockComment200Response

Exemple

Exemple de lockComment
Copy Copy
1
2const tenantId: string = "tenant_prod_8f3a2b";
3const commentId: string = "cmt_5d7e9a92";
4const broadcastId: string = "broadcast_2026_03_25_1400";
5const ssoToken: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature";
6const resultWithSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId, ssoToken);
7const resultWithoutSso: LockComment200Response = await lockComment(tenantId, commentId, broadcastId);
8

Épingler un commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Oui
broadcastId string Oui
sso string Non

Réponse

Renvoie : PinComment200Response

Exemple

Exemple de pinComment
Copy Copy
1
2const tenantId: string = "tenant_4f2b9a";
3const commentId: string = "cmt_9f8e7d6c";
4const broadcastId: string = "brd_live_concert_2026-03-25";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_payload_signature";
6
7const result: PinComment200Response = await pinComment(tenantId, commentId, broadcastId, sso);
8

Enregistrer un commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
createCommentParams CreateCommentParams Oui
isLive boolean Non
doSpamCheck boolean Non
sendEmails boolean Non
populateNotifications boolean Non

Réponse

Retourne : SaveComment200Response

Exemple

Exemple de saveComment
Copy Copy
1
2const tenantId: string = 'tenant_acme_001';
3const createCommentParams: CreateCommentParams = {
4 content: 'Great article — helped me fix a production issue in minutes.',
5 url: 'https://app.acme.com/blog/performance-tips',
6 author: { name: 'Maya Chen', email: 'maya.chen@acme.com' },
7 metadata: { locale: 'en-US', appVersion: '4.2.1' }
8} as CreateCommentParams;
9const isLive: boolean = true;
10const doSpamCheck: boolean = true;
11const sendEmails: boolean = false;
12const populateNotifications: boolean = true;
13const result: SaveComment200Response = await saveComment(tenantId, createCommentParams, isLive, doSpamCheck, sendEmails, populateNotifications);
14

Enregistrer des commentaires en masse Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
createCommentParams Array Oui
isLive boolean Non
doSpamCheck boolean Non
sendEmails boolean Non
populateNotifications boolean Non

Réponse

Renvoie : Array<SaveComment200Response

Exemple

Exemple de saveCommentsBulk
Copy Copy
1
2const tenantId: string = 'acme-corp-01';
3const mentions1: CommentUserMentionInfo[] = [{ userId: 'user-123', displayName: 'Jane Doe' }];
4const hashtags1: CommentUserHashTagInfo[] = [{ tag: 'typescript' }];
5const createCommentParams: CreateCommentParams[] = [
6 {
7 content: 'Great insights on async/await patterns.',
8 authorName: 'John Smith',
9 authorEmail: 'john.smith@acme.com',
10 externalId: 'comment-001',
11 createdAt: '2026-03-25T10:15:00Z',
12 userMentions: mentions1,
13 userHashTags: hashtags1
14 },
15 {
16 content: 'I prefer using Promise.all for bulk ops.',
17 authorName: 'Emily Turner',
18 authorEmail: 'emily.turner@acme.com',
19 externalId: 'comment-002',
20 createdAt: '2026-03-25T10:20:00Z'
21 }
22];
23const result: SaveComment200Response[] = await saveCommentsBulk(tenantId, createCommentParams, true, true, false, true);
24

Définir le texte du commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Oui
broadcastId string Oui
commentTextUpdateRequest CommentTextUpdateRequest Oui
editKey string Non
sso string Non

Réponse

Renvoie : SetCommentText200Response

Exemple

Exemple de setCommentText
Copy Copy
1
2const tenantId: string = 'tenant_6721f4';
3const commentId: string = 'cmt_9a3b2d';
4const broadcastId: string = 'live_2026_03_25';
5const editKey: string = 'edit_k_4f7b9';
6const sso: string = 'sso_tok_eyJhbGciOiJIUzI1';
7const commentTextUpdateRequest: CommentTextUpdateRequest = {
8 text: 'Updated to clarify the timeline and link the relevant docs.',
9 mentions: [{ userId: 'user_102', displayName: 'Alex Rivera' }],
10 hashtags: [{ tag: 'product-update' }]
11};
12const result: SetCommentText200Response = await setCommentText(tenantId, commentId, broadcastId, commentTextUpdateRequest, editKey, sso);
13

Débloquer l'utilisateur depuis un commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
unBlockFromCommentParams UnBlockFromCommentParams Oui
userId string Non
anonUserId string Non

Réponse

Renvoie : UnBlockCommentPublic200Response

Exemple

Exemple de unBlockUserFromComment
Copy Copy
1
2const tenantId: string = 'tenant_87f3e1';
3const id: string = 'comment_9b2a4f';
4const unBlockFromCommentParams: UnBlockFromCommentParams = {
5 reason: 'Reviewed by moderation team — reinstated',
6 moderatorId: 'mod_21',
7 unblockedAt: new Date().toISOString()
8};
9const userId: string = 'user_42';
10const anonUserId: string = 'anon_e7f9';
11const result: UnBlockCommentPublic200Response = await unBlockUserFromComment(tenantId, id, unBlockFromCommentParams, userId, anonUserId);
12

Annuler le signalement du commentaire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
userId string Non
anonUserId string Non

Réponse

Renvoie: FlagComment200Response

Exemple

Exemple de unFlagComment
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const commentId: string = 'cmt_9f8e7d6c';
4const userId: string = 'user_72b4a1c9';
5const anonUserId: string = 'anon_3d2c1b0a';
6const response: FlagComment200Response = await unFlagComment(tenantId, commentId, userId, anonUserId);
7

Déverrouiller un commentaire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Oui
broadcastId string Oui
sso string Non

Réponse

Renvoie: LockComment200Response

Exemple

Exemple unLockComment
Copy Copy
1
2const tenantId: string = 'tenant_9d4f2b';
3const commentId: string = 'cmt_8a3e1f';
4const broadcastId: string = 'broadcast_2026_03_25';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature';
6
7const result: LockComment200Response = await unLockComment(tenantId, commentId, broadcastId, sso);
8

Désépingler un commentaire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
broadcastId string Oui
sso string Non

Réponse

Renvoie: PinComment200Response

Exemple

Exemple de unPinComment
Copy Copy
1
2const tenantId: string = 'tenant_7f9d2a3b';
3const commentId: string = 'comment_842b9c1f';
4const broadcastId: string = 'bcast_frontpage_202603';
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.exampleSignature';
6
7const result: PinComment200Response = await unPinComment(tenantId, commentId, broadcastId, sso);
8

Mettre à jour un commentaire Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
id string Oui
updatableCommentParams UpdatableCommentParams Oui
contextUserId string Non
doSpamCheck boolean Non
isLive boolean Non

Réponse

Retourne: FlagCommentPublic200Response

Exemple

Exemple de updateComment
Copy Copy
1
2const tenantId: string = "tenant_acme_corp_01";
3const id: string = "comment_20260325_4592";
4const updatableCommentParams: UpdatableCommentParams = {
5 body: "Updated the response to include a link to the RFC and fixed a typo in the second paragraph.",
6 editedByUserId: "user_8721",
7 isVisible: true
8};
9const contextUserId: string = "user_8721";
10const doSpamCheck: boolean = true;
11const isLive: boolean = true;
12const result: FlagCommentPublic200Response = await updateComment(tenantId, id, updatableCommentParams, contextUserId, doSpamCheck, isLive);
13

Voter pour un commentaire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
urlId string Oui
broadcastId string Oui
voteBodyParams VoteBodyParams Oui
sessionId string Non
sso string Non

Réponse

Retourne: VoteComment200Response

Exemple

Exemple de voteComment
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c';
3const commentId: string = 'cmt_42f3a1';
4const urlId: string = 'articles/ai-trends-2026';
5const broadcastId: string = 'web';
6const voteBodyParams: VoteBodyParams = { vote: 1, reason: 'Insightful and on-topic' };
7const sessionId: string = 'sess_6d2b4c9e';
8const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
9const result: VoteComment200Response = await voteComment(tenantId, commentId, urlId, broadcastId, voteBodyParams, sessionId, sso);
10

Récupérer les commentaires pour un utilisateur Internal Link

Paramètres

Name Type Required Description
userId string Non
tenantId string Non
urlId string Non
page number Non
direction SortDirections Non
lastGenDate number Non
repliesToUserId string Non
fetchPageForCommentId string Non
includei10n boolean Non
useFullTranslationIds boolean Non
locale string Non
includeConfig boolean Non
includeNotificationCount boolean Non
countAll boolean Non
sso string Non

Réponse

Retourne : GetCommentsForUserResponse

Exemple

Exemple de getCommentsForUser
Copy Copy
1
2const userId: string = "user_92b7f4";
3const tenantId: string = "news-tenant-uk";
4const urlId: string = "https://news.example.co.uk/articles/2026/05/01/local-election";
5const page: number = 1;
6const lastGenDate: number = Date.now() - 24 * 60 * 60 * 1000;
7const fetchPageForCommentId: string = "c_987654321";
8const includei10n: boolean = true;
9const locale: string = "en-GB";
10const includeConfig: boolean = true;
11const includeNotificationCount: boolean = false;
12const result: GetCommentsForUserResponse = await getCommentsForUser(
13 userId,
14 tenantId,
15 urlId,
16 page,
17 undefined,
18 lastGenDate,
19 undefined,
20 fetchPageForCommentId,
21 includei10n,
22 false,
23 locale,
24 includeConfig,
25 includeNotificationCount,
26 false,
27 undefined
28);
29

Ajouter une configuration de domaine Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
addDomainConfigParams AddDomainConfigParams Oui

Réponse

Renvoie: AddDomainConfig200Response


Supprimer une configuration de domaine Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
domain string Oui

Réponse

Retourne: DeleteDomainConfig200Response


Récupérer une configuration de domaine Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
domain string Oui

Réponse

Renvoie: GetDomainConfig200Response


Récupérer les configurations de domaine Internal Link


Paramètres

Nom Type Requis Description
tenantId string Oui

Réponse

Renvoie : GetDomainConfigs200Response


Modifier partiellement une configuration de domaine Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
domainToUpdate string Oui
patchDomainConfigParams PatchDomainConfigParams Oui

Réponse

Retourne : GetDomainConfig200Response


Remplacer une configuration de domaine Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
domainToUpdate string Oui
updateDomainConfigParams UpdateDomainConfigParams Oui

Réponse

Renvoie: GetDomainConfig200Response

Créer un modèle d'email Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
createEmailTemplateBody CreateEmailTemplateBody Oui

Réponse

Retourne : CreateEmailTemplate200Response

Exemple

Exemple de createEmailTemplate
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_9f4a2b';
4 const createEmailTemplateBody: CreateEmailTemplateBody = {
5 name: 'Weekly Digest',
6 subject: 'Your weekly discussion highlights',
7 html: '<!doctype html><body><h1>Hello {{user.name}}</h1><p>Top comments this week...</p></body>',
8 fromAddress: 'no-reply@fastcomments-example.com',
9 replyTo: 'moderation@fastcomments-example.com',
10 isDefault: false
11 };
12 const result: CreateEmailTemplate200Response = await createEmailTemplate(tenantId, createEmailTemplateBody);
13 console.log(result);
14})();
15

Supprimer un modèle d'email Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de deleteEmailTemplate
Copy Copy
1
2const tenantId: string = "acme-corp-42";
3const idSuffix: string | undefined = "-archived";
4const templateId: string = "email_tmpl_6a1b2c" + (idSuffix ?? "");
5const result: FlagCommentPublic200Response = await deleteEmailTemplate(tenantId, templateId);
6

Supprimer une erreur de rendu de modèle d'email Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui
errorId string Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de deleteEmailTemplateRenderError
Copy Copy
1
2const tenantId: string = "tenant_7a1d2f9b";
3const id: string = "email_template_42b1";
4const errorId: string = "render_err_2026-04-24_7f3c";
5const includeStackTrace: boolean | undefined = undefined; // exemple d'option facultative
6
7const response: FlagCommentPublic200Response = await deleteEmailTemplateRenderError(tenantId, id, errorId);
8// Si un objet d'options facultatif était pris en charge, il pourrait ressembler à :
9// await deleteEmailTemplateRenderError(tenantId, id, errorId /*, { includeStackTrace } */);
10

Récupérer un modèle d'email Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui

Réponse

Renvoie : GetEmailTemplate200Response

Exemple

Exemple getEmailTemplate
Copy Copy
1
2const tenantId: string = "acme-marketing-042";
3const templateId: string = "tpl_welcome_2026";
4const result: GetEmailTemplate200Response = await getEmailTemplate(tenantId, templateId);
5const template: CustomEmailTemplate | undefined = result.template;
6const subject: string | undefined = template?.subject;
7const customParams: CustomConfigParameters | undefined = template?.customConfigParameters;
8

Récupérer les définitions des modèles d'email Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui

Réponse

Renvoie : GetEmailTemplateDefinitions200Response

Exemple

Exemple de getEmailTemplateDefinitions
Copy Copy
1
2const tenantId: string = 'tenant_acme_eu_01';
3const templates: GetEmailTemplateDefinitions200Response = await getEmailTemplateDefinitions(tenantId);
4console.log('Email template definitions loaded for', tenantId, templates);
5

Récupérer les erreurs de rendu des modèles d'email Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
skip number Non

Réponse

Renvoie: GetEmailTemplateRenderErrors200Response

Exemple

Exemple getEmailTemplateRenderErrors
Copy Copy
1
2(async () => {
3 const tenantId: string = 'acme-tenant-42';
4 const id: string = 'tmpl_3fa85f64-5717-4562-b3fc-2c963f66afa6';
5 const skip: number = 20;
6 const result: GetEmailTemplateRenderErrors200Response = await getEmailTemplateRenderErrors(tenantId, id, skip);
7 console.log(result);
8})();
9

Récupérer les modèles d'email Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
skip number Non

Réponse

Renvoie : GetEmailTemplates200Response

Exemple

Exemple de getEmailTemplates
Copy Copy
1
2async function main(): Promise<void> {
3 const tenantId: string = 'tenant_5f3a9c2b';
4 const templates: GetEmailTemplates200Response = await getEmailTemplates(tenantId);
5 const skip: number = 20;
6 const pagedTemplates: GetEmailTemplates200Response = await getEmailTemplates(tenantId, skip);
7 console.log(templates, pagedTemplates);
8}
9main();
10

Rendre un modèle d'email Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
renderEmailTemplateBody RenderEmailTemplateBody Oui
locale string Non

Réponse

Renvoie : RenderEmailTemplate200Response

Exemple

Exemple de renderEmailTemplate
Copy Copy
1
2const tenantId: string = 'tenant_b6f3c2';
3const renderEmailTemplateBody: RenderEmailTemplateBody = {
4 templateId: 'comment-notification',
5 recipient: { name: 'Ava Thompson', email: 'ava.thompson@publisher.com' },
6 context: {
7 siteName: 'City Gazette',
8 commentText: 'Thanks for the in-depth coverage — very helpful.',
9 articleTitle: 'Downtown Redevelopment Plan Advances',
10 threadUrl: 'https://citygazette.example/articles/2026/redevelopment#comments'
11 }
12};
13const locale: string = 'en-US';
14const result: RenderEmailTemplate200Response = await renderEmailTemplate(tenantId, renderEmailTemplateBody, locale);
15

Mettre à jour un modèle d'email Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
updateEmailTemplateBody UpdateEmailTemplateBody Oui

Réponse

Retourne : FlagCommentPublic200Response

Exemple

Exemple updateEmailTemplate
Copy Copy
1
2const tenantId: string = "tenant_76a4b2";
3const id: string = "template_9f3c1e";
4const updateEmailTemplateBody: UpdateEmailTemplateBody = {
5 name: "Comment Flag Notification",
6 subject: "A comment was flagged on your-site.com",
7 bodyHtml: "<p>Admin,</p><p>User {{commenterName}} flagged a comment: “{{commentText}}”</p>",
8 isEnabled: true,
9 description: "Email sent to moderators when a comment is flagged (optional field included)"
10};
11const result: FlagCommentPublic200Response = await updateEmailTemplate(tenantId, id, updateEmailTemplateBody);
12

Récupérer le journal d'événements Internal Link

req tenantId urlId userIdWS

Paramètres

Name Type Required Description
tenantId string Oui
urlId string Oui
userIdWS string Oui
startTime number Oui
endTime number Oui

Réponse

Renvoie: GetEventLog200Response

Exemple

Exemple de getEventLog
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const urlId: string = 'article-2026-03-25';
4const userIdWS: string | undefined = undefined; // valeur en amont optionnelle
5const startTime: number = Date.parse('2026-03-01T00:00:00Z');
6const endTime: number = Date.parse('2026-03-25T23:59:59Z');
7
8const eventLogResponse: GetEventLog200Response = await getEventLog(
9 tenantId,
10 urlId,
11 userIdWS ?? 'ws_user_8b1f',
12 startTime,
13 endTime
14);
15

Récupérer le journal d'événements global Internal Link

req tenantId urlId userIdWS

Paramètres

Name Type Required Description
tenantId string Oui
urlId string Oui
userIdWS string Oui
startTime number Oui
endTime number Oui

Réponse

Renvoie : GetEventLog200Response

Exemple

Exemple de getGlobalEventLog
Copy Copy
1
2const tenantId: string = "tenant-84b2f1";
3const urlId: string = "article-6721";
4const userIdWS: string = "ws-conn-9a3c";
5const startTime: number = Date.now() - 7 * 24 * 60 * 60 * 1000; // il y a 7 jours
6const endTimeOptional: number | undefined = undefined; // fin de la période optionnelle
7const endTime: number = endTimeOptional ?? Date.now();
8const eventLog: GetEventLog200Response = await getGlobalEventLog(tenantId, urlId, userIdWS, startTime, endTime);
9

Créer une publication Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
createFeedPostParams CreateFeedPostParams Oui
broadcastId string Non
isLive boolean Non
doSpamCheck boolean Non
skipDupCheck boolean Non

Réponse

Retourne : CreateFeedPost200Response

Exemple

Exemple de createFeedPost
Copy Copy
1
2const tenantId: string = 'tenant_87f3b2';
3const mediaAsset: FeedPostMediaItemAsset = { url: 'https://cdn.example.com/images/post-123.jpg', mimeType: 'image/jpeg', width: 1200, height: 800, size: 245000 };
4const mediaItem: FeedPostMediaItem = { id: 'media_1', type: 'image', assets: [mediaAsset], altText: 'Conference keynote stage' };
5const link: FeedPostLink = { url: 'https://news.example.com/keynote-recap', title: 'Keynote recap' };
6const createFeedPostParams: CreateFeedPostParams = {
7 title: 'Product Launch Highlights',
8 content: 'Highlights from today’s product launch and roadmap updates.',
9 authorId: 'user_42',
10 mediaItems: [mediaItem],
11 links: [link],
12 tags: ['product', 'launch', 'announcement']
13};
14const broadcastId: string = 'broadcast_20260424';
15const isLive: boolean = true;
16const doSpamCheck: boolean = true;
17const skipDupCheck: boolean = false;
18const result: CreateFeedPost200Response = await createFeedPost(tenantId, createFeedPostParams, broadcastId, isLive, doSpamCheck, skipDupCheck);
19

Créer une publication (publique) Internal Link

Paramètres

Name Type Obligatoire Description
tenantId string Oui
createFeedPostParams CreateFeedPostParams Oui
broadcastId string Non
sso string Non

Réponse

Renvoie : CreateFeedPostPublic200Response

Exemple

Exemple de createFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_987654321";
3const asset: FeedPostMediaItemAsset = { url: "https://cdn.fastcomments.com/uploads/team-photo.jpg", mimeType: "image/jpeg", sizeBytes: 324512 };
4const mediaItem: FeedPostMediaItem = { type: "image", assets: [asset], caption: "Team launch day" };
5const link: FeedPostLink = { url: "https://www.example.com/blog/product-update-march-2026", title: "Product update — March 2026" };
6const createFeedPostParams: CreateFeedPostParams = {
7 title: "Product update — March 2026",
8 content: "<p>We shipped performance improvements and two new integrations.</p>",
9 media: [mediaItem],
10 link,
11 visibility: "public",
12 tags: ["product","release","march-2026"],
13 customConfig: { allowComments: true, requireTOS: false }
14};
15const broadcastId: string = "broadcast_2026_03_25_live";
16const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NSIsImlhdCI6MTY5MDI0MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
17const result: CreateFeedPostPublic200Response = await createFeedPostPublic(tenantId, createFeedPostParams, broadcastId, sso);
18

Supprimer une publication (publique) Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
postId string Oui
broadcastId string Non
sso string Non

Réponse

Renvoie: DeleteFeedPostPublic200Response

Exemple

Exemple de deleteFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_5f8a9b3c";
3const postId: string = "post_a1b2c3d4";
4const broadcastId: string = "broadcast_2026-03-25T10:00:00Z";
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwiaWF0IjoxNjE5MjM5MjAwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6
7const resultWithOptional: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId, broadcastId, sso);
8const resultRequiredOnly: DeleteFeedPostPublic200Response = await deleteFeedPostPublic(tenantId, postId);
9

Récupérer les publications Internal Link

req tenantId afterId

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
afterId string Non
limit number Non
tags Array Non

Réponse

Renvoie : GetFeedPosts200Response

Exemple

Exemple de getFeedPosts
Copy Copy
1
2const initialPage: GetFeedPosts200Response = await getFeedPosts('tenant_9f1b3d', undefined, 20, ['sports', 'local']);
3const nextPage: GetFeedPosts200Response = await getFeedPosts('tenant_9f1b3d', 'post_abc123', 20, ['sports', 'local']);
4

Récupérer les publications (publiques) Internal Link

req tenantId afterId

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
afterId string Non
limit number Non
tags Array Non
sso string Non
isCrawler boolean Non
includeUserInfo boolean Non

Réponse

Renvoie : GetFeedPostsPublic200Response

Exemple

Exemple getFeedPostsPublic
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const afterId: string = 'fp_20260301_042';
4const limit: number = 25;
5const tags: Array<string> = ['technology', 'announcement'];
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiamRvZSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
7const isCrawler: boolean = false;
8const includeUserInfo: boolean = true;
9const response: GetFeedPostsPublic200Response = await getFeedPostsPublic(tenantId, afterId, limit, tags, sso, isCrawler, includeUserInfo);
10

Récupérer les statistiques des publications Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
postIds Array Oui
sso string Non

Réponse

Renvoie : GetFeedPostsStats200Response

Exemple

Exemple de getFeedPostsStats
Copy Copy
1
2const tenantId: string = 'tenant_9b2f1c4a';
3const postIds: Array<string> = [
4 '8f14e45f-ea82-4c7a-b6b2-1a2b3c4d5e6f',
5 'd0e1f2a3-b4c5-6d7e-8f90-1234567890ab'
6];
7const sso: string = 'sso_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.signature';
8const statsWithoutSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds);
9const statsWithSSO: GetFeedPostsStats200Response = await getFeedPostsStats(tenantId, postIds, sso);
10

Récupérer les réactions des utilisateurs (public) Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
postIds Array Non
sso string Non

Réponse

Retourne : GetUserReactsPublic200Response

Exemple

Exemple de getUserReactsPublic
Copy Copy
1
2const tenantId: string = "acme-tenant-8a4d2c";
3const postIds: string[] = ["post-645a2f", "post-645a30"];
4const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImlhdCI6MTY2MTYwMDAwMH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
5const result: GetUserReactsPublic200Response = await getUserReactsPublic(tenantId, postIds, sso);
6

Réagir à une publication (publique) Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
postId string Oui
reactBodyParams ReactBodyParams Oui
isUndo boolean Non
broadcastId string Non
urlId string Non
sso string Non

Réponse

Renvoie : ReactFeedPostPublic200Response

Exemple

Exemple reactFeedPostPublic
Copy Copy
1
2const tenantId: string = 'tenant_84f2b1';
3const postId: string = 'post_12ac9e';
4const reactBodyParams: ReactBodyParams = { emoji: 'thumbs_up', intensity: 1 };
5const isUndo: boolean = false;
6const broadcastId: string = 'broadcast_20260503_01';
7const urlId: string = 'article-4527';
8const sso: string = 'sso_token_7f3b2c';
9
10const result: ReactFeedPostPublic200Response = await reactFeedPostPublic(tenantId, postId, reactBodyParams, isUndo, broadcastId, urlId, sso);
11

Mettre à jour une publication Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
feedPost FeedPost Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de updateFeedPost
Copy Copy
1
2const tenantId: string = 'acme-global-tenant-42';
3const id: string = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
4
5const asset: FeedPostMediaItemAsset = {
6 url: 'https://cdn.acme.com/images/product-launch.jpg',
7 mimeType: 'image/jpeg',
8 width: 1200,
9 height: 630
10};
11
12const mediaItem: FeedPostMediaItem = {
13 id: 'media-001',
14 type: 'image',
15 asset
16};
17
18const link: FeedPostLink = {
19 url: 'https://acme.com/blog/product-launch',
20 title: 'Product Launch Details'
21};
22
23const feedPost: FeedPost = {
24 title: 'Introducing the Q3 Product Suite',
25 body: 'We are excited to unveil our new lineup for Q3, focusing on performance and security improvements.',
26 media: [mediaItem], // tableau optionnel inclus
27 links: [link], // liens optionnels inclus
28 isPublished: true // indicateur de publication optionnel utilisé ici
29};
30
31const result: FlagCommentPublic200Response = await updateFeedPost(tenantId, id, feedPost);
32

Mettre à jour une publication (publique) Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
postId string Oui
updateFeedPostParams UpdateFeedPostParams Oui
broadcastId string Non
sso string Non

Réponse

Renvoie: CreateFeedPostPublic200Response

Exemple

Exemple de updateFeedPostPublic
Copy Copy
1
2const tenantId: string = "tenant_9f4b2";
3const postId: string = "post_21a8e";
4const updateFeedPostParams: UpdateFeedPostParams = {
5 title: "Quarterly product update",
6 body: "Major performance improvements and bug fixes deployed today. See release notes and schedule.",
7 links: [{ url: "https://status.example.com/release-notes", title: "Release notes" }],
8 media: [
9 {
10 type: "image",
11 assets: [{ url: "https://cdn.example.com/updates/q2.png", mimeType: "image/png", width: 1200, height: 628 }]
12 }
13 ]
14};
15const broadcastId: string = "broadcast_live_202603";
16const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.signature";
17const result: CreateFeedPostPublic200Response = await updateFeedPostPublic(tenantId, postId, updateFeedPostParams, broadcastId, sso);
18

Signaler un commentaire (public) Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
commentId string Oui
isFlagged boolean Oui
sso string Non

Réponse

Retourne : FlagCommentPublic200Response

Exemple

Exemple de flagCommentPublic
Copy Copy
1
2const tenantId: string = "tenant_9f8b3c";
3const commentId: string = "comment_72a1d4";
4const isFlagged: boolean = true;
5const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1Njc4OSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
6const result: FlagCommentPublic200Response = await flagCommentPublic(tenantId, commentId, isFlagged, sso);
7

Récupérer un GIF grand format Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
largeInternalURLSanitized string Oui

Réponse

Renvoie : GifGetLargeResponse

Exemple

Exemple getGifLarge
Copy Copy
1
2const tenantId: string = 'acme_marketing_tenant_7';
3const largeInternalURLSanitized: string = 'https://cdn.acmeinc.com/gifs/promo-spring-2026_large_sanitized.gif';
4const includePreview: boolean | undefined = undefined; // indicateur optionnel que l'appelant pourrait utiliser
5const result: GifGetLargeResponse = await getGifLarge(tenantId, largeInternalURLSanitized);
6console.log(result, includePreview);
7

Rechercher des GIFs Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
search string Oui
locale string Non
rating string Non
page number Non

Réponse

Renvoie : GifSearchResponse

Exemple

Exemple de getGifsSearch
Copy Copy
1
2const tenantId: string = "tenant_fcm_42";
3const search: string = "funny golden retriever";
4const locale: string = "en-US";
5const rating: string = "pg";
6const page: number = 2;
7const result: GifSearchResponse = await getGifsSearch(tenantId, search, locale, rating, page);
8

Récupérer les GIFs tendance Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
locale string Non
rating string Non
page number Non

Réponse

Renvoie : GifSearchResponse

Exemple

Exemple d'appel de getGifsTrending
Copy Copy
1
2const tenantId: string = "acme-tenant-01";
3const trendingBasic: GifSearchResponse = await getGifsTrending(tenantId);
4
5const locale: string = "en-GB";
6const rating: string = "pg";
7const page: number = 1;
8const trendingWithOptions: GifSearchResponse = await getGifsTrending(tenantId, locale, rating, page);
9

Ajouter un hashtag Internal Link

Paramètres

Nom Type Requis Description
tenantId string Non
createHashTagBody CreateHashTagBody Non

Réponse

Renvoie : AddHashTag200Response

Exemple

Exemple addHashTag
Copy Copy
1
2const tenantId: string | undefined = undefined;
3const createHashTagBody: CreateHashTagBody = {
4 name: 'release-2026',
5 description: 'Feedback and bug reports for the April 2026 product release',
6 synonyms: ['v2-release', 'launch-2026'],
7 color: '#1d72b8',
8 isActive: true,
9 createdBy: 'product.manager@acme-corp.com'
10};
11const result: AddHashTag200Response = await addHashTag(tenantId, createHashTagBody);
12

Ajouter des hashtags en masse Internal Link


Paramètres

Nom Type Requis Description
tenantId string Non
bulkCreateHashTagsBody BulkCreateHashTagsBody Non

Réponse

Renvoie: AddHashTagsBulk200Response

Exemple

Exemple addHashTagsBulk
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_01';
3const bulkCreateHashTagsBody: BulkCreateHashTagsBody = {
4 tags: [
5 { name: 'feature-request', slug: 'feature-request', description: 'Requests for new capabilities', isActive: true, customConfig: { visibility: 'public' } as unknown as CustomConfigParameters }
6 ]
7};
8const addHashTagsResponse: AddHashTagsBulk200Response = await addHashTagsBulk(tenantId, bulkCreateHashTagsBody);
9
10const bulkCreateHashTagsBodyNoTenant: BulkCreateHashTagsBody = {
11 tags: [
12 { name: 'ux-feedback', slug: 'ux-feedback', description: 'User experience suggestions', isActive: true }
13 ]
14};
15const addHashTagsResponseNoTenant: AddHashTagsBulk200Response = await addHashTagsBulk(undefined, bulkCreateHashTagsBodyNoTenant);
16

Supprimer un hashtag Internal Link

Paramètres

Nom Type Requis Description
tag string Yes
tenantId string No
deleteHashTagRequest DeleteHashTagRequest No

Réponse

Renvoie: FlagCommentPublic200Response

Exemple

Exemple de deleteHashTag
Copy Copy
1
2const tag: string = "spring-sale-2026";
3const tenantId: string = "tenant-9876";
4const deleteHashTagRequest: DeleteHashTagRequest = {
5 requestedBy: "admin@retailco.com",
6 reason: "Campaign ended; remove associated auto-tags",
7 cascadeDelete: true
8};
9const result: FlagCommentPublic200Response = await deleteHashTag(tag, tenantId, deleteHashTagRequest);
10

Récupérer les hashtags Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
page number Non

Réponse

Retourne: GetHashTags200Response

Exemple

Exemple de getHashTags
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const pageNumber: number = 2;
4const responseWithPage: GetHashTags200Response = await getHashTags(tenantId, pageNumber);
5const responseWithoutPage: GetHashTags200Response = await getHashTags(tenantId);
6

Modifier partiellement un hashtag Internal Link

Paramètres

Nom Type Obligatoire Description
tag string Oui
tenantId string Non
updateHashTagBody UpdateHashTagBody Non

Réponse

Renvoie: PatchHashTag200Response

Exemple

Exemple de patchHashTag
Copy Copy
1
2const tag: string = "feature-ux-refresh";
3const tenantId: string = "tenant_4f92c1";
4const updateHashTagBody: UpdateHashTagBody = {
5 label: "UX Refresh",
6 description: "Track comments related to the 2026 UX redesign",
7 isActive: true,
8 metadata: { owner: "product-design", rolloutPhase: "phase-2" }
9};
10const response: PatchHashTag200Response = await patchHashTag(tag, tenantId, updateHashTagBody);
11

Créer un modérateur Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
createModeratorBody CreateModeratorBody Oui

Réponse

Renvoie : CreateModerator200Response

Exemple

Exemple d'utilisation de createModerator
Copy Copy
1
2const tenantId: string = "tenant_8f3b6c";
3const optionalConfig: CustomConfigParameters = { moderationThreshold: 5, escalateOnRepeatedOffenses: true };
4const newModerator: CreateModeratorBody = {
5 email: "lina.gomez@dailynews.com",
6 fullName: "Lina Gomez",
7 role: "senior_moderator",
8 enabled: true,
9 notifyByEmail: true,
10 customConfig: optionalConfig
11};
12const response: CreateModerator200Response = await createModerator(tenantId, newModerator);
13

Supprimer un modérateur Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui
sendEmail string Non

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de deleteModerator
Copy Copy
1
2const tenantId: string = 'tenant_9f8b7c6d';
3const id: string = 'mod_4a3e11ec9d1f0242ac120003';
4const sendEmail: string = 'true';
5const result: FlagCommentPublic200Response = await deleteModerator(tenantId, id, sendEmail);
6

Récupérer un modérateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie: GetModerator200Response

Exemple

Exemple getModerator
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-123';
3const id: string = 'mod-987654321';
4const moderatorResponse: GetModerator200Response = await getModerator(tenantId, id);
5

Récupérer les modérateurs Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
skip number Non

Réponse

Renvoie: GetModerators200Response

Exemple

Exemple de getModerators
Copy Copy
1
2const tenantId: string = 'tenant-12345-prod';
3const moderatorsPage1: GetModerators200Response = await getModerators(tenantId);
4const moderatorsPage2: GetModerators200Response = await getModerators(tenantId, 50);
5

Envoyer une invitation Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
fromName string Oui

Réponse

Renvoie: FlagCommentPublic200Response

Exemple

Exemple de sendInvite
Copy Copy
1
2const tenantId: string = 'tenant_acme-42';
3const id: string = 'comment_8f3b21a7';
4const fromName: string = 'Elena Morales';
5const replyToEmail: string | undefined = undefined;
6
7const result: FlagCommentPublic200Response = await sendInvite(tenantId, id, fromName, replyToEmail);
8

Mettre à jour un modérateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateModeratorBody UpdateModeratorBody Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple updateModerator
Copy Copy
1
2const tenantId: string = "acme-enterprises-42";
3const id: string = "moderator_517";
4const updateModeratorBody: UpdateModeratorBody = {
5 displayName: "Sofia Martinez",
6 email: "sofia.martinez@acme.com",
7 permissions: ["approve_comments", "flag_spam", "suspend_users"],
8 active: true,
9 avatarUrl: "https://cdn.acme.com/avatars/sofia.jpg" // champ optionnel démontré
10};
11const result: FlagCommentPublic200Response = await updateModerator(tenantId, id, updateModeratorBody);
12

Supprimer le compteur de notifications Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Retourne : FlagCommentPublic200Response

Exemple

Exemple de deleteNotificationCount
Copy Copy
1
2const tenantId: string = "org-72a8f1b9";
3const id: string = "notif-8f9c2e4a";
4const result: FlagCommentPublic200Response = await deleteNotificationCount(tenantId, id);
5console.log(result);
6

Récupérer le compteur de notifications en cache Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui

Réponse

Renvoie : GetCachedNotificationCount200Response

Exemple

Exemple pour getCachedNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_acme_42';
3const id: string = 'user_00012345';
4const includeUnreadOnly: boolean | undefined = true; // indicateur de paramètre optionnel (exemple)
5const result: GetCachedNotificationCount200Response = await getCachedNotificationCount(tenantId, id);
6

Récupérer le nombre de notifications Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
userId string Non
urlId string Non
fromCommentId string Non
viewed boolean Non
type string Non

Réponse

Retourne : GetNotificationCount200Response

Exemple

Exemple de getNotificationCount
Copy Copy
1
2const tenantId: string = 'tenant_abc123';
3const userId: string = 'user_987654321';
4const urlId: string = 'https://example.com/news/2026/new-features';
5const viewed: boolean = false;
6const type: string = 'reply';
7const notificationCountResponse: GetNotificationCount200Response = await getNotificationCount(tenantId, userId, urlId, undefined, viewed, type);
8

Récupérer les notifications Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
userId string Non
urlId string Non
fromCommentId string Non
viewed boolean Non
type string Non
skip number Non

Réponse

Retourne : GetNotifications200Response

Exemple

Exemple de getNotifications
Copy Copy
1
2const tenantId: string = "tenant_84b3f2";
3const userId: string = "user_1279";
4const urlId: string = "https://www.example.com/articles/2026/03/25/new-feature";
5const fromCommentId: string = "cmt_5421";
6const viewed: boolean = false;
7const type: string = "mention";
8const skip: number = 0;
9const notifications: GetNotifications200Response = await getNotifications(tenantId, userId, urlId, fromCommentId, viewed, type, skip);
10

Mettre à jour une notification Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateNotificationBody UpdateNotificationBody Oui
userId string Non

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de updateNotification
Copy Copy
1
2const tenantId: string = 'tenant_prod_8f4b2c';
3const id: string = 'notification_61a2e9';
4const userId: string = 'moderator_107';
5const updateNotificationBody: UpdateNotificationBody = {
6 name: 'Flagged Comment Notification',
7 enabled: true,
8 channels: ['email', 'inbox'],
9 templateId: 'tmpl_mod_alerts_01',
10 severity: 'high'
11};
12const result: FlagCommentPublic200Response = await updateNotification(tenantId, id, updateNotificationBody, userId);
13

Ajouter une page Internal Link


Paramètres

Nom Type Requis Description
tenantId string Oui
createAPIPageData CreateAPIPageData Oui

Réponse

Retourne: AddPageAPIResponse


Supprimer une page Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie : DeletePageAPIResponse


Récupérer la page par ID URL Internal Link


Paramètres

Nom Type Requis Description
tenantId string Oui
urlId string Oui

Réponse

Renvoie : GetPageByURLIdAPIResponse


Récupérer les pages Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui

Réponse

Renvoie : GetPagesAPIResponse


Modifier partiellement une page Internal Link


Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
updateAPIPageData UpdateAPIPageData Oui

Réponse

Renvoie: PatchPageAPIResponse


Supprimer un événement webhook en attente Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple deletePendingWebhookEvent
Copy Copy
1
2const tenantId: string = "tenant_7f3b2a";
3const webhookEventId: string = "wh_evt_9a8c7d1234";
4const dryRun: boolean | undefined = undefined; // exemple de paramètre optionnel (non requis par cet appel)
5const result: FlagCommentPublic200Response = await deletePendingWebhookEvent(tenantId, webhookEventId);
6

Récupérer le nombre d'événements webhook en attente Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Non
externalId string Non
eventType string Non
type string Non
domain string Non
attemptCountGT number Non

Réponse

Renvoie : GetPendingWebhookEventCount200Response

Exemple

Exemple de getPendingWebhookEventCount
Copy Copy
1
2const tenantId: string = "tenant_8d3b7a2f";
3const commentId: string | undefined = "comment_79a2b";
4const eventType: string | undefined = "comment.created";
5const domain: string | undefined = "forum.acme-corp.com";
6const attemptCountGT: number | undefined = 1;
7const result: GetPendingWebhookEventCount200Response = await getPendingWebhookEventCount(
8 tenantId,
9 commentId,
10 undefined,
11 eventType,
12 undefined,
13 domain,
14 attemptCountGT
15);
16

Récupérer les événements webhook en attente Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Non
externalId string Non
eventType string Non
type string Non
domain string Non
attemptCountGT number Non
skip number Non

Réponse

Renvoie: GetPendingWebhookEvents200Response

Exemple

Exemple de getPendingWebhookEvents
Copy Copy
1
2const tenantId: string = 'tenant_9b3f7c';
3const commentId: string | undefined = undefined;
4const externalId: string | undefined = 'external-572a';
5const eventType: string | undefined = 'comment.updated';
6const type: string | undefined = 'outbound';
7const domain: string | undefined = 'reviews.example.com';
8const attemptCountGT: number | undefined = 1;
9const skip: number | undefined = 20;
10
11const result: GetPendingWebhookEvents200Response = await getPendingWebhookEvents(
12 tenantId,
13 commentId,
14 externalId,
15 eventType,
16 type,
17 domain,
18 attemptCountGT,
19 skip
20);
21

Créer une configuration de question Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
createQuestionConfigBody CreateQuestionConfigBody Oui

Réponse

Renvoie : CreateQuestionConfig200Response

Exemple

Exemple createQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const createQuestionConfigBody: CreateQuestionConfigBody = {
4 title: "Post-purchase feedback",
5 description: "Quick survey about your recent order",
6 required: true,
7 renderingType: "single_choice",
8 options: [
9 { label: "Very dissatisfied", value: "1" },
10 { label: "Dissatisfied", value: "2" },
11 { label: "Neutral", value: "3" },
12 { label: "Satisfied", value: "4" },
13 { label: "Very satisfied", value: "5" }
14 ] as QuestionConfigCustomOptionsInner[]
15} as CreateQuestionConfigBody;
16const result: CreateQuestionConfig200Response = await createQuestionConfig(tenantId, createQuestionConfigBody);
17

Supprimer une configuration de question Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie: FlagCommentPublic200Response

Exemple

Exemple de deleteQuestionConfig
Copy Copy
1
2const tenantId: string = "tenant_42fa9b7c";
3const id: string = "qcfg-0f8fad5b-d9cb-469f-a165-70867728950e";
4const result: FlagCommentPublic200Response = await deleteQuestionConfig(tenantId, id);
5

Récupérer une configuration de question Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie: GetQuestionConfig200Response

Exemple

Exemple de getQuestionConfig
Copy Copy
1
2const tenantId: string = 'acme-tenant-92';
3const id: string = 'question-2026-07-42';
4const response: GetQuestionConfig200Response = await getQuestionConfig(tenantId, id);
5
6function summarize(cfg: GetQuestionConfig200Response, includeDetails?: boolean): string {
7 return includeDetails ? 'Question config (detailed)' : 'Question config (summary)';
8}
9
10const summary: string = summarize(response);
11

Récupérer les configurations de questions Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
skip number Non

Réponse

Renvoie : GetQuestionConfigs200Response

Exemple

Exemple de getQuestionConfigs
Copy Copy
1
2const tenantId: string = "tenant_acme_9876";
3const configsWithoutSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId);
4const configsWithSkip: GetQuestionConfigs200Response = await getQuestionConfigs(tenantId, 20);
5

Mettre à jour une configuration de question Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateQuestionConfigBody UpdateQuestionConfigBody Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de updateQuestionConfig
Copy Copy
1
2const tenantId: string = 'tenant_42e8b';
3const id: string = 'question_9f4a2';
4const updateQuestionConfigBody: UpdateQuestionConfigBody = {
5 questionText: 'How helpful was this article?',
6 description: 'Shown to users below the question (optional)',
7 required: true,
8 renderingType: 'Likert' as QuestionRenderingType,
9 customOptions: [
10 { label: 'Very helpful', value: '5' } as QuestionConfigCustomOptionsInner,
11 { label: 'Somewhat helpful', value: '3' } as QuestionConfigCustomOptionsInner,
12 { label: 'Not helpful', value: '1' } as QuestionConfigCustomOptionsInner
13 ],
14 whenSave: 'notify' as QuestionWhenSave
15};
16const result: FlagCommentPublic200Response = await updateQuestionConfig(tenantId, id, updateQuestionConfigBody);
17

Créer un résultat de question Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
createQuestionResultBody CreateQuestionResultBody Oui

Réponse

Renvoie : CreateQuestionResult200Response

Exemple

Exemple de createQuestionResult
Copy Copy
1
2const tenantId: string = 'fastcomments-tenant-01';
3const createQuestionResultBody: CreateQuestionResultBody = {
4 questionId: 'q-34567',
5 respondentId: 'user-8923',
6 answers: [{ optionId: 'opt_A', text: 'Agree', count: 1 }],
7 score: 5,
8 meta: [{ key: 'platform', value: 'web' }],
9 notifyModerators: false // paramètre optionnel
10} as CreateQuestionResultBody;
11const result: CreateQuestionResult200Response = await createQuestionResult(tenantId, createQuestionResultBody);
12

Supprimer un résultat de question Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Retourne: FlagCommentPublic200Response

Exemple

Exemple de deleteQuestionResult
Copy Copy
1
2const tenantIdEnv: string | undefined = process.env.FASTCOMMENTS_TENANT_ID;
3const tenantId: string = tenantIdEnv ?? 'tenant_78b3f2';
4const id: string = 'qres-9f2a3b1c';
5const response: FlagCommentPublic200Response = await deleteQuestionResult(tenantId, id);
6

Récupérer un résultat de question Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Yes
id string Yes

Réponse

Renvoie: GetQuestionResult200Response

Exemple

Exemple de getQuestionResult
Copy Copy
1
2const post: { title: string; questionId?: string } = { title: 'Product feedback' };
3const tenantId: string = 'acme-corp-tenant-01';
4const id: string = post.questionId ?? 'q-8f3a7b2c4d9e';
5const result: GetQuestionResult200Response = await getQuestionResult(tenantId, id);
6

Récupérer les résultats des questions Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
urlId string Non
userId string Non
startDate string Non
questionId string Non
questionIds string Non
skip number Non

Réponse

Renvoie : GetQuestionResults200Response

Exemple

Exemple de getQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_001";
3const urlId: string = "articles/product-launch-2026";
4const userId: string = "user_2048";
5const startDate: string = "2026-03-01T00:00:00Z";
6const questionId: string | undefined = undefined;
7const questionIds: string | undefined = "q_101,q_102";
8const skip: number | undefined = 0;
9
10const result: GetQuestionResults200Response = await getQuestionResults(tenantId, urlId, userId, startDate, questionId, questionIds, skip);
11

Mettre à jour un résultat de question Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui
updateQuestionResultBody UpdateQuestionResultBody Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de updateQuestionResult
Copy Copy
1
2const tenantId: string = 'tenant_7f8b3c';
3const id: string = 'questionResult_4621';
4const updateQuestionResultBody: UpdateQuestionResultBody = {
5 questionId: 'q_1024',
6 result: 'flagged',
7 score: 0.92,
8 notes: 'Automated moderation flagged for review',
9 meta: [{ key: 'source', value: 'ai-moderator' }] as MetaItem[], // métadonnées optionnelles
10 status: { code: 'review_pending' } as APIStatus
11} as UpdateQuestionResultBody;
12const result: FlagCommentPublic200Response = await updateQuestionResult(tenantId, id, updateQuestionResultBody);
13

Agréger les résultats des questions Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
questionId string Non
questionIds Array Non
urlId string Non
timeBucket AggregateTimeBucket Non
startDate Date Non
forceRecalculate boolean Non

Réponse

Renvoie: AggregateQuestionResults200Response

Exemple

Exemple pour aggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_001";
3const questionIds: string[] = ["q-2026-sales", "q-2026-support"];
4const urlId: string = "url_7f2c";
5const timeBucket: AggregateTimeBucket = { unit: "week", size: 1 };
6const startDate: Date = new Date("2026-01-01T00:00:00Z");
7const forceRecalculate: boolean = true;
8
9const result: AggregateQuestionResults200Response = await aggregateQuestionResults(
10 tenantId,
11 undefined,
12 questionIds,
13 urlId,
14 timeBucket,
15 startDate,
16 forceRecalculate
17);
18

Agrégation en masse des résultats des questions Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest Oui
forceRecalculate boolean Non

Réponse

Renvoie: BulkAggregateQuestionResults200Response

Exemple

Exemple de bulkAggregateQuestionResults
Copy Copy
1
2const tenantId: string = "tenant_acme_42";
3const bulkAggregateQuestionResultsRequest: BulkAggregateQuestionResultsRequest = {
4 questions: [
5 { questionId: "q-001", threadId: "thread-1001", questionType: "rating" },
6 { questionId: "q-002", threadId: "thread-1002", questionType: "yes_no" }
7 ],
8 timeRange: { from: "2026-03-01T00:00:00Z", to: "2026-04-01T00:00:00Z" },
9 groupBy: ["questionId", "threadId"]
10};
11const forceRecalculate: boolean = true;
12const result: BulkAggregateQuestionResults200Response = await bulkAggregateQuestionResults(tenantId, bulkAggregateQuestionResultsRequest, forceRecalculate);
13

Combiner les commentaires avec les résultats des questions Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
questionId string Non
questionIds Array Non
urlId string Non
startDate Date Non
forceRecalculate boolean Non
minValue number Non
maxValue number Non
limit number Non

Réponse

Renvoie : CombineCommentsWithQuestionResults200Response

Exemple

Exemple de combineCommentsWithQuestionResults
Copy Copy
1
2const tenantId: string = 'tenant-acme-001';
3const questionId: string | undefined = 'q-analytics-42';
4const questionIds: string[] | undefined = ['q-analytics-42', 'q-feedback-17'];
5const urlId: string | undefined = 'url-987654';
6const startDate: Date | undefined = new Date('2026-01-01T00:00:00Z');
7const forceRecalculate: boolean | undefined = true;
8const minValue: number | undefined = 1;
9const maxValue: number | undefined = 5;
10const limit: number | undefined = 250;
11const result: CombineCommentsWithQuestionResults200Response = await combineCommentsWithQuestionResults(
12 tenantId,
13 questionId,
14 questionIds,
15 urlId,
16 startDate,
17 forceRecalculate,
18 minValue,
19 maxValue,
20 limit
21);
22

Ajouter un utilisateur SSO Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
createAPISSOUserData CreateAPISSOUserData Oui

Réponse

Renvoie : AddSSOUserAPIResponse


Supprimer un utilisateur SSO Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
deleteComments boolean Non
commentDeleteMode string Non

Réponse

Renvoie: DeleteSSOUserAPIResponse


Récupérer un utilisateur SSO par email Internal Link


Paramètres

Nom Type Requis Description
tenantId string Oui
email string Oui

Réponse

Renvoie : GetSSOUserByEmailAPIResponse


Récupérer un utilisateur SSO par ID Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie: GetSSOUserByIdAPIResponse


Récupérer les utilisateurs SSO Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
skip number Non

Réponse

Retourne: GetSSOUsers200Response


Modifier partiellement un utilisateur SSO Internal Link


Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateAPISSOUserData UpdateAPISSOUserData Oui
updateComments boolean Non

Réponse

Renvoie: PatchSSOUserAPIResponse


Remplacer un utilisateur SSO Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
updateAPISSOUserData UpdateAPISSOUserData Oui
updateComments boolean Non

Réponse

Renvoie: PutSSOUserAPIResponse


Créer un abonnement Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
createAPIUserSubscriptionData CreateAPIUserSubscriptionData Oui

Réponse

Renvoie: CreateSubscriptionAPIResponse

Exemple

Exemple de createSubscription
Copy Copy
1
2const tenantId: string = "acme-corp-tenant-123";
3const createAPIUserSubscriptionData: CreateAPIUserSubscriptionData = {
4 userId: "user_98765",
5 planId: "pro_monthly",
6 paymentMethod: { type: "card", cardId: "card_abc123" },
7 autoRenew: true,
8 trialDays: 14, // paramètre optionnel démontré
9 metadata: { campaign: "spring_launch" } // paramètre optionnel démontré
10};
11const result: CreateSubscriptionAPIResponse = await createSubscription(tenantId, createAPIUserSubscriptionData);
12

Supprimer un abonnement Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
userId string Non

Réponse

Retourne: DeleteSubscriptionAPIResponse


Récupérer les abonnements Internal Link

Paramètres

Name Type Required Description
tenantId string Yes
userId string No

Réponse

Retourne: GetSubscriptionsAPIResponse

Exemple

Exemple de getSubscriptions
Copy Copy
1
2const tenantId: string = 'tenant_acme_corp_01';
3const userId: string = 'user_76a3b9f2';
4const subscriptionsForUser: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId, userId);
5const subscriptionsForTenant: GetSubscriptionsAPIResponse = await getSubscriptions(tenantId);
6

Mettre à jour un abonnement Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
updateAPIUserSubscriptionData UpdateAPIUserSubscriptionData Oui
userId string Non

Réponse

Renvoie : UpdateSubscriptionAPIResponse

Exemple

Exemple pour updateSubscription
Copy Copy
1
2const tenantId: string = 'tenant_9f3b2c';
3const subscriptionId: string = 'sub_7641a2b3';
4const updateData: UpdateAPIUserSubscriptionData = {
5 status: 'active',
6 planId: 'pro_annual',
7 autoRenew: true,
8 renewalDate: '2026-04-15T00:00:00Z',
9 metadata: { upgradedBy: 'billing-team' }
10};
11const userId: string = 'user_215';
12const result: UpdateSubscriptionAPIResponse = await updateSubscription(tenantId, subscriptionId, updateData, userId);
13

Récupérer l'utilisation quotidienne du locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
yearNumber number Non
monthNumber number Non
dayNumber number Non
skip number Non

Réponse

Retourne : GetTenantDailyUsages200Response

Exemple

Exemple de getTenantDailyUsages
Copy Copy
1
2const tenantId: string = 'tenant_5f4a3b2c-1d6e-4f9a-b9d8-123456789abc';
3const yearNumber: number = 2026;
4const monthNumber: number = 3;
5const dayNumber: number = 24;
6const skip: number = 0;
7
8const result: GetTenantDailyUsages200Response = await getTenantDailyUsages(tenantId, yearNumber, monthNumber, dayNumber, skip);
9

Créer un forfait du locataire Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
createTenantPackageBody CreateTenantPackageBody Oui

Réponse

Renvoie: CreateTenantPackage200Response

Exemple

Exemple de createTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_acme-corp_001";
3const createTenantPackageBody: CreateTenantPackageBody = {
4 name: "Acme Standard Package",
5 description: "Default package for Acme Corp comments with moderation and SSO enabled",
6 enabled: true,
7 maxCommentsPerThread: 500,
8 voteStyle: "thumbs",
9 gifRating: "PG-13",
10 tosConfig: { enabled: true, url: "https://acme.example.com/terms" } // paramètre optionnel illustré
11};
12const result: CreateTenantPackage200Response = await createTenantPackage(tenantId, createTenantPackageBody);
13

Supprimer un forfait du locataire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de deleteTenantPackage
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_8f3a2b4c9d01";
4 const packageId: string = "pkg_2026-04-security-patch";
5 const result: FlagCommentPublic200Response = await deleteTenantPackage(tenantId, packageId);
6 console.log(result);
7})();
8

Récupérer un forfait du locataire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui

Réponse

Renvoie : GetTenantPackage200Response

Exemple

Exemple de getTenantPackage
Copy Copy
1
2const tenantId: string = 'tenant_7f3b2c8';
3const packageId: string = 'pkg_standard_2026';
4const requestOptions: { includeConfig?: boolean } = { includeConfig: true };
5const packageResponse: GetTenantPackage200Response = await getTenantPackage(tenantId, packageId);
6

Récupérer les forfaits du locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
skip number Non

Réponse

Renvoie: GetTenantPackages200Response

Exemple

Exemple de getTenantPackages
Copy Copy
1
2const tenantId: string = "tenant_7f8e3b4c";
3const skip: number = 20;
4const packagesDefault: GetTenantPackages200Response = await getTenantPackages(tenantId);
5const packagesWithSkip: GetTenantPackages200Response = await getTenantPackages(tenantId, skip);
6

Remplacer un forfait du locataire Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
id string Oui
replaceTenantPackageBody ReplaceTenantPackageBody Oui

Réponse

Retourne: FlagCommentPublic200Response

Exemple

Exemple de replaceTenantPackage
Copy Copy
1
2const tenantId: string = "tenant-9f3c2a";
3const id: string = "pkg_4f8b21";
4const replaceTenantPackageBody: ReplaceTenantPackageBody = {
5 packageName: "Premium Moderation Pack",
6 enabled: true,
7 apiStatus: { mode: "active" } as APIStatus,
8 customConfigParameters: { maxFlagsBeforeReview: 5 } as CustomConfigParameters,
9 voteStyle: "thumbs" as VoteStyle,
10 tosConfig: { requireAcceptance: true } as TOSConfig
11};
12const result: FlagCommentPublic200Response = await replaceTenantPackage(tenantId, id, replaceTenantPackageBody);
13

Mettre à jour un forfait du locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateTenantPackageBody UpdateTenantPackageBody Oui

Réponse

Retourne : FlagCommentPublic200Response

Exemple

Exemple pour updateTenantPackage
Copy Copy
1
2const tenantId: string = "tenant_3b7f9d-prod";
3const id: string = "pkg_enterprise_2026";
4const updateTenantPackageBody: UpdateTenantPackageBody = {
5 name: "Enterprise Plus",
6 isActive: true,
7 // champs optionnels omis volontairement (par ex., description, limites)
8} as UpdateTenantPackageBody;
9const result: FlagCommentPublic200Response = await updateTenantPackage(tenantId, id, updateTenantPackageBody);
10

Créer un utilisateur du locataire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
createTenantUserBody CreateTenantUserBody Oui

Réponse

Renvoie: CreateTenantUser200Response

Exemple

Exemple de createTenantUser
Copy Copy
1
2const tenantId: string = "tenant_74b3a9f4b";
3const createTenantUserBody: CreateTenantUserBody = {
4 email: "jane.doe@acmecorp.com",
5 displayName: "Jane Doe",
6 role: "moderator",
7 sendWelcomeEmail: true, // paramètre optionnel démontré
8 metadata: { department: "Customer Support" }
9};
10const result: CreateTenantUser200Response = await createTenantUser(tenantId, createTenantUserBody);
11

Supprimer un utilisateur du locataire Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui
deleteComments string Non
commentDeleteMode string Non

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de deleteTenantUser
Copy Copy
1
2async function run(): Promise<void> {
3 const tenantId: string = "acme_corp_tenant_9f1a2b";
4 const id: string = "user_4d2a1b6c";
5 const deleteComments: string = "true"; // supprimer également les commentaires de l'utilisateur
6 const commentDeleteMode: string = "permanent"; // "permanent" ou "soft"
7 const result: FlagCommentPublic200Response = await deleteTenantUser(tenantId, id, deleteComments, commentDeleteMode);
8 console.log(result);
9}
10run();
11

Récupérer un utilisateur du locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Retourne: GetTenantUser200Response

Exemple

Exemple getTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_fc5a9b2c';
3const userId: string = 'user_0a12b3';
4const result: GetTenantUser200Response = await getTenantUser(tenantId, userId);
5const user: User | undefined = (result as any).user; // accès au payload
6const userEmail: string | undefined = user?.email;
7console.log('Fetched user email:', userEmail);
8

Récupérer les utilisateurs du locataire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
skip number Non

Réponse

Renvoie : GetTenantUsers200Response

Exemple

Exemple getTenantUsers
Copy Copy
1
2const tenantId: string = 'tenant_prod_8a3f2c';
3const skip: number = 50;
4const usersWithSkip: GetTenantUsers200Response = await getTenantUsers(tenantId, skip);
5const usersNoSkip: GetTenantUsers200Response = await getTenantUsers(tenantId);
6

Remplacer un utilisateur du locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
replaceTenantUserBody ReplaceTenantUserBody Oui
updateComments string Non

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

Exemple de replaceTenantUser
Copy Copy
1
2const tenantId: string = 'tenant_9d8f4b2c';
3const id: string = 'user_f47ac10b';
4const replaceTenantUserBody: ReplaceTenantUserBody = {
5 externalId: 'ext-5234',
6 email: 'jane.doe@acme.com',
7 displayName: 'Jane Doe',
8 roles: ['moderator'],
9 metadata: { department: 'product', region: 'us-east-1' }
10};
11const updateComments: string = 'propagate-display-name-to-comments';
12
13const result: FlagCommentPublic200Response = await replaceTenantUser(tenantId, id, replaceTenantUserBody, updateComments);
14

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui
redirectURL string Non

Réponse

Renvoie: FlagCommentPublic200Response

Exemple

Exemple de sendLoginLink
Copy Copy
1
2const tenantId: string = "tenant_12a9f3b7";
3const id: string = "user_84b2c7d1";
4const redirectURL: string = "https://app.mycompany.com/welcome?ref=login_email";
5const resultWithoutRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id);
6const resultWithRedirect: FlagCommentPublic200Response = await sendLoginLink(tenantId, id, redirectURL);
7

Mettre à jour un utilisateur du locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateTenantUserBody UpdateTenantUserBody Oui
updateComments string Non

Réponse

Retourne: FlagCommentPublic200Response

Exemple

Exemple de updateTenantUser
Copy Copy
1
2const tenantId: string = "tenant_8f3b2a9d";
3const id: string = "user_52c9f1ab";
4const updateTenantUserBody: UpdateTenantUserBody = {
5 email: "jane.doe@example.com",
6 displayName: "Jane Doe",
7 roles: ["moderator"],
8 isActive: true,
9 metadata: { signupSource: "sso", locale: "en-US" }
10};
11const updateComments: string = "Promoted to moderator and updated display name";
12const result: FlagCommentPublic200Response = await updateTenantUser(tenantId, id, updateTenantUserBody, updateComments);
13

Créer un locataire Internal Link

Parameters

Nom Type Requis Description
tenantId string Oui
createTenantBody CreateTenantBody Oui

Response

Renvoie : CreateTenant200Response

Exemple

Exemple de createTenant
Copy Copy
1
2const tenantId: string = 'acme-corp-001';
3const createTenantBody: CreateTenantBody = {
4 name: 'Acme Corporation',
5 domainConfiguration: { primaryDomain: 'comments.acme.com', enforceHttps: true } as APIDomainConfiguration,
6 billingInfo: { planId: 'enterprise', contactEmail: 'billing@acme.com' } as BillingInfo
7 // les champs optionnels comme ssoConfig ou customConfig sont volontairement omis
8} as CreateTenantBody;
9
10const result: CreateTenant200Response = await createTenant(tenantId, createTenantBody);
11

Supprimer un locataire Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
sure string Non

Réponse

Renvoie : FlagCommentPublic200Response

Exemple

deleteTenant Exemple
Copy Copy
1
2const tenantId: string = 'tenant_42c9f1';
3const id: string = 'flag_9a7b3c';
4const sure: string = 'confirm-delete';
5const result: FlagCommentPublic200Response = await deleteTenant(tenantId, id, sure);
6

Récupérer un locataire Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
id string Oui

Réponse

Renvoie : GetTenant200Response

Exemple

Exemple de getTenant
Copy Copy
1
2const tenantId: string = "tenant_9f4b2c1a";
3const idOverride: string | undefined = undefined; // remplacement optionnel, si disponible
4const id: string = idOverride ?? "site_3e7a6b2f";
5const response: GetTenant200Response = await getTenant(tenantId, id);
6console.log(response);
7

Récupérer les locataires Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
meta string Non
skip number Non

Réponse

Renvoie: GetTenants200Response

Exemple

Exemple pour getTenants
Copy Copy
1
2const tenantId: string = 'tenant_8421e7';
3const meta: string = 'include=domains,billing,customConfig';
4const skip: number = 20;
5
6const tenantsBasic: GetTenants200Response = await getTenants(tenantId);
7const tenantsWithOptions: GetTenants200Response = await getTenants(tenantId, meta, skip);
8

Mettre à jour un locataire Internal Link

Paramètres

Nom Type Requis Description
tenantId string Yes
id string Yes
updateTenantBody UpdateTenantBody Yes

Réponse

Retourne: FlagCommentPublic200Response

Exemple

Exemple de updateTenant
Copy Copy
1
2const tenantId: string = "tenant_4821";
3const id: string = "flag_7b9e";
4const billingInfo: BillingInfo | undefined = undefined; // optionnel, omettre pour conserver les informations de facturation actuelles
5const updateTenantBody: UpdateTenantBody = {
6 name: "Acme News Comments",
7 defaultDomain: "comments.acme.com",
8 ...(billingInfo ? { billingInfo } : {})
9};
10const result: FlagCommentPublic200Response = await updateTenant(tenantId, id, updateTenantBody);
11

Changer l'état du ticket Internal Link

Paramètres

Name Type Obligatoire Description
tenantId string Oui
userId string Oui
id string Oui
changeTicketStateBody ChangeTicketStateBody Oui

Réponse

Renvoie : ChangeTicketState200Response

Exemple

Exemple de changeTicketState
Copy Copy
1
2const tenantId: string = "tenant_7f3b2c9a";
3const userId: string = "user_5a1d9fb2";
4const id: string = "ticket_3e8a1b6f";
5const changeTicketStateBody: ChangeTicketStateBody = {
6 state: "closed",
7 reason: "Fixed in backend release 2.4.1",
8 notifyUsers: true,
9 metadata: { resolutionOwner: "agent_12", priority: "high" } // champs optionnels illustrés
10};
11const result: ChangeTicketState200Response = await changeTicketState(tenantId, userId, id, changeTicketStateBody);
12

Créer un ticket Internal Link

Paramètres

Name Type Requis Description
tenantId string Oui
userId string Oui
createTicketBody CreateTicketBody Oui

Réponse

Renvoie : CreateTicket200Response

Exemple

Exemple de createTicket
Copy Copy
1
2const tenantId: string = '7f3e9b1a-1c2d-4a5b-b6c7-d8e9f0123456';
3const userId: string = 'd290f1ee-6c54-4b01-90e6-d701748f0851';
4const createTicketBody: CreateTicketBody = {
5 subject: 'Unable to post comments on product update',
6 message: 'Submitting a comment returns a 504 timeout after ~10s. Reproducible in Chrome and Firefox.',
7 priority: 'high', // champ optionnel inclus
8 contactEmail: 'jane.doe@acme-corp.com',
9 ccEmails: ['eng-oncall@acme-corp.com'], // champ optionnel inclus
10 metadata: { page: '/blog/product-update', browser: 'Chrome 112' } // optionnel
11};
12const response: CreateTicket200Response = await createTicket(tenantId, userId, createTicketBody);
13

Récupérer un ticket Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
userId string Non

Réponse

Renvoie : GetTicket200Response

Exemple

Exemple de getTicket
Copy Copy
1
2const tenantId: string = 'acme-corp-tenant-01';
3const ticketId: string = 'tkt-20260325-42';
4const userId: string = 'user-8452';
5
6const ticketResponseWithUser: GetTicket200Response = await getTicket(tenantId, ticketId, userId);
7const ticketResponseWithoutUser: GetTicket200Response = await getTicket(tenantId, ticketId);
8

Récupérer les tickets Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
userId string Non
state number Non
skip number Non
limit number Non

Réponse

Renvoie: GetTickets200Response

Exemple

Exemple de getTickets
Copy Copy
1
2const tenantId: string = "tenant_92f3b4c1";
3const userId: string = "user_742a9f3e";
4const state: number = 1;
5const skip: number = 0;
6const limit: number = 25;
7const ticketsFull: GetTickets200Response = await getTickets(tenantId, userId, state, skip, limit);
8const ticketsMinimal: GetTickets200Response = await getTickets("tenant_92f3b4c1");
9

Récupérer les traductions Internal Link


Paramètres

Nom Type Obligatoire Description
namespace string Oui
component string Oui
locale string Non
useFullTranslationIds boolean Non

Réponse

Renvoie : GetTranslationsResponse

Exemple

Exemple de getTranslations
Copy Copy
1
2const translationsBase: GetTranslationsResponse = await getTranslations("acme-site-482", "commentThread");
3const translationsSpanishFullIds: GetTranslationsResponse = await getTranslations("acme-site-482", "commentThread", "es-ES", true);
4

Téléverser une image Internal Link


Téléverser et redimensionner une image

Paramètres

Nom Type Requis Description
tenantId string Oui
file Blob Oui
sizePreset SizePreset Non
urlId string Non

Réponse

Renvoie: UploadImageResponse


Récupérer la progression du badge utilisateur par ID Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui

Réponse

Renvoie: GetUserBadgeProgressById200Response

Exemple

Exemple de getUserBadgeProgressById
Copy Copy
1
2const optionalTenantSuffix: string | undefined = undefined;
3const tenantId: string = `5f8d0d55-1234-4ab1-9e2a-3f2b5c6d7e8f${optionalTenantSuffix ?? ''}`;
4const id: string = '3a2b1c4d-5678-4ef0-9abc-def123456789';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressById(tenantId, id);
6

Récupérer la progression du badge utilisateur par ID d'utilisateur Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
userId string Oui

Réponse

Renvoie : GetUserBadgeProgressById200Response

Exemple

Exemple getUserBadgeProgressByUserId
Copy Copy
1
2const tenantId: string = 'tenant_7f9c2d3b';
3const maybeUserId: string | undefined = 'user_4b8e1f9a'; // source optionnelle (peut être undefined)
4const userId: string = maybeUserId ?? 'user_fallback0001';
5const result: GetUserBadgeProgressById200Response = await getUserBadgeProgressByUserId(tenantId, userId);
6console.log(result);
7

Récupérer la liste de progression des badges utilisateur Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
userId string Non
limit number Non
skip number Non

Réponse

Renvoie : GetUserBadgeProgressList200Response

Exemple

Exemple de getUserBadgeProgressList
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_4f8c2b9d';
4 const userId: string = 'user_9a7e215c';
5 const limit: number = 25;
6 const skip: number = 0;
7 const resultMinimal: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId);
8 const resultFull: GetUserBadgeProgressList200Response = await getUserBadgeProgressList(tenantId, userId, limit, skip);
9 console.log(resultMinimal, resultFull);
10})();
11

Créer un badge utilisateur Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
createUserBadgeParams CreateUserBadgeParams Oui

Réponse

Retourne : CreateUserBadge200Response

Exemple

Exemple de createUserBadge
Copy Copy
1
2const tenantId: string = "tenant_9a8b7c";
3const params: CreateUserBadgeParams = {
4 name: "Top Contributor",
5 slug: "top-contributor",
6 description: "Awarded for 100 approved comments",
7 iconUrl: "https://cdn.fastcomments.com/badges/top-contributor.png",
8 active: true,
9 criteria: { approvedComments: 100 },
10 customConfig: { showOnProfile: true } // paramètre optionnel
11};
12const result: CreateUserBadge200Response = await createUserBadge(tenantId, params);
13

Supprimer un badge utilisateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui

Réponse

Renvoie: UpdateUserBadge200Response

Exemple

Exemple deleteUserBadge
Copy Copy
1
2type DeleteOptions = { notifyModerators?: boolean };
3
4const tenantId: string = 'tenant_8a3f21';
5const id: string = 'badge_71f2b';
6const options: DeleteOptions = { notifyModerators: true };
7
8const result: UpdateUserBadge200Response = await deleteUserBadge(tenantId, id);
9

Récupérer un badge utilisateur Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui

Réponse

Renvoie: GetUserBadge200Response

Exemple

Exemple de getUserBadge
Copy Copy
1
2const tenantId: string = "tenant_acme_01";
3const id: string = "badge_8c7d2f";
4const response: GetUserBadge200Response = await getUserBadge(tenantId, id);
5

Récupérer les badges utilisateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
userId string Non
badgeId string Non
type number Non
displayedOnComments boolean Non
limit number Non
skip number Non

Réponse

Renvoie : GetUserBadges200Response

Exemple

Exemple getUserBadges
Copy Copy
1
2const tenantId: string = 'tenant_acme_01';
3const userId: string = 'user_5f4d3c2a';
4const badgeId: string = 'badge_top_contributor';
5const type: number = 1;
6const displayedOnComments: boolean = true;
7const limit: number = 50;
8const skip: number = 0;
9
10const result: GetUserBadges200Response = await getUserBadges(tenantId, userId, badgeId, type, displayedOnComments, limit, skip);
11

Mettre à jour un badge utilisateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
id string Oui
updateUserBadgeParams UpdateUserBadgeParams Oui

Réponse

Renvoie : UpdateUserBadge200Response

Exemple

Exemple de updateUserBadge
Copy Copy
1
2(async () => {
3 const tenantId: string = 'tenant_acme_987';
4 const id: string = 'badge_top_contributor_42';
5 const updateUserBadgeParams: UpdateUserBadgeParams = {
6 title: 'Top Contributor',
7 description: 'Awarded for reaching 100 high-quality comments',
8 color: '#FFD700',
9 iconUrl: 'https://cdn.acme.com/badges/top-contributor.svg',
10 active: true,
11 notifyUsers: true
12 } as UpdateUserBadgeParams;
13 const result: UpdateUserBadge200Response = await updateUserBadge(tenantId, id, updateUserBadgeParams);
14 console.log(result);
15})();
16

Récupérer le nombre de notifications de l'utilisateur Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
sso string Non

Réponse

Retourne: GetUserNotificationCount200Response

Exemple

Exemple de getUserNotificationCount
Copy Copy
1
2(async () => {
3 const tenantId: string = '9f1e2d3c-4b5a-6d7e-8f90-123456789abc';
4 const ssoToken: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MjMifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
5 const resultWithSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId, ssoToken);
6 const resultWithoutSSO: GetUserNotificationCount200Response = await getUserNotificationCount(tenantId);
7 console.log(resultWithSSO, resultWithoutSSO);
8})();
9

Récupérer les notifications de l'utilisateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
pageSize number Non
afterId string Non
includeContext boolean Non
afterCreatedAt number Non
unreadOnly boolean Non
dmOnly boolean Non
noDm boolean Non
includeTranslations boolean Non
sso string Non

Réponse

Renvoie : GetUserNotifications200Response

Exemple

Exemple de getUserNotifications
Copy Copy
1
2const tenantId: string = 'tenant_7f3b1c';
3const pageSize: number = 25;
4const afterId: string = 'notif_b2f9e4';
5const includeContext: boolean = true;
6const afterCreatedAt: number = Date.now() - 24 * 60 * 60 * 1000;
7const unreadOnly: boolean = true;
8const dmOnly: boolean = false;
9const noDm: boolean = false;
10const includeTranslations: boolean = true;
11const sso: string = 'sso_tok_user_9f8d7c';
12const response: GetUserNotifications200Response = await getUserNotifications(
13 tenantId,
14 pageSize,
15 afterId,
16 includeContext,
17 afterCreatedAt,
18 unreadOnly,
19 dmOnly,
20 noDm,
21 includeTranslations,
22 sso
23);
24

Réinitialiser le compteur de notifications de l'utilisateur Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
sso string Non

Réponse

Returns: ResetUserNotifications200Response

Exemple

Exemple de resetUserNotificationCount
Copy Copy
1
2(async () => {
3 const tenantId: string = "tenant_9f3b2c4a";
4 const ssoToken: string | undefined = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9._sample_payload_.signature";
5 const responseWithSSO: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId, ssoToken);
6 const responseWithoutSSO: ResetUserNotifications200Response = await resetUserNotificationCount(tenantId);
7 console.log(responseWithSSO, responseWithoutSSO);
8})();
9

Réinitialiser les notifications de l'utilisateur Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
afterId string Non
afterCreatedAt number Non
unreadOnly boolean Non
dmOnly boolean Non
noDm boolean Non
sso string Non

Réponse

Renvoie: ResetUserNotifications200Response

Exemple

Exemple resetUserNotifications
Copy Copy
1
2const tenantId: string = "tenant_prod_4a9f12";
3const afterId: string = "notification_87213";
4const afterCreatedAt: number = Math.floor(Date.now() / 1000) - 3600;
5const unreadOnly: boolean = true;
6const dmOnly: boolean = false;
7const sso: string = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example.payload";
8const result: ResetUserNotifications200Response = await resetUserNotifications(tenantId, afterId, afterCreatedAt, unreadOnly, dmOnly, undefined, sso);
9

Mettre à jour le statut d'abonnement aux notifications de commentaires de l'utilisateur Internal Link

Activer ou désactiver les notifications pour un commentaire spécifique.

Paramètres

Name Type Required Description
tenantId string Oui
notificationId string Oui
optedInOrOut UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum Oui
commentId string Oui
sso string Non

Réponse

Renvoie : UpdateUserNotificationStatus200Response

Exemple

Exemple de updateUserNotificationCommentSubscriptionStatus
Copy Copy
1
2const tenantId: string = 'acme-tenant-001';
3const notificationId: string = 'notif-2026-03-25-01';
4const commentId: string = 'cmt-8f3a2b';
5const optedInOrOut: UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum = UpdateUserNotificationCommentSubscriptionStatusOptedInOrOutEnum.OptIn;
6const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso-payload.signature';
7const result: UpdateUserNotificationStatus200Response = await updateUserNotificationCommentSubscriptionStatus(tenantId, notificationId, optedInOrOut, commentId, sso);
8

Mettre à jour le statut d'abonnement aux notifications de pages de l'utilisateur Internal Link


Activer ou désactiver les notifications pour une page. Lorsque les utilisateurs sont abonnés à une page, des notifications sont créées pour les nouveaux commentaires racines, et aussi

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
urlId string Oui
url string Oui
pageTitle string Oui
subscribedOrUnsubscribed UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum Oui
sso string Non

Réponse

Renvoie : UpdateUserNotificationStatus200Response

Exemple

Exemple updateUserNotificationPageSubscriptionStatus
Copy Copy
1
2const tenantId: string = 'acme-tenant-42';
3const urlId: string = 'blog-launch-2026';
4const url: string = 'https://acme.example.com/blog/launch-march-2026';
5const pageTitle: string = 'Acme Product Launch — March 2026';
6const subscribedOrUnsubscribed: UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum = UpdateUserNotificationPageSubscriptionStatusSubscribedOrUnsubscribedEnum.Subscribed;
7const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
8const response: UpdateUserNotificationStatus200Response = await updateUserNotificationPageSubscriptionStatus(tenantId, urlId, url, pageTitle, subscribedOrUnsubscribed, sso);
9

Mettre à jour le statut de notification de l'utilisateur Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
notificationId string Oui
newStatus UpdateUserNotificationStatusNewStatusEnum Oui
sso string Non

Réponse

Renvoie: UpdateUserNotificationStatus200Response

Exemple

Exemple de updateUserNotificationStatus
Copy Copy
1
2const tenantId: string = 'tenant_84a2c3';
3const notificationId: string = 'notif_20260325_01';
4const newStatus: UpdateUserNotificationStatusNewStatusEnum = UpdateUserNotificationStatusNewStatusEnum.Read;
5const sso: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sso_signature_example';
6const result: UpdateUserNotificationStatus200Response = await updateUserNotificationStatus(tenantId, notificationId, newStatus, sso);
7

Récupérer les statuts de présence des utilisateurs Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
urlIdWS string Oui
userIds string Oui

Réponse

Renvoie : GetUserPresenceStatuses200Response

Exemple

Exemple de getUserPresenceStatuses
Copy Copy
1
2const tenantId: string = 'tenant_7f3a2b';
3const urlIdWS: string = 'articles/2026/03/25/fastcomments-integration';
4const maybeUserIds: string | undefined = 'user_123,user_456'; // source optionnelle
5const userIds: string = maybeUserIds ?? 'user_123';
6const presence: GetUserPresenceStatuses200Response = await getUserPresenceStatuses(tenantId, urlIdWS, userIds);
7

Rechercher des utilisateurs Internal Link

Paramètres

Nom Type Requis Description
tenantId string Oui
urlId string Oui
usernameStartsWith string Non
mentionGroupIds Array Non
sso string Non
searchSection SearchUsersSearchSectionEnum Non

Réponse

Renvoie: SearchUsers200Response

Exemple

Exemple de searchUsers
Copy Copy
1
2const tenantId: string = 'tenant_8392';
3const urlId: string = 'articles/2026/03/25/fastcomments-release';
4const usernameStartsWith: string = 'jo';
5const mentionGroupIds: Array<string> = ['editors', 'senior-writers'];
6const sso: string = 'sso_jwt_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9';
7const searchSection: SearchUsersSearchSectionEnum = SearchUsersSearchSectionEnum.ALL;
8const result: SearchUsers200Response = await searchUsers(tenantId, urlId, usernameStartsWith, mentionGroupIds, sso, searchSection);
9

Récupérer un utilisateur Internal Link


Paramètres

Nom Type Requis Description
tenantId string Oui
id string Oui

Réponse

Renvoie: GetUser200Response

Exemple

Exemple getUser
Copy Copy
1
2const tenantId: string = 'tenant_7b3f42';
3const id: string = 'user_9c4d2a';
4const userResponse: GetUser200Response = await getUser(tenantId, id);
5console.log(userResponse);
6

Créer un vote Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
commentId string Oui
direction CreateVoteDirectionEnum Oui
userId string Non
anonUserId string Non

Réponse

Renvoie: VoteComment200Response

Exemple

Exemple pour createVote
Copy Copy
1
2const tenantId: string = 'tenant_5f2a9b';
3const commentId: string = 'cmt_3b7e21';
4const direction: CreateVoteDirectionEnum = CreateVoteDirectionEnum.Up;
5const anonUserId: string = 'anon_9x7k2p';
6const voteResult: VoteComment200Response = await createVote(tenantId, commentId, direction, undefined, anonUserId);
7

Supprimer un vote Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
id string Oui
editKey string Non

Réponse

Renvoie : DeleteCommentVote200Response

Exemple

Exemple de deleteVote
Copy Copy
1
2const tenantId: string = '123e4567-e89b-12d3-a456-426614174000';
3const id: string = 'vote-7a1b2c3d-9f8e-4b6a-8123-abcdef012345';
4const editKey: string = 'editKey_4f3e2d1c';
5
6const resultWithEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id, editKey);
7const resultWithoutEditKey: DeleteCommentVote200Response = await deleteVote(tenantId, id);
8

Récupérer les votes Internal Link

Paramètres

Nom Type Obligatoire Description
tenantId string Oui
urlId string Oui

Réponse

Renvoie : GetVotes200Response

Exemple

Exemple de getVotes
Copy Copy
1
2const tenantId: string = 'acme-corp-8f3b';
3const refCampaign: string | undefined = 'newsletter-march2026'; // paramètre de requête optionnel
4const urlId: string = `https://www.example.com/articles/2026/03/25/fastcomments-integration${refCampaign ? `?ref=${refCampaign}` : ''}`;
5
6const votes: GetVotes200Response = await getVotes(tenantId, urlId);
7

Récupérer les votes pour un utilisateur Internal Link

Paramètres

Name Type Required Description
tenantId string Oui
urlId string Oui
userId string Non
anonUserId string Non

Réponse

Renvoie: GetVotesForUser200Response

Exemple

Exemple de getVotesForUser
Copy Copy
1
2(async (): Promise<void> => {
3 const tenantId: string = "local-news-ny";
4 const urlId: string = "articles/2026-03-25/ev-infrastructure-update";
5 const userId: string = "user_78b6f3d9";
6 const anonUserId: string = "anon_9c3f7a1b";
7 const result: GetVotesForUser200Response = await getVotesForUser(tenantId, urlId, userId, anonUserId);
8 console.log(result);
9})();
10

Besoin d'aide ?

Si vous rencontrez des problèmes ou avez des questions concernant le SDK JavaScript/TypeScript, veuillez :

Contribuer

Les contributions sont les bienvenues ! Veuillez consulter le dépôt GitHub pour les consignes de contribution.