Docs/API et Webhooks/Catalogue de contenu

Catalogue de contenu

Le catalogue est la source de vérité pour les identifiants de catégorie, module et sujet utilisés partout ailleurs dans l'API publique. Recherchez les identifiants ici avant d'appeler POST /assignments, de construire des éléments de cours personnalisés ou d'interpréter les réponses de conformité. Portée requise : content:read.

Points de terminaison

MéthodeCheminPortéeObjectif
GET/api/public/v1/content/categoriescontent:readToutes les catégories de haut niveau.
GET/api/public/v1/content/categories/{'{'}categoryId{'}'}/topicscontent:readTous les sujets dans une catégorie, avec informations sur le module et les CWE.
GET/api/public/v1/content/cwes/{'{'}cweId{'}'}/topicscontent:readRésoudre un id CWE en la liste de sujets qui le couvrent.

Lister les catégories

Renvoie chaque catégorie visible pour votre organisation. Les catégories reflètent les quatre familles OWASP utilisées dans les points de terminaison de conformité — web, api, mobile, client.

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

Réponse

{
  "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" }
  ]
}

Exemple

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

Lister les sujets dans une catégorie

Renvoie chaque sujet qui s'agrège à la catégorie donnée, chacun annoté avec son module parent et l'ensemble de CWE utilisé pour le mappage SARIF. Renvoie 404 category_not_found si le categoryId n'est pas l'un des quatre ci-dessus.

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

Réponse

{
  "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 est la valeur que vous passez à POST /assignments et aux éléments de cours personnalisés.
  • moduleId correspond au moduleId utilisé dans les réponses de détail de cadre de conformité, donc vous pouvez joindre les deux points de terminaison côté client.
  • moduleTitle peut être null pour les sujets qui ne sont pas regroupés sous un module OWASP (rare ; réservé au contenu ad hoc).

Exemple

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

Résoudre un CWE en sujets

Étant donné un identifiant CWE, renvoie chaque sujet qui le couvre. C'est la même recherche que l'ingestion SARIF utilise en interne — appelez-la directement lorsque vous voulez mapper une découverte à la formation sans ingérer un rapport complet.

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

Formats CWE acceptés

Le segment de chemin {'{'}cweId{'}'} est normalisé côté serveur. Tous les éléments suivants se résolvent de manière identique :

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

Le champ cwe de la réponse renvoie toujours la forme canonique normalisée (CWE-89). Les CWE inconnus renvoient 200 avec count: 0 et un tableau topics vide — non un 404 — pour que le client n'ait pas besoin de cas spécial pour les IDs non mappés.

Réponse

{
  "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)"
    }
  ]
}

Exemple

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

Stabilité des identifiants

Les identifiants de catégorie, module et sujet sont des chaînes stables — ils ne changeront pas une fois publiés. De nouveaux sujets peuvent être ajoutés sous des modules existants, et de nouveaux modules sous des catégories existantes, mais les renommages sont évités pour garder les intégrations résilientes. Si un sujet est jamais retiré, l'identifiant est préservé et le sujet est masqué du catalogue plutôt que recyclé.