FastComments.com

ライブコメント API

FastComments API

FastComments は多数のリソースとやり取りするための API を提供します。プラットフォームとの統合を構築したり、独自のクライアントを作成したりできます!

このドキュメントでは、API がサポートするすべてのリソースと、そのリクエストおよびレスポンスタイプが記載されています。

エンタープライズ顧客向けには、すべての API アクセスが監査ログに記録されます。

生成された SDK

FastComments は現在、コードから API Spec を生成しています(まだ完全ではありませんが、多くの API が含まれています)。

また、人気のある言語向けの SDK も用意しています:

認証

API は、API キー を X-API-KEY ヘッダーまたは API_KEY クエリパラメータのいずれかで渡すことで認証されます。API 呼び出しを行うには tenantId も必要です。tenantId は API キーと同じページから取得できます。

セキュリティに関する注意

これらのルートは サーバー から呼び出すことを想定しています。絶対に ブラウザから呼び出さないでください。そうすると API キーが露出し、ページのソースコードを閲覧できる人があなたのアカウントにフルアクセスできてしまいます!

認証オプション 1 - ヘッダー

  • Header: X-API-KEY
  • Header: X-TENANT-ID

認証オプション 2 - クエリパラメータ

  • Query Param: API_KEY
  • Query Param: tenantId

認証オプション 3 - OAuth ベアラートークン

  • Header: Authorization: Bearer fcat_...

Zapier などのサードパーティアプリケーションや MCP サーバー のクライアントは、API キーの代わりに OAuth を通じてトークンを取得します。そのトークンはここにあるすべてのエンドポイントで使用できます。テナントはトークンに含まれるため、tenantId は任意ですが、指定する場合はトークンと一致する必要があります。GET リクエストには read スコープが必要で、その他のメソッドには write スコープが必要です。クライアント登録、PKCE、リフレッシュ、トークン失効を含む全フローは OAuth Authorization に記載されています。ディスカバリーは https://fastcomments.com/.well-known/oauth-authorization-server から開始します。

自分の書き込みの読み取り

FastComments はアクティブ-アクティブの可用性を提供します。データセンターからのリクエストは、最も近いプレゼンスポイント にルーティングされます。これは自動的に行われ、通常は「書いたものをすぐに読む」セマンティクスが観測できます。自分の書き込みを確実に読む必要がある場合は、対象のリージョンを API ホストとして使用し、リクエストをそのリージョンに固定できます(ただし、ほとんどの統合では通常必要ありません):

  • gdc-oregon.fastcomments.com
  • gdc-virginia.fastcomments.com
  • gdc-singapore.fastcomments.com
  • gdc-falkenstein2.fastcomments.com
  • gdc-sao-paulo.fastcomments.com
  • eudc-helsinki2.fastcomments.com
  • eudc-limburg.fastcomments.com
  • eudc-france.fastcomments.com

ただし、これを行う場合はフォールバックを定義した方がよいでしょう。過去にエントリーポイントノードを廃止し、切り替え時に新しい名前を使用しているためです。

監査ログ構造 Internal Link

An AuditLog は、この機能へのアクセス権を持つテナント向けの監査イベントを表すオブジェクトです。

AuditLog オブジェクトの構造は以下の通りです:

AuditLog の構造
Copy Copy
1
2interface AuditLog {
3 id: string;
4 /** イベントを実行したユーザー。 **/
5 userId?: string;
6 username?: string;
7 resourceName: string;
8 crudType: 'c' | 'r' | 'u' | 'd' | 'login';
9 from: string;
10 url?: string;
11 ip?: string;
12 /** イベントがブラウザから来た場合、そのブラウザ。 **/
13 ua?: string;
14 /** イベントが発生したセッションのハッシュ。個人の操作を関連付けるために使用します。セッション自体は含まれません。 **/
15 sIdHashed?: string;
16 when: string;
17 description?: string;
18 serverStartDate: string;
19 /** イベントが実行されたオブジェクトの ID(実行者ではなく)。 **/
20 targetId?: string;
21 /** そのオブジェクトの人間が読めるラベル(例: "jsmith (jsmith@example.com)")。 **/
22 targetLabel?: string;
23 objectDetails?: object;
24}
25

targetId と targetLabel はイベントが実行された対象を示し、userId と username は実行者を示します。更新の場合、objectDetails.changes は実際に変更された {field: {from, to}} マップを保持します。

監査ログは不変です。また、手動で書き込むことはできません。FastComments.com が監査ログへの書き込みタイミングを決定します。ただし、この API を通じて監査ログを読み取ることは可能です。

監査ログ内のイベントは2 年後に期限切れとなります。

バッチジョブ構造 Internal Link

A BatchJob は、インポート、エクスポート、またはページマイグレーション のような長時間実行されるタスクです。ジョブはキューに入れられ、バックグラウンドで取得され実行されます。

processedCount と totalCount は進捗を示します。その単位は type に依存します。

  • migrate-pages: 要求されたマイグレーション数に対する完了したマイグレーション数。
  • undo-page-migration: 復元されたレコード数。totalCount はありません。
  • import、export、その他のジョブ: 処理された行数。

BatchJob オブジェクトの構造は以下の通りです。

BatchJob の構造
Copy Copy
1
2interface BatchJob {
3 id: string
4 /** 例: migrate-pages、undo-page-migration、migrate-domains、import、export、users-export、または copy-comments。 **/
5 type: string
6 status: 'requested' | 'running' | 'success' | 'failed'
7 createdAt: string
8 completedAt?: string
9 processedCount: number
10 /** 事前に分かっている総作業量。 **/
11 totalCount?: number
12 /** migrate-pages: 完了した各マイグレーションごとに1つのエントリ、リクエスト順。 **/
13 pageMigrationResults?: Array<PageMigrationSuccess | PageMigrationFailure>
14 /**
15 * migrate-pages: ジョブが完了したら設定されます(成功または失敗)。90日以内に POST /api/v1/pages/migrations/:undoId/undo に渡してください。
16 * undo-page-migration: 元に戻すマイグレーションです。
17 **/
18 undoId?: string
19 /** undo-page-migration: ジョブが完了したら設定されます。 **/
20 pageMigrationUndoResult?: PageMigrationUndoResult
21}
22
23interface PageMigrationSuccess {
24 from: string
25 to: string
26 type: 'urlId' | 'domain'
27 status: 'success'
28 commentsMigrated: number
29}
30
31interface PageMigrationFailure {
32 from: string
33 to: string
34 type: 'urlId' | 'domain'
35 status: 'failed'
36 code: string
37 reason: string
38}
39
40interface PageMigrationUndoResult {
41 /** マイグレーション前の値に戻されたレコード。 **/
42 restored: number
43 /** マイグレーション後に変更された、または存在しなくなったためそのまま残されたレコード。 **/
44 skipped: number
45 /** ページ統合中に削除されたマイグレーションのレコード。これらは復元できません。 **/
46 notRestorable: number
47}
48

リトライ

ページマイグレーションジョブを実行しているサーバーが再起動した場合、ジョブはキューに戻され、最後に完了したマイグレーションの後から再開されます。ジョブは最大 3 回まで試行され、それ以上は status が failed になります。

コメント構造 Internal Link

A Comment object represents a comment left by a user.

親コメントと子コメントの関係は parentId によって定義されます。

Comment オブジェクトの構造は次のとおりです:

コメント構造
Copy Copy
1
2interface Comment {
3 /** READONLY: スパムエンジンがコメントをスパムと判断した場合に true に設定されます。 **/
4 aiDeterminedSpam?: boolean
5 /** コメントが表示されるように承認されているかどうか。コメントの保存時に true に設定され、そうでなければ非表示になります。 **/
6 approved?: boolean
7 /** ユーザーのアバター。 **/
8 avatarSrc?: string
9 /** 子コメント。すべてのシナリオで埋められるわけではありません。API で asTree を true にした場合に使用されます。 **/
10 children: Comment[]
11 /** 投稿者が入力した生のコメント。 **/
12 comment: string
13 /** READONLY: 投稿者のコメントを HTML にパースしたもの。 **/
14 commentHTML?: string
15 /** 匿名コメントがオフの場合は必須の投稿者のメールアドレス。 **/
16 commenterEmail?: string
17 /** 投稿者のリンク(例えばブログ)。 **/
18 commenterLink?: string
19 /** 投稿者の名前。常に必須。利用できない場合は "Anonymous" などに設定してください。 **/
20 commenterName: string
21 /** コメントが残された日時(UTC エポック)。 **/
22 date: number
23 /** コメントの「表示ラベル」— 例えば "Admin"、"Moderator"、あるいは "VIP User" のようなもの。 **/
24 displayLabel?: string
25 /** コメントが投稿されたドメイン。 **/
26 domain?: string
27 /** READONLY: コメントがフラグ付けされた回数。 **/
28 flagCount?: number
29 /** コメント内で正常に解析された #ハッシュタグ。検索のためにハッシュタグを手動で追加することもできますが、自動的にコメントテキスト内に表示はされません。 **/
30 hashTags?: CommentHashTag[]
31 /** READONLY: コメントに画像が含まれているかどうか。 **/
32 hasImages?: boolean
33 /** READONLY: コメントにリンクが含まれているかどうか。 **/
34 hasLinks?: boolean
35 /** READONLY: ユニークなコメント ID。 **/
36 id: string
37 /** 作成時のみ!保存用にハッシュ化されます。 **/
38 ip?: string
39 /** READONLY: 現在のユーザーがこのコメントを書いたユーザーをブロックしているかどうか。 **/
40 isBlocked?: boolean
41 /** READONLY: 管理者によるコメントかどうか。userId に基づいて自動設定されます。 **/
42 isByAdmin?: boolean
43 /** READONLY: モデレーターによるコメントかどうか。userId に基づいて自動設定されます。 **/
44 isByModerator?: boolean
45 /** 他の設定のためにプレースホルダを残す必要があった場合など、コメントがソフト削除された場合は true に設定されます。 **/
46 isDeleted?: boolean
47 /** ユーザーのアカウントが削除され、コメントを保持する必要があった場合は true に設定されます。 **/
48 isDeletedUser?: boolean
49 /** READONLY: 現在ログイン中のユーザー(contextUserId)がフラグを付けているかどうか。 **/
50 isFlagged?: boolean
51 /** コメントがピン留めされているかどうか。 **/
52 isPinned?: boolean
53 /** コメントがロックされているかどうか。true の場合、ロック解除されるまで誰も(モデレーターを含む)返信、編集、削除ができません。 **/
54 isLocked?: boolean
55 /** コメントがスパムかどうか。 **/
56 isSpam?: boolean
57 /** READONLY: 現在のユーザー(contextUserId)に対してコメントがダウンボートされているかどうか。 **/
58 isVotedDown?: boolean
59 /** READONLY: 現在のユーザー(contextUserId)に対してコメントがアップボートされているかどうか。 **/
60 isVotedUp?: boolean
61 /** コメントのロケール。指定がない場合は Accept-Language ヘッダから導出されます。 **/
62 locale?: 'de_de' | 'en_us' | 'es_es' | 'fr_fr' | 'it_it' | 'ja_jp' | 'ko_kr' | 'pl_pl' | 'pt_br' | 'ru_ru' | 'tr_tr' | 'zh_cn' | 'zh_tw'
63 /** READONLY: コメント内で正常に解析された @メンション。 **/
64 mentions?: CommentUserMention[]
65 /** コメントに関連付けられたオプションのメタデータ。 **/
66 meta?: Record<string, string | number | boolean>
67 /** このコメントに関連付けられたモデレーショングループ ID のオプションリスト。 **/
68 moderationGroupIds?: string[]|null
69 /** READONLY: 現在のユーザー(contextUserId)がこのコメントに対して行った投票に対応する vote オブジェクトの ID。 **/
70 myVoteId?: string
71 /** コメントに対して投稿者向けの通知が送信されたかどうか。インポート時に通知を送信しないようにするにはこれを true に設定します。 **/
72 notificationSentForParent?: boolean
73 /** テナントユーザー向けの通知がこのコメントに対して送信されたかどうか。インポート時に通知を送信しないようにするにはこれを true に設定します。 **/
74 notificationSentForParentTenant?: boolean
75 /** このコメントがあったページのタイトル。 **/
76 pageTitle?: string
77 /** 返信の場合、返信先のコメントの ID。 **/
78 parentId?: string|null
79 /** コメントがレビュー済みとしてマークされているかどうか。 **/
80 reviewed: boolean
81 /** コメントが属するテナントの ID。 **/
82 tenantId: string
83 /** コメントを書いたユーザー。名前/メールでコメントを保存すると自動的に作成されます。 **/
84 userId?: string|null
85 /** コメントが表示される場所(ブログ記事など)への URL。 **/
86 url: string
87 /** 渡した urlId を「正規化」した値。保存時にこのフィールドを指定しますが、コメントを取得するとこの値が「クリーン化」され、元の値は "urlIdRaw" に移動します。 **/
88 urlId: string
89 /** READONLY: あなたが渡した元の urlId。 **/
90 urlIdRaw?: string
91 /** ユーザーとこのコメントが検証済みかどうか。 **/
92 verified: boolean
93 /** 賛成票の数。 **/
94 votesUp?: number
95 /** 反対票の数。 **/
96 votesDown?: number
97 /** コメントの「カーマ」(= votes up - votes down)。 **/
98 votes?: number
99}
100

これらのフィールドの一部には READONLY と記載されています — これらは API によって返されますが設定することはできません。

コメントテキスト構造

コメントは FastComments 独自のマークダウンで記述されます。これは通常のマークダウンに加えて、画像用の従来の bbcode スタイルタグ(例: [img]path[/img])が使えるというものです。

テキストは 2 つのフィールドに保存されます。ユーザーが入力したテキストは変更されずに comment フィールドに保存されます。これはレンダリングされ commentHTML フィールドに保存されます。

許可されている HTML タグは b, u, i, strike, pre, span, code, img, a, strong, ul, ol, li, and br です。

HTML をレンダリングすることを推奨します。許可される HTML は非常に限定的なサブセットなので、レンダラーを作るのは比較的簡単です。たとえば React Native や Flutter 向けのライブラリが複数存在し、この作業を助けてくれます。

comment フィールドの正規化されていない値をレンダリングすることもできます。 例のパーサーはこちら。

その例のパーサーは HTML に対応するように調整し、HTML タグをプラットフォームでレンダリングするために期待される要素へ変換することもできます。

タグ付け

ユーザーがコメント内でタグ付けされると、その情報は mentions と呼ばれるリストに格納されます。そのリスト内の各オブジェクトは次の構造を持ちます。

コメントのメンションオブジェクト
Copy CopyRun External Link
1
2interface CommentUserMention {
3 /** ユーザー id。SSO ユーザーの場合はあなたのテナント id が接頭辞として付与されます。 **/
4 id: string
5 /** 最終的な @メンションタグのテキスト(@ 記号を含む)。 **/
6 tag: string
7 /** 元の @メンションタグのテキスト(@ 記号を含む)。 **/
8 rawTag: string
9 /** タグ付けされたユーザーのタイプ。user = FastComments.com アカウント、sso = SSOUser。 **/
10 type: 'user'|'sso'
11 /** ユーザーが通知をオプトアウトしている場合でも、これが true に設定されます。 **/
12 sent: boolean
13}
14

ハッシュタグ

ハッシュタグが使用されて正常に解析された場合、その情報は hashTags と呼ばれるリストに格納されます。そのリスト内の各オブジェクトは次の構造を持ちます。ハッシュタグは、retain が設定されている場合、コメントテキストに存在しなくてもクエリ用にコメントの hashTags 配列に手動で追加することができます。

コメントのハッシュタグオブジェクト
Copy CopyRun External Link
1
2interface CommentHashTag {
3 /** ハッシュタグの id。 **/
4 id: string
5 /** 最終的な #ハッシュタグのテキスト(# 記号を含む)。 **/
6 tag: string
7 /** ハッシュタグがカスタム URL に関連付けられている場合は定義されます。 **/
8 url?: string
9 /** コメント更新時にコメントテキストに存在しなくてもハッシュタグを保持するかどうか。コメントテキストを変更せずにコメントにタグ付けするのに便利です。 **/
10 retain?: boolean
11}
12

メールテンプレート構造 Internal Link

EmailTemplate オブジェクトは、テナント向けのカスタムメールテンプレートの設定を表します。

システムは以下の方法で使用するメールテンプレートを選択します:

  • そのタイプ識別子。これを emailTemplateId と呼びます。これらは定数です。
  • domain。まず、関連するオブジェクト(例えば Comment)が紐づいているドメインのテンプレートを探し、一致が見つからない場合は、domain が null または * のテンプレートを探します。

EmailTemplate オブジェクトの構造は以下の通りです:

メールテンプレートの構造
Copy Copy
1
2interface EmailTemplate {
3 id: string
4 tenantId: string
5 emailTemplateId: string
6 displayName: string
7 /** READONLY **/
8 createdAt: string
9 /** READONLY **/
10 updatedAt: string
11 /** READONLY **/
12 updatedByUserId: string
13 /** The domain the template should be associated with. **/
14 domain?: string | '*' | null
15 /** The email template content in EJS syntax. **/
16 ejs: string
17 /** A map of overridden translation keys to values, for each supported locale. **/
18 translationOverridesByLocale: Record<string, Record<string, string>>
19 /** An object that represents the render context of the template. **/
20 testData: object
21}
22

注意事項

  • 有効な emailTemplateId の値は /definitions エンドポイントから取得できます。
  • /definitions エンドポイントには、デフォルトの翻訳とテストデータも含まれています。
  • 構造やテストデータが無効な場合、テンプレートは保存に失敗します。

フィード投稿構造 Internal Link

A FeedPost オブジェクトは FastComments フィード内の投稿を表します。フィードは、各投稿が独自のコメントスレッドを持つ投稿のストリームで、Feed ウィジェットによってレンダリングされます。各投稿には作者、オプションのリッチコンテンツ、メディア、リンクがあり、タグ付けできるためフィードをフィルタリングできます。

FeedPost オブジェクトの構造は以下の通りです:

FeedPost の構造
Copy Copy
1
2interface FeedPost {
3 /** READONLY **/
4 _id: string
5 /** READONLY **/
6 tenantId: string
7 title?: string
8 /** 投稿を作成した FastComments または SSO ユーザーの ID。 **/
9 fromUserId?: string
10 /** 設定されていない場合、ユーザーから取得されます。 **/
11 fromUserDisplayName?: string | null
12 /** READONLY。ユーザーから取得されます。 **/
13 fromUserAvatar?: string | null
14 /** フィードをフィルタリングするために使用されます。 **/
15 tags?: string[]
16 /** フィード内でのソート重み。値が大きいほど先に表示されます。 **/
17 weight?: number
18 /** 独自に使用できる自由形式のキー/バリューのペア。 **/
19 meta?: Record<string, string>
20 /** サニタイズされた HTML。 **/
21 contentHTML?: string
22 media?: FeedPostMediaItem[]
23 links?: FeedPostLink[]
24 /** READONLY **/
25 createdAt: string
26 /** READONLY。カウント対象のリアクションタイプ。 **/
27 reacts?: Record<string, number>
28 /** READONLY **/
29 commentCount?: number | null
30}
31
32interface FeedPostMediaItem {
33 title?: string
34 /** クリック時にメディア項目がリンクする先。 **/
35 linkUrl?: string
36 /** 各レンダリングごとに1つのエントリ。ウィジェットが最適なものを選択します。 **/
37 sizes: FeedPostMediaItemAsset[]
38}
39
40interface FeedPostMediaItemAsset {
41 w: number
42 h: number
43 src: string
44}
45
46interface FeedPostLink {
47 /** リンクテキスト(例: "今すぐサインアップ")。 **/
48 text?: string
49 /** リンクと共に表示される見出し。 **/
50 title?: string
51 /** リンクと共に表示される説明。 **/
52 description?: string
53 url?: string
54}
55

注記:

  • これらのフィールドの一部は READONLY とマークされています。これは API から返されますが、設定できません。
  • 投稿のコメントは、urlId が post: に続いて投稿の _id となる通常のコメントです。その値を Comment API に使用して、投稿上のコメントを取得または作成できます。

ハッシュタグ構造 Internal Link

HashTag オブジェクトは、ユーザーが残せるタグを表します。HashTagsは、外部コンテンツへのリンクや、関連するコメントを結びつけるために使用できます。

HashTag オブジェクトの構造は以下の通りです:

HashTag 構造
Copy Copy
1
2interface HashTag {
3 /** Should start with the "#" or desired character. **/
4 tag: string
5 /** An optional URL that the hashtag can point to. Instead of filtering comments by hashtag, the UI will redirect to this upon click. **/
6 url?: string
7 /** READONLY **/
8 createdAt: string
9}
10

注意:

  • 一部のAPIエンドポイントでは、ハッシュタグがURL内で使用されます。値はURIエンコードすることを忘れないでください。例えば、# は %23 として表現する必要があります。
  • 一部のフィールドは READONLY とマークされています - これらはAPIから返されますが、設定することはできません。

通知数構造 Internal Link

NotificationCount オブジェクトはユーザーの未読通知数とメタデータを表します。

未読の通知がない場合、ユーザーに対する NotificationCount は存在しません。

NotificationCount オブジェクトは自動的に作成され、API経由で作成することはできません。これらは1年で期限切れになります。

ユーザーの未読通知数は、その NotificationCount を削除することでクリアできます。

NotificationCount オブジェクトの構造は次のとおりです:

NotificationCount の構造
Copy Copy
1
2interface NotificationCount {
3 id: string // ユーザーID
4 count: number
5 createdAt: string // 日付文字列
6 expireAt: string // 日付文字列
7}
8

通知構造 Internal Link

Notificationオブジェクトはユーザーのための通知を表します。

Notificationオブジェクトは自動的に作成され、API経由で作成することはできません。これらはまた1年後に期限切れになります。

通知は削除できません。ただし、viewedをfalseに設定するよう更新することはでき、viewedでクエリすることができます。

ユーザーは、通知のoptedOutをtrueにすることで特定のコメントの通知をオプトアウトできます。再度受け取りたい場合はfalseに設定してください。

通知にはさまざまなタイプがあります — relatedObjectTypeとtypeを確認してください。

通知の作成方法は非常に柔軟で、多くのシナリオでトリガーされます(NotificationTypeを参照)。

現在、Notificationの存在がメールが送信される、または送信されるべきであることを意味するわけではありません。むしろ、通知は通知フィードおよび関連する統合で使用されます。

Notificationオブジェクトの構造は次のとおりです:

通知の構造
Copy Copy
1
2enum NotificationObjectType {
3 Comment = 0,
4 Profile = 1,
5 Tenant = 2
6}
7
8enum NotificationType {
9 /** 誰かがあなたに返信した場合。 **/
10 RepliedToMe = 0,
11 /** あなたがコメントしたスレッド内のどこか(子の子も含む)で誰かが返信した場合。 **/
12 RepliedTransientChild = 1,
13 /** あなたのコメントがアップボートされた場合。 **/
14 VotedMyComment = 2,
15 /** あなたが購読しているページのルートに新しいコメントが残された場合。 **/
16 SubscriptionReplyRoot = 3,
17 /** 誰かがあなたのプロフィールにコメントした場合。 **/
18 CommentedOnProfile = 4,
19 /** ダイレクトメッセージ(DM)がある場合。 **/
20 DirectMessage = 5,
21 /** TrialLimitsはテナントユーザーのみ対象です。 **/
22 TrialLimits = 6,
23 /** あなたが@メンションされた場合。 **/
24 Mentioned = 7
25}
26
27interface Notification {
28 id: string
29 tenantId: string
30 /** SSOを使用する場合、ユーザーIDの形式は `<tenant id>:<user id>`です。 **/
31 userId?: string
32 /** SSOを扱う際は、`userId`のみ気にすればよいです。 **/
33 anonUserId?: string
34 /** urlIdはほとんどの場合定義されています。テナントレベルの通知の場合のみ省略可能で、これは稀です。 **/
35 urlId?: string
36 /** URLは通知のソースへ迅速に移動できるようキャッシュされます。 **/
37 url?: string
38 /** ページタイトルは通知のソースを素早く確認できるようキャッシュされます。 **/
39 pageTitle?: string
40 relatedObjectType: NotificationObjectType
41 /** 例えば、コメントID。 **/
42 relatedObjectId: string
43 viewed: boolean
44 createdAt: string // 日付文字列
45 type: NotificationType
46 fromCommentId?: string
47 fromVoteId?: string
48 /** fromUserNameとfromUserAvatarSrcは通知の表示を迅速に行うためにここでキャッシュされます。ユーザーが更新されるとこれらも更新されます。 **/
49 fromUserName: string
50 fromUserId: string
51 fromUserAvatarSrc?: string
52 /** これをtrueに設定するとこのオブジェクトの通知を受け取らなくなります。 **/
53 optedOut?: boolean
54}
55

ページ構造 Internal Link

Page オブジェクトは、多くのコメントが属する可能性のあるページを表します。この関係は urlId によって定義されます。

Page は、ページタイトル、コメント数、urlId などの情報を保存します。

Page オブジェクトの構造は以下の通りです:

ページ構造
Copy Copy
1
2interface Page {
3 id: string
4 urlId: string
5 url: string
6 title?: string
7 createdAt: string
8 commentCount: number
9 rootCommentCount: number
10 /** Setting this to null means all SSO users can see the page. An empty list means it is closed to all users. **/
11 accessibleByGroupIds?: string[] | null
12 /** Is this page closed for new comments? **/
13 isClosed?: boolean
14}
15

投票構造 Internal Link

Poll は独立したオブジェクトではなく、コメントに紐付けられます。コメントと同時に作成されるか( POST /api/v1/comments を参照)、後から既存のコメントに PUT /api/v1/polls/:commentId を使って追加されます。

投票数はポール自体に保持されるため、ポールを読み取るだけで、何かを合計することなく結果を取得できます。これらの投票数の背後にある個々の投票は PollVote オブジェクトです。

各選択肢には、ポールの作成時に生成される id があります。この id は、投票を行う、選択肢のラベルを変更する、そして選択肢を追加または削除してポールを PUT する際に選択肢(とその投票)を保持するために使用します。選択肢を参照する唯一の安全な方法はこの id であり、リスト内の位置では決してありません。

ポールの構造
Copy Copy
1
2interface CommentPollOption {
3 id: string
4 label: string
5 votes: number
6}
7
8interface CommentPoll {
9 question: string
10 options: CommentPollOption[]
11 totalVotes: number
12 /** 設定されていて過去の日時である場合、ポールは終了しており、それ以上の投票は受け付けません。 **/
13 closesAt?: string | null
14 /** 0 は匿名(デフォルト)、1 は管理者とモデレーター、2 は全員。存在しない場合は匿名を意味します。 **/
15 privacy?: 0 | 1 | 2 | null
16 /** true の場合、まだ投票していない人には投票数が表示されません。存在しない場合は false を意味します。 **/
17 requireVoteToSeeResults?: boolean | null
18}
19

制限

  • 質問は必須で、最大 200 文字です。
  • ポールには 2 から 10 個の選択肢が必要です。
  • 選択肢のラベルは必須で、最大 100 文字、かつポール内で一意である必要があります(大文字小文字は区別しません)。
  • closesAt はポール作成時に未来の日時である必要があります。ポールを即座に終了させるには、過去の日時で PATCH してください。

サイト設定

ポールはサイトの設定に従います。設定は Customize Widget から変更できます:

  • ポールを作成するには、ポール機能が有効化されている必要があります。そうでない場合、API は polls-disabled を返します。
  • 投票をログイン済みユーザーに限定できます。その場合、anonUserId のみで送信された投票は poll-login-required で拒否されます。

投票結果構造 Internal Link

A PollVote は投票に対する1人の回答です。投票自体に表示されるカウントはこれと同期しているため、合計ではなく 誰が 何に投票したかを知りたいときにだけ必要です。

投票者は1つの投票につき最大1票しか持てません。再度投票すると、2票目を追加するのではなく既存の票が新しいオプションに移動し、updatedAt がその時刻を記録します。

voterId は投票者がログインしていたときの userId で、そうでない場合は anonUserId です。

PollVote 構造
Copy Copy
1
2interface PollVote {
3 id: string
4 tenantId: string
5 commentId: string
6 urlId: string
7 /** 投票者がログインしていたときの userId、それ以外は anonUserId です。 **/
8 voterId: string
9 optionId: string
10 createdAt: string
11 /** 投票者が最後に投票を別のオプションに移した時刻。 **/
12 updatedAt?: string
13}
14

Privacy

投票の privacy 設定は、この API に対してコメントウィジェットでの動作と同様に適用されます:

  • Anonymous (デフォルト): 誰がどのように投票したかは誰も見ることができないため、投票は読み取れません。GET /api/v1/poll-votes と GET /api/v1/poll-votes/:id は poll-anonymous を返します。投票のカウントは GET /api/v1/polls/:commentId から依然として取得可能です。
  • Admins and moderators: API キーはサイトの管理者に属しているため、投票を読むことができます。
  • Everyone: 誰でも投票を読むことができます。

投票が存在する場合、投票のプライバシーは狭めることはできますが、広げることはできません。

保留中Webhookイベント構造 Internal Link

PendingWebhookEvent オブジェクトは、保留中のキューに入ったウェブフックイベントを表します。

PendingWebhookEvent オブジェクトは自動的に作成され、API経由で手動で作成することはできません。また、1年後に期限切れになります。 削除することで、キューからタスクを取り除くことができます。

イベントの種類は複数あります - eventType (OutboundSyncEventType) と type (OutboundSyncType) を確認してください。

このAPIの一般的なユースケースは、カスタムモニタリングの実装です。指定したフィルターに対する未処理の件数を定期的にポーリングするために、/count エンドポイントを呼び出すとよいでしょう。

PendingWebhookEvent オブジェクトの構造は以下の通りです:

PendingWebhookEvent の構造
Copy Copy
1
2enum OutboundSyncEventType {
3 Create: 0,
4 Delete: 1,
5 Update: 2
6}
7
8enum OutboundSyncType {
9 /** WordPress固有の同期タスク。 **/
10 WP: 0,
11 Webhook: 1
12}
13
14interface PendingWebhookEvent {
15 id: string
16 /** イベントに関連付けられたコメントid。 **/
17 commentId: string
18 /** イベント発生時点のコメントオブジェクト。2023年11月から追加を開始しました。 **/
19 comment: Comment
20 /** コメントに関連付けられている可能性のある外部id。 **/
21 externalId: string | null
22 createdAt: Date
23 tenantId: string
24 attemptCount: number
25 /** 初回試行の前、および失敗のたびに設定されます。 **/
26 nextAttemptAt: Date
27 /** これが作成、削除、更新のいずれのイベントかを示します... **/
28 eventType: OutboundSyncEventType
29 /** 実行する同期の種類(WordPress、API呼び出しなど)。 **/
30 type: OutboundSyncType
31 /** コメントに一致したドメイン。このドメインを使用してAPIキーを選択します。 **/
32 domain: string
33 /** 発生した最後のエラー。この型は型付けされておらず、何が起きたかの「ダンプ」です。通常は statusCode、body、headers マップを含むオブジェクトが入ります。 **/
34 lastError: object | null
35}
36

SSOユーザー構造 Internal Link

FastCommentsは、使いやすいSSOソリューションを提供しています。HMACベースの統合でユーザー情報を更新するのは、更新されたペイロードと共にユーザーにページを読み込ませるだけと簡単です。

しかし、アプリケーションの一貫性を向上させるために、そのフロー外でユーザーを管理したい場合もあるでしょう。

SSO User APIは、SSOUsersと呼ぶオブジェクトをCRUD操作する方法を提供します。これらのオブジェクトは通常のUsersとは異なり、型安全性のために分けて管理されています。

SSOUserオブジェクトの構造は以下の通りです:

SSOUser 構造
Copy Copy
1
2interface SSOUser {
3 id: string
4 username: string
5 email?: string
6 websiteUrl?: string
7 signUpDate: number
8 createdFromUrlId?: string
9 loginCount?: number
10 avatarSrc?: string
11 optedInNotifications?: boolean
12 optedInSubscriptionNotifications?: boolean
13 displayLabel?: string
14 displayName?: string
15 isAccountOwner?: boolean // 管理者権限 - このフラグを持つSSOユーザーはSSO Adminsとして課金されます(通常のSSOユーザーとは別)
16 isAdminAdmin?: boolean // 管理者権限 - このフラグを持つSSOユーザーはSSO Adminsとして課金されます(通常のSSOユーザーとは別)
17 isCommentModeratorAdmin?: boolean // モデレーター権限 - このフラグを持つSSOユーザーはSSO Moderatorsとして課金されます(通常のSSOユーザーとは別)
18 /** nullの場合、Access Controlはユーザーに適用されません。空のリストの場合、このユーザーはどのページも表示できず、他のユーザーを@mentionすることもできません。 **/
19 groupIds?: string[] | null
20 createdFromSimpleSSO?: boolean
21 /** 他のユーザーが、コメントを含むこのユーザーのプロフィール上のアクティビティを見られないようにします。デフォルトはtrueで、デフォルトで安全なプロフィールを提供します。 **/
22 isProfileActivityPrivate?: boolean
23 /** 他のユーザーがユーザーのプロフィールにコメントを残したり、既存のプロフィールコメントを見たりできないようにします。デフォルトはfalseです。 **/
24 isProfileCommentsPrivate?: boolean
25 /** 他のユーザーがこのユーザーにダイレクトメッセージを送れないようにします。デフォルトはfalseです。 **/
26 isProfileDMDisabled?: boolean
27 karma?: number
28 /** ユーザーバッジのオプション設定。 **/
29 badgeConfig?: {
30 /** ユーザーに割り当てるバッジIDの配列。最大30個のバッジ。順序は維持されます。これらはすべてのページで表示されるグローバルバッジです。 **/
31 badgeIds: string[]
32 /** 現在のページ(urlId)にスコープされたバッジIDの配列。これらのバッジは割り当てられたページでのみ表示されます。 **/
33 pageBadgeIds?: string[]
34 /** trueの場合、既存の表示中のバッジをすべて指定されたバッジに置き換えます。グローバルバッジとページスコープのバッジはそれぞれ独立して上書きされます。falseの場合、既存のバッジに追加されます。 **/
35 override?: boolean
36 /** trueの場合、テナント設定からバッジの表示プロパティを更新します。 **/
37 update?: boolean
38 }
39}
40

SSOユーザーの課金

SSOユーザーは、権限フラグに応じて異なる課金が行われます:

  • 通常のSSOユーザー: 管理者またはモデレーター権限を持たないユーザーは、通常のSSOユーザーとして課金されます
  • SSO Admins: isAccountOwner または isAdminAdmin フラグを持つユーザーは、SSO Adminsとして別途課金されます(通常のテナント管理者と同じ料金)
  • SSO Moderators: isCommentModeratorAdmin フラグを持つユーザーは、SSO Moderatorsとして別途課金されます(通常のモデレーターと同じ料金)

重要: 二重課金を防ぐため、システムはメールアドレスによってSSOユーザーを通常のテナントユーザーやモデレーターと自動的に重複排除します。SSOユーザーが通常のテナントユーザーやモデレーターと同じメールアドレスを持つ場合、二重に課金されることはありません。

Access Control

ユーザーはグループに分けることができます。これが groupIds フィールドの目的であり、オプションです。

@Mentions

デフォルトでは、@ 文字が入力されると @mentions は username を使用して他のSSOユーザーを検索します。displayName が使用されている場合、displayName に一致する結果があるときは username に一致する結果は無視され、@mention の検索結果には displayName が使用されます。

Subscriptions

FastCommentsでは、ユーザーはコメントウィジェットのベルのアイコンをクリックしてSubscribeをクリックすることで、ページを購読できます。

通常のユーザーの場合、通知設定に基づいて通知メールを送信します。

SSOユーザーの場合、後方互換性のためにこれを分けています。optedInSubscriptionNotifications を true に設定した場合にのみ、これらの追加の購読通知メールが送信されます。

Badges

badgeConfig プロパティを使用して、SSOユーザーにバッジを割り当てることができます。バッジは、コメント内のユーザー名の横に表示される視覚的なインジケーターです。

  • badgeIds - ユーザーに割り当てるバッジIDの配列。これらはすべてのページで表示されるグローバルバッジです。FastCommentsアカウントで作成された有効なバッジIDである必要があります。最大30個のバッジまでです。
  • pageBadgeIds - 現在のページ(urlId)にスコープされたバッジIDのオプションの配列。これらのバッジは割り当てられたページでのみ表示されます。同じユーザーに対して、異なるページに異なるページスコープのバッジを設定できます。
  • override - trueの場合、既存の表示中のバッジはすべて指定されたバッジに置き換えられます。グローバルバッジとページスコープのバッジはそれぞれ独立して上書きされます — グローバルバッジの上書きはページスコープのバッジに影響せず、その逆も同様です。falseまたは省略した場合、指定されたバッジは既存のバッジに追加されます。
  • update - trueの場合、ユーザーがログインするたびに、テナント設定からバッジの表示プロパティが更新されます。

サブスクリプション構造 Internal Link

Subscription オブジェクトは、ユーザーのサブスクリプション(購読)を表します。

Subscription オブジェクトは、ユーザーがコメントウィジェット内の通知ベルをクリックし、「Subscribe to this page」をクリックしたときに作成されます。

サブスクリプションは API 経由でも作成できます。

Subscription オブジェクトが存在すると、その Subscription の対象となるページのルートに新しいコメントが投稿された際に、Notification オブジェクトが生成され、メールが送信されます。メールの送信可否はユーザーの種類によって異なります。一般ユーザーの場合は optedInNotifications に依存し、SSO ユーザーの場合は optedInSubscriptionNotifications に依存します。なお、一部のアプリケーションには Web アクセス可能なページという概念がない場合があります。その場合は、購読対象のアイテムの id を urlId に設定してください(コメントウィジェットに渡す urlId と同じ値です)。

Subscription オブジェクトの構造は以下の通りです:

Subscription 構造
Copy Copy
1
2interface Subscription {
3 id: string
4 tenantId: string
5 /** SSO の場合、ユーザー id は `<tenant id>:<user id>` の形式になります。 **/
6 userId: string
7 anonUserId?: string
8 urlId: string
9 url?: string
10 pageTitle?: string
11 createdAt: string // date string
12}
13

テナント日次使用量構造 Internal Link

TenantDailyUsage オブジェクトは、特定の日におけるテナントの使用量を表します。特定のテナントにその日にアクティビティがなかった場合、その日には TenantDailyUsage オブジェクトは存在しません。

TenantDailyUsage オブジェクトは リアルタイムではありません。実際の使用状況より数分遅れることがあります。

TenantDailyUsage オブジェクトの構造は次のとおりです:

TenantDailyUsage の構造
Copy Copy
1
2export interface TenantDailyUsage {
3 yearNumber: number
4 monthNumber: number
5 dayNumber: number
6 commentFetchCount?: number
7 commentCreateCount?: number
8 conversationCreateCount?: number
9 voteCount?: number
10 accountCreatedCount?: number
11 userMentionSearch?: number
12 hashTagSearch?: number
13 gifSearchTrending?: number
14 gifSearch?: number
15 apiCreditsUsed?: number
16 createdAt: string
17 billed: boolean
18 /** 課金対象外。 **/
19 ignored: boolean
20}
21

テナント構造 Internal Link

Tenant は FastComments.com の顧客を定義します。ホワイトラベリング権限を持つテナントは API を介してそれらを作成できます。ホワイトラベル化テナントは他のホワイトラベル化テナントを作成できません(ネストは1レベルのみ許可されます)。

Tenant オブジェクトの構造は次の通りです:

テナント構造
Copy Copy
1
2export enum SiteType {
3 Unknown = 0,
4 WordPress = 1
5}
6
7/** これは DomainConfig API でも処理できます。 **/
8export interface TenantDomainConfig {
9 domain: string
10 emailFromName?: string
11 emailFromEmail?: string
12 createdAt?: string,
13 siteType?: FastCommentsSiteType, // おそらく Unknown を使用するでしょう
14 logoSrc?: string, // 元の画像パス
15 logoSrc100px?: string, // サムネイル用にリサイズ済み
16 footerUnsubscribeURL?: string,
17 emailHeaders?: Record<string, string>,
18 disableUnsubscribeLinks?: boolean,
19 dkim?: {
20 domainName: string,
21 keySelector: string,
22 privateKey: string
23 }
24}
25
26export interface TenantBillingInfo {
27 name: string
28 address: string
29 city: string
30 state: string
31 zip: string
32 country: string
33}
34
35export enum TenantPaymentFrequency {
36 Monthly = 0,
37 Annually = 1
38}
39
40export interface Tenant {
41 id: string
42 name: string
43 email?: string
44 signUpDate: number; // number 型は "legacy" の理由による
45 packageId?: string | null
46 paymentFrequency?: TenantPaymentFrequency
47 billingInfoValid?: boolean
48 billingHandledExternally?: boolean
49 createdBy?: string
50 isSetup?: boolean
51 domainConfiguration: FastCommentsAPITenantDomainConfig[]
52 billingInfo?: FastCommentsAPITenantBillingInfo
53 stripeCustomerId?: string
54 stripeSubscriptionId?: string
55 stripePlanId?: string
56 enableProfanityFilter?: boolean
57 enableSpamFilter?: boolean
58 lastBillingIssueReminderDate?: string
59 removeUnverifiedComments?: boolean
60 unverifiedCommentsTTLms?: number
61 commentsRequireApproval?: boolean
62 autoApproveCommentOnVerification?: boolean
63 sendProfaneToSpam?: boolean
64 /** @readonly - packageId に基づいて計算されます。 **/
65 hasFlexPricing?: boolean
66 /** @readonly **/
67 flexLastBilledAmount?: number
68 /** @readonly - packageId に基づいて計算されます。 **/
69 hasAuditing?: boolean
70 /** テナントにキーと値のペアを保存でき、これをクエリに使用できます。キーには "." または "$" を含めることはできず、100 文字を超えることはできません。値は 2k 文字を超えることはできません。 **/
71 meta?: Record<string, string | null>
72}
73

ユーザー構造 Internal Link

User は、すべてのユーザーの共通項を表すオブジェクトです。

FastComments では、ユーザーに複数のユースケースがあることに注意してください:

  • Secure SSO
  • Simple SSO
  • テナントユーザー(例: 管理者)
  • コメント投稿者

この API はコメント投稿者と Simple SSO で作成されたユーザー向けです。基本的に、あなたのサイトを通じて作成されたすべてのユーザーはこの API でアクセスできます。テナントユーザーもこの方法で取得できますが、/tenant-users/ API を使用した方が多くの情報を得られます。

Secure SSO の場合は、/sso-users/ API をご利用ください。

これらのタイプのユーザーは更新できません。彼らはあなたのサイトを通じてアカウントを作成したため、基本的な読み取り専用アクセスのみを提供していますが、変更を加えることはできません。このようなフローを実現したい場合は、Secure SSO を設定する必要があります。

User オブジェクトの構造は以下の通りです:

User 構造
Copy Copy
1
2export interface User {
3 /** これはコメントオブジェクトの userId としても使用される id です。 **/
4 id: string
5 username: string
6 /** 例えば、コメント投稿者のブログへのリンク。 **/
7 websiteUrl?: string
8 email: string
9 signUpDate: number
10 createdFromUrlId: string
11 createdFromTenantId: string
12 avatarSrc?: string
13 locale: FastCommentsLocale
14 displayLabel?: string
15 karma?: number
16}
17

投票構造 Internal Link

A Vote object represents a vote left by a user.

コメントと投票の関係は commentId によって定義されます。

Vote オブジェクトの構造は次のとおりです:

Vote オブジェクトの構造
Copy Copy
1
2interface Vote {
3 id: string
4 urlId: string
5 commentId: string
6 userId: string
7 direction: 1 | -1
8 createdAt: string
9}
10

質問設定構造 Internal Link

FastCommentsは、質問を構築しその結果を集計する方法を提供します。例としての質問(以下 QuestionConfig と呼びます)は、星評価、スライダー、またはNPS質問(type により決定)などがあります。

質問データは個別に、まとめて、時間経過で、全体として、ページ別など、さまざまな方法で集計できます。

このフレームワークは、クライアント側ウィジェット(このAPIの前にあなたのサーバーを置く場合)、管理ダッシュボード、レポーティングツールを構築するために必要なすべての機能を備えています。

まず、QuestionConfig を定義する必要があります。構造は次のとおりです:

QuestionConfig の構造
Copy Copy
1
2type QuestionConfigType = 'nps' | 'slider' | 'star' | 'thumbs';
3
4interface QuestionConfig {
5 id: string
6 tenantId: string
7 name: string
8 question: string
9 helpText?: string
10 createdAt: string
11 createdBy: string
12 /** 読み取り専用 - 各新しいレスポンスごとにインクリメントされます。 **/
13 usedCount: number
14 /** 構成が最後に使用された日時の文字列(結果が残されたとき)。 **/
15 lastUsed?: string
16 type: QuestionConfigType
17 numStars?: number
18 min?: number
19 max?: number
20 defaultValue?: number
21 labelNegative?: string
22 labelPositive?: string
23 subQuestionIds?: string[]
24 alwaysShowSubQuestions?: boolean
25 reportingOrder: number
26}
27

質問結果構造 Internal Link

質問の結果を保存するには、QuestionResult を作成します。次に、質問の結果を集計したり、また レポート目的でコメントに紐付けたりできます。

QuestionResult の構造
Copy Copy
1
2interface QuestionResultMeta {
3 name: string
4 values: string[]
5}
6
7interface QuestionResult {
8 id: string
9 tenantId: string
10 urlId: string
11 anonUserId?: string
12 userId?: string
13 createdAt?: string
14 value: number
15 commentId?: string
16 questionId: string
17 meta?: QuestionResultMeta[]
18}
19

ユーザーバッジ構造 Internal Link

UserBadge は FastComments システムでユーザーに割り当てられたバッジを表すオブジェクトです。

バッジは、ユーザーのアクティビティ(例: コメント数、返信時間、ベテラン状態)に基づいて自動的に割り当てられるか、サイト管理者によって手動で割り当てられます。

UserBadge オブジェクトの構造は次の通りです:

UserBadge の構造
Copy Copy
1
2export interface UserBadge {
3 /** このユーザーバッジ割り当ての一意の識別子 */
4 id: string
5 /** このバッジが割り当てられているユーザーのID */
6 userId: string
7 /** テナントのバッジカタログからのバッジ定義のID */
8 badgeId: string
9 /** このバッジを作成/割り当てたテナントのID */
10 fromTenantId: string
11 /** このバッジが作成された時刻(エポックからのミリ秒) */
12 createdAt?: number
13 /** ユーザーがこのバッジを受け取った時刻(エポックからのミリ秒) */
14 receivedAt?: number
15 /**
16 * バッジのタイプ:
17 * 0=CommentCount, 1=CommentUpVotes, 2=CommentReplies, 3=CommentsPinned,
18 * 4=Veteran, 5=NightOwl, 6=FastReplyTime, 7=ModeratorCommentsDeleted,
19 * 8=ModeratorCommentsApproved, 9=ModeratorCommentsUnapproved, 10=ModeratorCommentsReviewed,
20 * 11=ModeratorCommentsMarkedSpam, 12=ModeratorCommentsMarkedNotSpam, 13=RepliedToSpecificPage,
21 * 14=Manual
22 */
23 type: number
24 /** 閾値ベースのバッジの場合の閾値の値 */
25 threshold?: number
26 /** バッジの名前/ラベル */
27 name?: string
28 /** バッジの詳細説明 */
29 description?: string
30 /** バッジに表示されるテキスト */
31 displayLabel?: string
32 /** バッジに表示される画像へのURL */
33 displaySrc?: string
34 /** バッジの背景色(16進コード) */
35 backgroundColor?: string
36 /** バッジの境界線色(16進コード) */
37 borderColor?: string
38 /** バッジのテキスト色(16進コード) */
39 textColor?: string
40 /** スタイリング用の追加CSSクラス */
41 cssClass?: string
42 /** ベテランバッジの場合の時間閾値(ミリ秒) */
43 veteranUserThresholdMillis?: number
44 /** このバッジがユーザーのコメントに表示されるかどうか */
45 displayedOnComments: boolean
46 /** バッジの表示順序 */
47 order?: number
48 /** 設定されている場合、このバッジは一致する urlId を持つページにのみ表示されます。グローバルバッジの場合は null。 */
49 urlId?: string | null
50}
51

ユーザーバッジ進捗構造 Internal Link

UserBadgeProgress は、FastComments システムでユーザーがさまざまなバッジを獲得するための進捗を表すオブジェクトです。

このトラッキングは、ユーザーの活動やコミュニティへの参加に基づいていつ自動的にバッジを付与するべきかを判断するのに役立ちます。

以下が UserBadgeProgress オブジェクトの構造です:

UserBadgeProgress の構造
Copy Copy
1
2export interface UserBadgeProgress {
3 /** この進捗レコードの一意の識別子 */
4 id: string
5 /** この進捗レコードが属するテナントのID */
6 tenantId: string
7 /** この進捗レコードが追跡するユーザーのID */
8 userId: string
9 /** システム内でのユーザーの最初のコメントのID */
10 firstCommentId?: string
11 /** ユーザーの最初のコメントの日付(エポックからのミリ秒) */
12 firstCommentDate?: number
13 /** ユーザーの活動に基づいて自動計算される信頼度 */
14 autoTrustFactor?: number
15 /** 管理者によって手動で設定される信頼度 */
16 manualTrustFactor?: number
17 /** さまざまな指標を含む詳細な進捗オブジェクト。キーは BadgeType 列挙型と一致します */
18 progress: {
19 /** 0: CommentCount - ユーザーが行ったコメントの数 */
20 '0'?: number
21 /** 1: CommentUpVotes - ユーザーが受け取ったアップボートの数 */
22 '1'?: number
23 /** 2: CommentReplies - ユーザーが行った返信の数 */
24 '2'?: number
25 /** 3: CommentsPinned - ユーザーが持つピン留めされたコメントの数 */
26 '3'?: number
27 /** 4: Veteran - ユーザーのアカウントの経過期間 */
28 '4'?: number
29 /** 5: NightOwl - 夜間の時間帯にユーザーが投稿した回数 */
30 '5'?: number
31 /** 6: FastReplyTime - 平均返信時間(ミリ秒) */
32 '6'?: number
33 /** 7: ModeratorCommentsDeleted - モデレーターバッジ用:削除したコメントの数 */
34 '7'?: number
35 /** 8: ModeratorCommentsApproved - モデレーターバッジ用:承認したコメントの数 */
36 '8'?: number
37 /** 9: ModeratorCommentsUnapproved - モデレーターバッジ用:非承認にしたコメントの数 */
38 '9'?: number
39 /** 10: ModeratorCommentsReviewed - モデレーターバッジ用:レビューしたコメントの数 */
40 '10'?: number
41 /** 11: ModeratorCommentsMarkedSpam - モデレーターバッジ用:スパムとしてマークしたコメントの数 */
42 '11'?: number
43 /** 12: ModeratorCommentsMarkedNotSpam - モデレーターバッジ用:スパムではないとマークしたコメントの数 */
44 '12'?: number
45 /** 13: RepliedToSpecificPage - 各ページごとの返信数 */
46 '13'?: Record<string, number>
47 }
48}
49

まとめ

当社のAPIドキュメントが網羅的で分かりやすいと感じていただけていれば幸いです。もし不足点を見つけた場合は、下にお知らせください。