Endpoints CMP
Endpoints para gestionar la Plataforma de Gestion de Consentimiento (Consent Management Platform) de DPOLab.
Los endpoints de gestion requieren autenticacion JWT. Los endpoints publicos son consumidos por el widget de consentimiento embebido (SDK).
Listar avisos de consentimiento
GET /api/v1/consent/noticesQuery params:
| Param | Tipo | Descripcion |
|---|---|---|
isActive | boolean | Filtrar por avisos activos/inactivos |
page | number | Pagina (default: 1) |
limit | number | Registros por pagina (default: 20) |
Ejemplo:
curl -X GET "https://api.dpolab.com/api/v1/consent/notices?isActive=true" \
-H "Authorization: Bearer {token}"Respuesta (200):
{
"success": true,
"data": {
"items": [
{
"id": "ntc_abc123",
"name": "Politica de cookies",
"domain": "www.ejemplo.cl",
"position": "bottom",
"theme": "light",
"isActive": true,
"widgetKey": "wk_xyz789",
"regulation": "ley_21719",
"createdAt": "2026-01-10T09:00:00Z",
"updatedAt": "2026-02-15T14:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 5,
"totalPages": 1
}
}
}Crear aviso de consentimiento
POST /api/v1/consent/noticesBody:
{
"name": "Consentimiento de marketing",
"domain": "www.ejemplo.cl",
"position": "bottom",
"theme": "light",
"logoUrl": "https://ejemplo.cl/logo.png",
"titleEs": "Politica de cookies",
"descriptionEs": "Utilizamos cookies para mejorar tu experiencia en nuestro sitio",
"regulation": "ley_21719",
"purposes": [
{
"name": "Email marketing",
"description": "Envio de ofertas y novedades por correo electronico",
"isRequired": false,
"retentionDays": 365
},
{
"name": "Analitica web",
"description": "Recopilacion de datos de navegacion para mejorar el sitio",
"isRequired": false,
"retentionDays": 180
}
]
}Campos requeridos: name, domain, position, theme, titleEs, descriptionEs, regulation, purposes (al menos uno).
Respuesta (201):
{
"success": true,
"data": {
"id": "ntc_new456",
"name": "Consentimiento de marketing",
"isActive": false,
"widgetKey": null,
"createdAt": "2026-03-09T10:00:00Z"
}
}Obtener detalle de aviso
GET /api/v1/consent/notices/:idRetorna el aviso con sus propositos asociados.
curl -X GET https://api.dpolab.com/api/v1/consent/notices/ntc_abc123 \
-H "Authorization: Bearer {token}"Respuesta (200):
{
"success": true,
"data": {
"id": "ntc_abc123",
"name": "Politica de cookies",
"domain": "www.ejemplo.cl",
"position": "bottom",
"theme": "light",
"logoUrl": "https://ejemplo.cl/logo.png",
"titleEs": "Politica de cookies",
"descriptionEs": "Utilizamos cookies para mejorar tu experiencia en nuestro sitio",
"regulation": "ley_21719",
"isActive": true,
"widgetKey": "wk_xyz789",
"purposes": [
{
"id": "prp_001",
"name": "Cookies esenciales",
"description": "Necesarias para el funcionamiento del sitio",
"isRequired": true,
"retentionDays": null
},
{
"id": "prp_002",
"name": "Cookies de analitica",
"description": "Medir el uso del sitio con fines de mejora",
"isRequired": false,
"retentionDays": 180
},
{
"id": "prp_003",
"name": "Cookies de marketing",
"description": "Publicidad personalizada y remarketing",
"isRequired": false,
"retentionDays": 365
}
],
"createdAt": "2026-01-10T09:00:00Z",
"updatedAt": "2026-02-15T14:30:00Z"
}
}Actualizar aviso
PUT /api/v1/consent/notices/:idAcepta actualizacion parcial de los campos del aviso. Opcionalmente puede incluir un array purposes[] para reemplazar los propositos existentes.
curl -X PUT https://api.dpolab.com/api/v1/consent/notices/ntc_abc123 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Politica de cookies actualizada",
"descriptionEs": "Descripcion actualizada del aviso",
"purposes": [
{
"name": "Cookies esenciales",
"description": "Necesarias para el funcionamiento del sitio",
"isRequired": true
}
]
}'Si el aviso ya esta publicado, los cambios se reflejan inmediatamente en el widget. Se recomienda despublicar antes de hacer cambios significativos.
Publicar aviso
POST /api/v1/consent/notices/:id/publishPublica el aviso, lo marca como activo (isActive: true) y genera un widgetKey unico si no existe. El widgetKey se usa para integrar el widget en sitios web.
curl -X POST https://api.dpolab.com/api/v1/consent/notices/ntc_new456/publish \
-H "Authorization: Bearer {token}"Respuesta (200):
{
"success": true,
"data": {
"id": "ntc_new456",
"isActive": true,
"widgetKey": "wk_a1b2c3d4"
}
}El widgetKey generado se usa en el SDK de consentimiento de DPOLab para cargar la configuracion del aviso en el sitio web del cliente.
Listar registros de consentimiento
GET /api/v1/consent/notices/:id/recordsLista todos los registros de consentimiento asociados a un aviso (paginado).
Query params:
| Param | Tipo | Descripcion |
|---|---|---|
page | number | Pagina (default: 1) |
limit | number | Registros por pagina (default: 20) |
curl -X GET "https://api.dpolab.com/api/v1/consent/notices/ntc_abc123/records?page=1&limit=10" \
-H "Authorization: Bearer {token}"Respuesta (200):
{
"success": true,
"data": {
"items": [
{
"id": "rec_001",
"userRef": "[email protected]",
"sessionId": "sess_abc123",
"choices": {
"prp_001": true,
"prp_002": true,
"prp_003": false
},
"action": "partial",
"source": "widget",
"createdAt": "2026-03-01T12:30:00Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1250,
"totalPages": 125
}
}
}Estadisticas de consentimiento
GET /api/v1/consent/notices/:id/statsObtiene estadisticas agregadas de consentimiento para un aviso: total de registros, estadisticas por proposito y linea de tiempo.
curl -X GET https://api.dpolab.com/api/v1/consent/notices/ntc_abc123/stats \
-H "Authorization: Bearer {token}"Respuesta (200):
{
"success": true,
"data": {
"total": 1250,
"purposeStats": [
{
"purposeId": "prp_001",
"name": "Cookies esenciales",
"accepted": 1250,
"rejected": 0,
"rate": 100
},
{
"purposeId": "prp_002",
"name": "Cookies de analitica",
"accepted": 980,
"rejected": 270,
"rate": 78.4
},
{
"purposeId": "prp_003",
"name": "Cookies de marketing",
"accepted": 620,
"rejected": 630,
"rate": 49.6
}
],
"timeline": [
{
"date": "2026-03-01",
"count": 45
},
{
"date": "2026-03-02",
"count": 52
}
]
}
}Endpoints Publicos
Los siguientes endpoints son consumidos por el widget de consentimiento embebido en sitios web. No requieren autenticacion JWT.
Obtener configuracion del widget
GET /api/v1/public/consent/:widgetKey/configRetorna la configuracion del aviso de consentimiento para renderizar el widget (posicion, tema, logo, propositos, etc.).
curl -X GET https://api.dpolab.com/api/v1/public/consent/wk_a1b2c3d4/configRespuesta (200):
{
"success": true,
"data": {
"position": "bottom",
"theme": "light",
"logoUrl": "https://ejemplo.cl/logo.png",
"titleEs": "Politica de cookies",
"descriptionEs": "Utilizamos cookies para mejorar tu experiencia en nuestro sitio",
"purposes": [
{
"id": "prp_001",
"name": "Cookies esenciales",
"description": "Necesarias para el funcionamiento del sitio",
"isRequired": true
},
{
"id": "prp_002",
"name": "Cookies de analitica",
"description": "Medir el uso del sitio con fines de mejora",
"isRequired": false
}
]
}
}Registrar decision de consentimiento
POST /api/v1/public/consent/:widgetKey/recordRegistra la decision del visitante respecto a cada proposito de consentimiento.
curl -X POST https://api.dpolab.com/api/v1/public/consent/wk_a1b2c3d4/record \
-H "Content-Type: application/json" \
-d '{
"userRef": "[email protected]",
"sessionId": "sess_abc123",
"choices": {
"prp_001": true,
"prp_002": true,
"prp_003": false
},
"action": "partial",
"source": "widget"
}'Campos requeridos: userRef, sessionId, choices, action, source.
Respuesta (201):
{
"success": true,
"data": {
"id": "rec_new789",
"createdAt": "2026-03-09T15:00:00Z"
}
}El campo userRef identifica al usuario (puede ser email u otro identificador). El sessionId permite agrupar decisiones por sesion de navegacion.
Consent Templates
Los templates permiten gestionar consentimiento multi-canal (web, formulario, API, manual, webhook).
Listar templates
GET /api/v1/consent/templatesQuery params:
| Param | Tipo | Descripcion |
|---|---|---|
legalEntityId | string | Filtrar por entidad legal |
domainId | string | Filtrar por dominio |
category | string | Filtrar por categoria |
isActive | boolean | Filtrar por estado |
page | number | Pagina (default: 1) |
limit | number | Registros por pagina (default: 20) |
Crear template
POST /api/v1/consent/templatesObtener template
GET /api/v1/consent/templates/:idActualizar template
PUT /api/v1/consent/templates/:idEliminar template
DELETE /api/v1/consent/templates/:idRegistros de un template
GET /api/v1/consent/templates/:id/recordsEstadisticas de un template
GET /api/v1/consent/templates/:id/statsRegistro manual de consentimiento
POST /api/v1/consent/templates/:id/manualRegistra un consentimiento dado por canal no digital (telefono, presencial, etc.).
Webhooks de Consentimiento
Crear webhook
POST /api/v1/consent/templates/:id/webhooksBody:
{
"name": "Webhook CRM",
"purposeMapping": {
"marketing_consent": "prp_001",
"analytics_consent": "prp_002"
}
}Respuesta (201):
{
"success": true,
"data": {
"id": "wh_abc123",
"endpointKey": "ek_xyz789",
"webhookUrl": "https://api.dpolab.com/api/v1/consent/webhooks/inbound/ek_xyz789",
"signingSecret": "whsec_a1b2c3..."
}
}Listar webhooks
GET /api/v1/consent/templates/:id/webhooksActualizar webhook
PUT /api/v1/consent/templates/:id/webhooks/:webhookIdEliminar webhook
DELETE /api/v1/consent/templates/:id/webhooks/:webhookIdVer logs de un webhook
GET /api/v1/consent/templates/:id/webhooks/:webhookId/logsRotar secreto de webhook
POST /api/v1/consent/templates/:id/webhooks/:webhookId/rotate-secretFormulario Publico
Obtener configuracion del formulario
GET /api/v1/public/consent-form/:formKey/configEndpoint publico que retorna la configuracion del formulario de consentimiento para renderizarlo.
Enviar respuesta del formulario
POST /api/v1/public/consent-form/:formKey/submitRegistra las respuestas del titular desde el formulario hosteado.
API Externa (Server-to-Server)
Endpoints autenticados con API Key para integraciones programaticas. Ver Configuracion y API Keys para detalles completos.
Ver tambien
- Modulo CMP — Guia funcional del modulo de consentimiento
- SDK CMP — Documentacion del banner de consentimiento embebido
- Configuracion y API Keys — API externa de consentimiento