Registrar un consentimiento
POST /v1/users/{user_id}/consent-records · permiso consent-records:write
Registra una aceptación obtenida en su propio canal (method = management_api). El sujeto es un documento legal (subject_type = document; los fines del consentimiento todavía no están disponibles) y state es presented, accepted o declined. La versión, el hash del contenido y el idioma se toman del documento; usted no puede proporcionarlos. occurred_at toma por defecto la fecha y hora actuales y no puede estar en el futuro ni tener más de 5 minutos de antigüedad. Los registros son solo de adición: nunca se actualizan ni se eliminan.
Solicitud
Parámetros de ruta:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
user_id |
string | sí | ID del usuario (usr_…). |
Cuerpo JSON (los campos desconocidos se rechazan con 400 unknown_field):
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
Idempotency-Key |
header | no | Clave opcional (de 16 a 64 caracteres) que hace seguro reintentar una solicitud. |
subject_type |
string | sí | Solo document. |
subject_id |
string | sí | ID del documento legal (ldoc_…) que vio el usuario. |
state |
string | sí | presented, accepted o declined. |
application_id |
string | null | no | Aplicación (app_…); si se omite y el documento es específico de una aplicación, se registra la aplicación del documento. |
occurred_at |
string (date-time) | no | Momento en que ocurrió; por defecto, la fecha y hora actuales; no puede estar en el futuro ni tener más de 5 minutos de antigüedad. |
Respuesta
201 Created con el registro de consentimiento.
{
"id": "crec_01j9xk3m7q8r2s4t6v8w0y2z4b",
"user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4c",
"subject_type": "document",
"subject_id": "ldoc_01j9xk3m7q8r2s4t6v8w0y2z4a",
"subject_version": "2026-10",
"content_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"locale": "en",
"state": "accepted",
"method": "management_api",
"application_id": null,
"occurred_at": "2026-10-05T09:31:12.004211Z"
}
Errores
| HTTP | code | Cuándo |
|---|---|---|
| 400 | unknown_field |
El cuerpo contiene un campo desconocido. |
| 404 | not_found |
El usuario o el application_id no existe en este entorno. La extensión resource indica cuál falta: user o application. |
| 415 | unsupported_media_type |
El tipo de contenido no es application/json. |
| 422 | validation_failed |
Un campo no es válido: documento desconocido (/subject_id, unknown_subject), subject_type: purpose (not_supported), un estado no permitido para documentos, o occurred_at fuera de rango. |
| 401 | unauthenticated |
La credencial falta, no es válida o ha sido revocada. |
| 403 | insufficient_permissions |
La credencial no tiene el permiso requerido. |
| 429 | rate_limited |
Se superó el límite de solicitudes; reintente después del periodo indicado en Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente; reintente después del periodo indicado en Retry-After. |
Ejemplo
curl -X POST https://api.eu.keenauth.com/v1/users/usr_01j9xk3m7q8r2s4t6v8w0y2z4c/consent-records \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"subject_type":"document","subject_id":"ldoc_01j9xk3m7q8r2s4t6v8w0y2z4a","state":"accepted"}'
Datos personales
Este endpoint contiene datos personales: registros de consentimiento. Datos personales en las API de KeenAuth describe qué se almacena, durante cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.