API REST (Desarrolladores)
Endpoints DPIA

Endpoints DPIA

Endpoints para gestionar Evaluaciones de Impacto en Proteccion de Datos (Data Protection Impact Assessment).

Todos los endpoints requieren autenticacion JWT. El tenant se determina automaticamente desde el token.

Listar evaluaciones

GET /api/v1/dpia/assessments

Query params:

ParamTipoDescripcion
pagenumberPagina (default: 1)
limitnumberRegistros por pagina (default: 20)
statusstringFiltrar por estado: draft, in_review, approved, rejected

Ejemplo:

curl -X GET "https://api.dpolab.com/api/v1/dpia/assessments?status=draft" \
  -H "Authorization: Bearer {token}"

Respuesta (200):

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "dpia_abc123",
        "title": "EIPD - Sistema de videovigilancia",
        "description": "Evaluacion del sistema de camaras en oficinas centrales",
        "status": "draft",
        "activityId": "act_xyz789",
        "riskCount": 4,
        "createdAt": "2026-02-01T10:00:00Z",
        "updatedAt": "2026-02-20T16:00:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 8,
      "totalPages": 1
    }
  }
}

Crear evaluacion

POST /api/v1/dpia/assessments

Body:

{
  "title": "EIPD - Sistema de videovigilancia",
  "description": "Evaluacion del impacto del sistema de camaras en oficinas centrales",
  "activityId": "act_xyz789",
  "scope": "Monitoreo de accesos en edificio corporativo, 24/7",
  "necessity": "Seguridad fisica de empleados y activos de la empresa",
  "proportionality": "Solo se captura video en areas comunes, no en oficinas privadas"
}

Campos requeridos: title.

Respuesta (201):

{
  "success": true,
  "data": {
    "id": "dpia_new456",
    "title": "EIPD - Sistema de videovigilancia",
    "status": "draft",
    "createdAt": "2026-03-09T10:00:00Z"
  }
}

Obtener detalle de evaluacion

GET /api/v1/dpia/assessments/:id

Retorna la evaluacion completa incluyendo todos los riesgos asociados.

curl -X GET https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123 \
  -H "Authorization: Bearer {token}"

Respuesta (200):

{
  "success": true,
  "data": {
    "id": "dpia_abc123",
    "title": "EIPD - Sistema de videovigilancia",
    "description": "Evaluacion del sistema de camaras en oficinas centrales",
    "status": "draft",
    "activityId": "act_xyz789",
    "scope": "Monitoreo de accesos en edificio corporativo, 24/7",
    "necessity": "Seguridad fisica de empleados y activos de la empresa",
    "proportionality": "Solo se captura video en areas comunes, no en oficinas privadas",
    "approverName": null,
    "approverRole": null,
    "approvedAt": null,
    "risks": [
      {
        "id": "risk_001",
        "description": "Acceso no autorizado a grabaciones",
        "likelihood": "medium",
        "impact": "high",
        "riskLevel": "high",
        "mitigation": "Control de acceso basado en roles, cifrado de almacenamiento",
        "residualRisk": "low",
        "status": "mitigated"
      },
      {
        "id": "risk_002",
        "description": "Retencion excesiva de grabaciones",
        "likelihood": "high",
        "impact": "medium",
        "riskLevel": "high",
        "mitigation": "Politica de eliminacion automatica a los 30 dias",
        "residualRisk": "low",
        "status": "mitigated"
      }
    ],
    "createdAt": "2026-02-01T10:00:00Z",
    "updatedAt": "2026-02-20T16:00:00Z"
  }
}

Actualizar evaluacion

PUT /api/v1/dpia/assessments/:id

Acepta los mismos campos que la creacion. Solo envia los campos que quieras actualizar.

curl -X PUT https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123 \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": "Monitoreo de accesos en edificio corporativo y estacionamientos",
    "proportionality": "Video solo en areas comunes y estacionamientos, sin audio"
  }'
⚠️

Solo se pueden editar evaluaciones en estado draft o rejected. Las evaluaciones en in_review o approved no pueden modificarse.

Enviar para revision

POST /api/v1/dpia/assessments/:id/submit-review

Cambia el estado de la evaluacion a in_review. Requiere que exista al menos un riesgo registrado.

curl -X POST https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123/submit-review \
  -H "Authorization: Bearer {token}"

Respuesta (200):

{
  "success": true,
  "data": {
    "id": "dpia_abc123",
    "status": "in_review"
  }
}

Aprobar evaluacion

POST /api/v1/dpia/assessments/:id/approve

Aprueba la evaluacion. Requiere que este en estado in_review.

Body:

{
  "approverName": "Carlos Mendez",
  "approverRole": "Delegado de Proteccion de Datos"
}

Campos requeridos: approverName, approverRole.

curl -X POST https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123/approve \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "approverName": "Carlos Mendez",
    "approverRole": "Delegado de Proteccion de Datos"
  }'

Respuesta (200):

{
  "success": true,
  "data": {
    "id": "dpia_abc123",
    "status": "approved",
    "approverName": "Carlos Mendez",
    "approverRole": "Delegado de Proteccion de Datos",
    "approvedAt": "2026-03-09T11:00:00Z"
  }
}

Rechazar evaluacion

POST /api/v1/dpia/assessments/:id/reject

Rechaza la evaluacion y la devuelve a estado editable. Requiere que este en estado in_review.

Body:

{
  "reason": "Faltan medidas de mitigacion para los riesgos de alto impacto identificados."
}

Campos requeridos: reason.

curl -X POST https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123/reject \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Faltan medidas de mitigacion para los riesgos de alto impacto identificados."
  }'

Respuesta (200):

{
  "success": true,
  "data": {
    "id": "dpia_abc123",
    "status": "rejected",
    "rejectionReason": "Faltan medidas de mitigacion para los riesgos de alto impacto identificados."
  }
}

Gestion de Riesgos

Cada evaluacion DPIA tiene una lista de riesgos asociados que deben ser identificados y mitigados.

Agregar riesgo

POST /api/v1/dpia/assessments/:id/risks

Body:

{
  "description": "Filtracion de datos biometricos por vulnerabilidad en el sistema",
  "likelihood": "low",
  "impact": "critical",
  "mitigation": "Cifrado AES-256, segmentacion de red, auditorias trimestrales",
  "residualRisk": "low"
}

Campos requeridos: description, likelihood, impact.

Respuesta (201):

{
  "success": true,
  "data": {
    "id": "risk_new003",
    "description": "Filtracion de datos biometricos por vulnerabilidad en el sistema",
    "likelihood": "low",
    "impact": "critical",
    "riskLevel": "high",
    "mitigation": "Cifrado AES-256, segmentacion de red, auditorias trimestrales",
    "residualRisk": "low",
    "status": "mitigated"
  }
}

Actualizar riesgo

PUT /api/v1/dpia/assessments/:id/risks/:riskId
curl -X PUT https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123/risks/risk_001 \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "mitigation": "Control de acceso basado en roles, cifrado AES-256, logs de acceso",
    "residualRisk": "low",
    "status": "mitigated"
  }'

Eliminar riesgo

DELETE /api/v1/dpia/assessments/:id/risks/:riskId
curl -X DELETE https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123/risks/risk_003 \
  -H "Authorization: Bearer {token}"
⚠️

Solo se pueden gestionar riesgos en evaluaciones con estado draft o rejected.

Valores de riesgo

Probabilidad (likelihood) e Impacto (impact):

ValorDescripcion
lowBajo
mediumMedio
highAlto
criticalCritico

Nivel de riesgo (riskLevel): Se calcula automaticamente segun la combinacion de likelihood e impact.

Riesgo residual (residualRisk): Nivel de riesgo tras aplicar las medidas de mitigacion.

Estado (status):

ValorDescripcion
identifiedRiesgo identificado, sin mitigacion
mitigatedMedidas de mitigacion aplicadas
acceptedRiesgo aceptado sin mitigacion adicional

Exportar evaluacion como PDF

GET /api/v1/dpia/assessments/:id/export/pdf

Genera y descarga la evaluacion completa en formato PDF, incluyendo todos los riesgos y medidas de mitigacion.

curl -X GET https://api.dpolab.com/api/v1/dpia/assessments/dpia_abc123/export/pdf \
  -H "Authorization: Bearer {token}" \
  -o eipd_videovigilancia.pdf

Retorna el archivo PDF directamente con Content-Type: application/pdf.


Screening de necesidad de DPIA

POST /api/v1/dpia/:activityId/screening

Evalua si una actividad de tratamiento (RAT) requiere una Evaluacion de Impacto segun los criterios de la Ley 21.719 y las directrices del GDPR.

curl -X POST https://api.dpolab.com/api/v1/dpia/act_xyz789/screening \
  -H "Authorization: Bearer {token}"

Respuesta (200):

{
  "success": true,
  "data": {
    "activityId": "act_xyz789",
    "requiresDpia": true,
    "reasons": [
      "Tratamiento de datos biometricos",
      "Vigilancia sistematica de zona de acceso publico",
      "Tratamiento a gran escala"
    ],
    "recommendation": "Se recomienda realizar una Evaluacion de Impacto antes de iniciar el tratamiento."
  }
}

El screening analiza automaticamente las categorias de datos, la finalidad, los sujetos y la escala del tratamiento para determinar si se requiere EIPD segun el articulo 18 de la Ley 21.719.

Ver tambien

  • Modulo DPIA — Guia funcional de Evaluaciones de Impacto