Docs/APIとWebhook/コンテンツカタログ

コンテンツカタログ

カタログは、パブリックAPIの他のすべての場所で使用されるカテゴリ、モジュール、トピック識別子の真実の情報源です。POST /assignmentsを呼び出したり、カスタムコースアイテムを構築したり、コンプライアンスレスポンスを解釈する前に、ここで識別子を検索してください。必要なスコープ: content:read

エンドポイント

メソッドパススコープ目的
GET/api/public/v1/content/categoriescontent:readすべてのトップレベルカテゴリ。
GET/api/public/v1/content/categories/{'{'}categoryId{'}'}/topicscontent:readモジュールとCWE情報を含む、カテゴリ内のすべてのトピック。
GET/api/public/v1/content/cwes/{'{'}cweId{'}'}/topicscontent:readCWE IDをカバーするトピックのリストに解決します。

カテゴリをリスト表示

組織のすべての表示可能なカテゴリを返します。カテゴリは、コンプライアンスエンドポイントで使用される4つのOWASPファミリ — webapimobileclient — をミラーします。

GET /api/public/v1/content/categories
Authorization: Bearer scs_live_…

レスポンス

{
  "count": 4,
  "categories": [
    { "categoryId": "web",    "title": "OWASP Top 10 (Web)" },
    { "categoryId": "api",    "title": "OWASP API Security Top 10" },
    { "categoryId": "mobile", "title": "OWASP Mobile Top 10" },
    { "categoryId": "client", "title": "OWASP Client-Side Top 10" }
  ]
}

curl -sS \
  -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/content/categories

カテゴリ内のトピックをリスト表示

指定されたカテゴリに集約されるすべてのトピックを、それぞれ親モジュールとSARIFマッピングに使用されるCWEセットで注釈付きで返します。categoryIdが上記の4つのいずれでもない場合は404 category_not_foundを返します。

GET /api/public/v1/content/categories/web/topics
Authorization: Bearer scs_live_…

レスポンス

{
  "categoryId": "web",
  "categoryTitle": "OWASP Top 10 (Web)",
  "count": 2,
  "topics": [
    {
      "topicId": "sql-injection",
      "title": "SQL Injection",
      "moduleId": "a03-injection",
      "moduleTitle": "A03: Injection",
      "cwes": ["CWE-89"]
    },
    {
      "topicId": "xss-reflected",
      "title": "Reflected Cross-Site Scripting",
      "moduleId": "a03-injection",
      "moduleTitle": "A03: Injection",
      "cwes": ["CWE-79", "CWE-80"]
    }
  ]
}
  • topicIdは、POST /assignmentsとカスタムコースアイテムに渡す値です。
  • moduleIdはコンプライアンスフレームワーク詳細レスポンスで使用されるmoduleIdと一致するため、クライアント側で2つのエンドポイントを結合できます。
  • moduleTitleは、OWASPモジュール下にグループ化されていないトピック (まれ。アドホックコンテンツ用に予約) に対してはnullになる場合があります。

curl -sS \
  -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/content/categories/api/topics

CWEをトピックに解決

CWE識別子が指定されると、それをカバーするすべてのトピックを返します。これはSARIF取り込みが内部で使用するのと同じルックアップです — 完全なレポートを取り込むことなく、検出結果をトレーニングにマップしたい場合に直接呼び出してください。

GET /api/public/v1/content/cwes/CWE-89/topics
Authorization: Bearer scs_live_…

受け入れられるCWE形式

{'{'}cweId{'}'}パスセグメントはサーバー側で正規化されます。以下のすべてが同じように解決されます:

  • 89
  • cwe-89
  • CWE-89
  • external/cwe/cwe-89

レスポンスのcweフィールドは常に正規化された正規形 (CWE-89) をエコーします。不明なCWEはcount: 0と空のtopics配列を含む200を返します — 404ではない — そのため、クライアントはマップされていないIDに対して特別なケース処理をする必要はありません。

レスポンス

{
  "cwe": "CWE-89",
  "count": 1,
  "topics": [
    {
      "topicId": "sql-injection",
      "title": "SQL Injection",
      "moduleId": "a03-injection",
      "moduleTitle": "A03: Injection",
      "categoryId": "web",
      "categoryTitle": "OWASP Top 10 (Web)"
    }
  ]
}

curl -sS \
  -H "Authorization: Bearer $SCH_API_KEY" \
  https://api.limeplate.com/api/public/v1/content/cwes/external/cwe/cwe-79/topics

識別子の安定性

カテゴリ、モジュール、トピック識別子は安定した文字列です — 一度公開されると変更されません。既存のモジュール下に新しいトピックが追加され、既存のカテゴリ下に新しいモジュールが追加される場合がありますが、統合の堅牢性を保つため名前変更は避けられます。トピックが廃止される場合、識別子は保持され、トピックは再利用されるのではなくカタログから非表示になります。