Cumplimiento
Dos vistas de cobertura paralelas sobre los mismos datos de formación. La vista OWASP puntúa a tu plantilla frente a las cuatro familias del OWASP Top 10 (Web, API, Móvil, Cliente). La vista regulatoria puntúa la misma formación frente a estándares externos (PCI DSS, ISO/IEC 27001, SOC 2) mapeando cada control a sus CWEs subyacentes. Scope requerido: compliance:read.
Endpoints
| Método | Ruta | Scope | Propósito |
|---|---|---|---|
GET | /api/public/v1/compliance/summary | compliance:read | Resumen de cobertura OWASP a través de los cuatro frameworks. |
GET | /api/public/v1/compliance/frameworks/{'{'}frameworkId{'}'} | compliance:read | Desglose por módulo para un framework OWASP. |
GET | /api/public/v1/compliance/regulatory/summary | compliance:read | Resumen de cobertura para los frameworks regulatorios. |
GET | /api/public/v1/compliance/regulatory/{'{'}frameworkId{'}'} | compliance:read | Desglose por control para un framework regulatorio. |
Cómo se calcula la cobertura
Un usuario elegible es cualquier miembro activo de la organización cuyo rol no sea org_admin. Un usuario cuenta como formado en un tema si tiene al menos un intento de práctica con puntuación ≥ passingScore (70) dentro de los últimos windowDays (365). Un elemento de riesgo (módulo OWASP o control regulatorio) pasa a estado covered cuando el porcentaje de usuarios elegibles formados en él supera el coverageThresholdPercent de tu organización, por defecto 80, configurable desde la UI de administración entre 50 y 100.
Identificadores de framework
| Tipo | Identificador | Título |
|---|---|---|
| OWASP | web | OWASP Top 10 (Web) |
| OWASP | api | OWASP API Security Top 10 |
| OWASP | mobile | OWASP Mobile Top 10 |
| OWASP | client | OWASP Client-Side Top 10 |
| Regulatorio | pci-dss | PCI DSS v4.0 — Requisito 6.2.4 |
| Regulatorio | iso-27001 | ISO/IEC 27001:2022 — Anexo A, desarrollo seguro |
| Regulatorio | soc-2 | SOC 2 — Trust Services Criteria (TSC 2017) |
Resumen OWASP
Una entrada por framework OWASP. Úsalo para tarjetas de panel.
GET /api/public/v1/compliance/summary
Authorization: Bearer scs_live_…Respuesta
{
"frameworks": [
{
"frameworkId": "web",
"title": "OWASP Top 10 (Web)",
"totalRiskItems": 10,
"coveredRiskItems": 7,
"partialRiskItems": 2,
"noActivityRiskItems": 1,
"noContentRiskItems": 0,
"eligibleUsers": 142,
"trainedUsers": 118,
"coveragePercent": 83.1,
"avgScore": 86.4
},
{
"frameworkId": "api",
"title": "OWASP API Security Top 10",
"totalRiskItems": 10,
"coveredRiskItems": 5,
"partialRiskItems": 3,
"noActivityRiskItems": 2,
"noContentRiskItems": 0,
"eligibleUsers": 142,
"trainedUsers": 91,
"coveragePercent": 64.1,
"avgScore": 79.2
}
],
"passingScore": 70,
"coverageThresholdPercent": 80,
"windowDays": 365,
"generatedAt": "2026-05-29T13:42:11.318Z"
}covered+partial+noActivity+noContent=totalRiskItems.noContentsignifica que aún no hemos publicado formación para ese elemento de riesgo: trátalo como una brecha conocida, no como un fallo de la plantilla.avgScorees la media de los intentos aprobados dentro de la ventana, expresada en una escala 0–100.
Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/compliance/summaryDetalle de un framework OWASP
Profundiza en un framework: devuelve los elementos de riesgo por módulo, cada uno con los temas y CWEs que lo componen. Devuelve 404 framework_not_found para cualquier identificador fuera de web | api | mobile | client.
GET /api/public/v1/compliance/frameworks/web
Authorization: Bearer scs_live_…Respuesta
{
"frameworkId": "web",
"title": "OWASP Top 10 (Web)",
"summary": {
"frameworkId": "web",
"title": "OWASP Top 10 (Web)",
"totalRiskItems": 10,
"coveredRiskItems": 7,
"partialRiskItems": 2,
"noActivityRiskItems": 1,
"noContentRiskItems": 0,
"eligibleUsers": 142,
"trainedUsers": 118,
"coveragePercent": 83.1,
"avgScore": 86.4
},
"riskItems": [
{
"moduleId": "a01-broken-access-control",
"title": "A01: Broken Access Control",
"status": "covered",
"topicsCount": 4,
"eligibleUsers": 142,
"trainedUsers": 124,
"coveragePercent": 87.3,
"avgScore": 88.1,
"topics": [
{
"topicId": "idor",
"title": "Insecure Direct Object References",
"trainedUsers": 121,
"totalAttempts": 318,
"avgScore": 87.6,
"cwes": ["CWE-639", "CWE-285"]
}
]
}
],
"passingScore": 70,
"coverageThresholdPercent": 80,
"windowDays": 365,
"generatedAt": "2026-05-29T13:42:11.318Z"
}statuses uno decovered,partial,no-activity,no-content.totalAttemptsincluye intentos fallidos dentro de la ventana;trainedUserscuenta solo a los usuarios con al menos un intento aprobado.
Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/compliance/frameworks/apiResumen regulatorio
Misma forma que el resumen OWASP, pero para frameworks regulatorios. Cada entrada lleva version y subtitle para que puedas renderizar directamente la cláusula identificativa del estándar.
GET /api/public/v1/compliance/regulatory/summary
Authorization: Bearer scs_live_…Respuesta
{
"frameworks": [
{
"frameworkId": "pci-dss",
"title": "PCI DSS",
"version": "v4.0",
"subtitle": "Payment Card Industry Data Security Standard — Requirement 6 (Secure Systems and Software)",
"totalControls": 6,
"coveredControls": 4,
"partialControls": 1,
"noActivityControls": 1,
"noContentControls": 0,
"eligibleUsers": 142,
"trainedUsers": 105,
"coveragePercent": 73.9,
"avgScore": 84.7
},
{
"frameworkId": "iso-27001",
"title": "ISO/IEC 27001",
"version": "2022",
"subtitle": "Annex A controls — secure development and application security",
"totalControls": 6,
"coveredControls": 5,
"partialControls": 1,
"noActivityControls": 0,
"noContentControls": 0,
"eligibleUsers": 142,
"trainedUsers": 117,
"coveragePercent": 82.4,
"avgScore": 86.0
}
],
"passingScore": 70,
"coverageThresholdPercent": 80,
"windowDays": 365,
"generatedAt": "2026-05-29T13:42:11.318Z"
}Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/compliance/regulatory/summaryDetalle de un framework regulatorio
Desglose por control. Cada control incluye la descripción original tal y como la publica el estándar y el conjunto de CWEs que usamos para mapear formación al control. Devuelve 404 regulatory_framework_not_found para identificadores desconocidos.
GET /api/public/v1/compliance/regulatory/pci-dss
Authorization: Bearer scs_live_…Respuesta
{
"frameworkId": "pci-dss",
"title": "PCI DSS",
"version": "v4.0",
"subtitle": "Payment Card Industry Data Security Standard — Requirement 6 (Secure Systems and Software)",
"summary": {
"frameworkId": "pci-dss",
"title": "PCI DSS",
"version": "v4.0",
"subtitle": "Payment Card Industry Data Security Standard — Requirement 6 (Secure Systems and Software)",
"totalControls": 6,
"coveredControls": 4,
"partialControls": 1,
"noActivityControls": 1,
"noContentControls": 0,
"eligibleUsers": 142,
"trainedUsers": 105,
"coveragePercent": 73.9,
"avgScore": 84.7
},
"controls": [
{
"controlId": "6.2.4.a",
"title": "Injection Attacks",
"description": "Address attacks that inject untrusted data into commands or queries (Req 6.2.4.a).",
"cwes": ["CWE-89", "CWE-78", "CWE-79", "CWE-94", "CWE-611", "CWE-917", "CWE-918"],
"status": "covered",
"topicsCount": 7,
"eligibleUsers": 142,
"trainedUsers": 128,
"coveragePercent": 90.1,
"avgScore": 88.6,
"topics": [
{
"topicId": "sql-injection",
"title": "SQL Injection",
"trainedUsers": 131,
"totalAttempts": 402,
"avgScore": 89.4,
"cwes": ["CWE-89"]
}
]
}
],
"passingScore": 70,
"coverageThresholdPercent": 80,
"windowDays": 365,
"generatedAt": "2026-05-29T13:42:11.318Z"
}Ejemplo
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/compliance/regulatory/iso-27001