Developers

Solicitudes del titular

Lee una solicitud de derechos y confirma que la ejecutaste en tus sistemas.

El titular ejerce sus derechos desde el Centro de Privacidad y tu organización gestiona el caso desde el Portal. Estas operaciones permiten consultar sus antecedentes y confirmar la ejecución del derecho en tus propios sistemas.

Titular → crea la solicitud (Centro de Privacidad)
Consensa → webhook data_subject_request.created
Tu organización → gestiona y resuelve el caso (Portal)
Consensa → webhook data_subject_request.resolved
Tu backend → GET  /v1/data-subject-requests/{requestId}      ¿qué hay que ejecutar?
Tu backend → ejecuta el derecho en tus sistemas
Tu backend → POST .../fulfillment-confirmations              lo declara

Todas las operaciones de esta guía requieren el scope dsr:manage.

Leer el caso

curl "$CONSENSA_API_URL/v1/data-subject-requests/request-9f2" \
  --header "Authorization: Bearer $CONSENSA_API_KEY"
{
  "request": {
    "requestId": "request-9f2",
    "customerId": "customer-4821",
    "rightType": "suppression",
    "status": "resolved",
    "requestVersion": 3,
    "information": [],
    "attachments": [],
    "intake": {
      "scopeDescription": null,
      "requestedCorrection": null,
      "grounds": "Ya no soy cliente.",
      "blockingRelatedRight": null
    },
    "requestedAt": 1787616000000,
    "dueAt": 1790208000000,
    "extendedDueAt": null,
    "resolution": {
      "outcome": "resolved",
      "resolvedAt": 1787700000000,
      "summary": "Solicitud aceptada.",
      "reason": null
    },
    "fulfillmentRequired": true,
    "fulfillment": null
  }
}

La proyección incluye requestVersion, los intercambios de antecedentes en information y los metadatos de archivos en attachments. Cada intercambio lleva su requestVersion, type (additional_information_requested o additional_information_received), actorType, message y occurredAt. Cada archivo lleva attachmentId, requestVersion del acto que lo incorporó, uploadedBy, filename, mimeType, sizeBytes, contentSha256 y createdAt.

Estos textos y nombres pueden contener datos personales: consúltalos sólo desde tu backend autorizado. La respuesta excluye referencias de actores, sesiones, claves de almacenamiento, comunicaciones de email e internos regulatorios.

rightType puede ser access, rectification, suppression, opposition, portability o blocking. El customerId es el mismo identificador de cliente que usa el resto de la API.

fulfillmentRequired es el campo que decide si te toca actuar. Es true cuando el caso quedó resuelto o parcialmente resuelto y ese derecho exige una ejecución externa. Mientras fulfillment sea null, la confirmación sigue pendiente.

Descargar un adjunto

curl "$CONSENSA_API_URL/v1/data-subject-requests/request-9f2/attachments/attachment-4b1" \
  --header "Authorization: Bearer $CONSENSA_API_KEY" \
  --output antecedentes.pdf

El attachmentId se obtiene del detalle del caso. El archivo debe pertenecer tanto a la solicitud como a tu tenant; cualquier discrepancia devuelve 404. La respuesta conserva el tipo del archivo y utiliza Cache-Control: private, no-store.

Confirmar la ejecución

curl --request POST "$CONSENSA_API_URL/v1/data-subject-requests/request-9f2/fulfillment-confirmations" \
  --header "Authorization: Bearer $CONSENSA_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: dsr-fulfillment-request-9f2" \
  --data '{
    "outcome": "confirmed",
    "performedAt": 1787701000000,
    "sourceSystem": "crm-clientes",
    "sourceReference": "ticket-88213",
    "summary": "Datos eliminados del CRM y del data warehouse."
  }'

Si la ejecución fue parcial, outcome es partially_confirmed y partialDetails pasa a ser obligatorio:

{
  "outcome": "partially_confirmed",
  "performedAt": 1787701000000,
  "partialDetails": "Pendiente la eliminación en los respaldos fríos, programada para el cierre de mes.",
  "sourceSystem": "crm-clientes",
  "sourceReference": "ticket-88213"
}

partialDetails está prohibido con outcome: "confirmed".

Qué significa esta confirmación

Consensa no valida que la acción haya ocurrido en tus sistemas. Registra tu declaración, con tu provenance y tu timestamp, y la conserva como hecho auditable. performedAt lo declaras tú y no puede estar en el futuro; recordedAt lo controla el servidor.

Es terminal y única por solicitud:

  • un caso rechazado nunca puede recibir una confirmación de cumplimiento;
  • una confirmación ya registrada no se reemplaza: un segundo intento con otro cuerpo responde 409.

Escribe summary y partialDetails sabiendo que forman parte del registro del caso.

Enterarte de los casos

Suscribe un endpoint a los eventos de solicitudes en Webhooks. created informa la apertura; review_started, additional_information_requested, additional_information_received y deadline_extended informan avances y aportes. resolved es la señal para leer el caso y ejecutar; fulfillment_confirmed comunica que esa ejecución externa quedó declarada.

En esta página