Catálogo de contenido
El catálogo es la fuente de verdad para los identificadores de categoría, módulo y tema usados en cualquier otra parte de la API pública. Consúltalos aquí antes de llamar a POST /assignments, construir elementos de cursos personalizados o interpretar respuestas de cumplimiento. Scope requerido: content:read.
Endpoints
| Método | Ruta | Scope | Propósito |
|---|---|---|---|
GET | /api/public/v1/content/categories | content:read | Todas las categorías de nivel superior. |
GET | /api/public/v1/content/categories/{'{'}categoryId{'}'}/topics | content:read | Todos los temas dentro de una categoría, con información de módulo y CWE. |
GET | /api/public/v1/content/cwes/{'{'}cweId{'}'}/topics | content:read | Resolver un id de CWE a la lista de temas que lo cubren. |
Listar categorías
Devuelve todas las categorías visibles para tu organización. Las categorías reflejan las cuatro familias OWASP usadas en los endpoints de cumplimiento: web, api, mobile y client.
GET /api/public/v1/content/categories
Authorization: Bearer scs_live_…Respuesta
{
"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" }
]
}Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/content/categoriesListar temas en una categoría
Devuelve todos los temas que se agregan a la categoría dada, cada uno anotado con su módulo padre y el conjunto de CWEs usado para el mapeo de SARIF. Devuelve 404 category_not_found si el categoryId no es una de las cuatro anteriores.
GET /api/public/v1/content/categories/web/topics
Authorization: Bearer scs_live_…Respuesta
{
"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"]
}
]
}topicIdes el valor que pasas aPOST /assignmentsy a los elementos de cursos personalizados.moduleIdcoincide con elmoduleIdusado en las respuestas de detalle de framework de cumplimiento, así que puedes unir ambos endpoints en el cliente.moduleTitlepuede sernullpara temas que no se agrupan bajo un módulo OWASP (raro; reservado para contenido ad-hoc).
Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/content/categories/api/topicsResolver un CWE a temas
Dado un identificador de CWE, devuelve todos los temas que lo cubren. Es la misma búsqueda que la ingesta de SARIF usa internamente: invócala directamente cuando quieras mapear un hallazgo a formación sin tener que ingerir un informe completo.
GET /api/public/v1/content/cwes/CWE-89/topics
Authorization: Bearer scs_live_…Formatos de CWE aceptados
El segmento {'{'}cweId{'}'} de la ruta se normaliza en el servidor. Todos los siguientes se resuelven de forma idéntica:
89cwe-89CWE-89external/cwe/cwe-89
El campo cwe de la respuesta siempre devuelve la forma canónica normalizada (CWE-89). Los CWEs desconocidos devuelven 200 con count: 0 y un array topics vacío, no un 404, para que el cliente no tenga que tratar como caso especial los IDs no mapeados.
Respuesta
{
"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)"
}
]
}Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/content/cwes/external/cwe/cwe-79/topicsEstabilidad de los identificadores
Los identificadores de categoría, módulo y tema son cadenas estables: no cambian una vez publicados. Pueden añadirse nuevos temas bajo módulos existentes y nuevos módulos bajo categorías existentes, pero se evitan los renombrados para mantener las integraciones resilientes. Si alguna vez se retira un tema, el identificador se conserva y el tema se oculta del catálogo en lugar de reciclarse.