Constaia
Conceptos

Privacidad avanzada

Copia pixelada del documento con redact, campos enmascarados con mask_fields, borrado y exportación por metadatos (derechos de supresión y de acceso) y retención de resultados por plantilla o cuenta.

Además de decidir qué se hace con el fichero original (ver Almacenamiento y privacidad), Constaia te da herramientas para minimizar los datos que guardas y para atender los derechos de las personas:

HerramientaPara qué
redactGuardar una copia del documento con los identificadores, la firma y la foto pixelados.
mask_fieldsGuardar solo parte de un dato (12****78Z) aunque la validación use el valor completo.
Borrado por metadatosBorrar todos los análisis de una persona con una llamada.
Exportación por metadatosEntregar a una persona todos sus datos.
RetenciónBorrar solos los resultados pasado un plazo.

Todo se puede fijar en cada petición o en una plantilla, y mask_fields y la retención también como predeterminados de la cuenta en el panel (Ajustes → Privacidad).

Copia pixelada (redact)

Con redact: true (o export: ["redacted_image"], que es equivalente) el análisis genera una copia JPEG del documento con estas zonas pixeladas:

  • el número de documento y los demás identificadores leídos (NIF, IBAN, números de soporte…), según su caja;
  • la banda MRZ, localizada por el lector local;
  • la firma manuscrita y la foto del titular, según las cajas que detecta el modelo. Si en un documento de identidad no se localiza la foto, se pixela una zona de seguridad (el lado izquierdo del anverso; en pasaportes, la banda inferior con la MRZ).

En PDF se pixela la primera página renderizada.

curl https://api.constaia.com/v1/analyze \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  -F "file=@dni.jpg" \
  -F 'options={"expect":"es_dni","storage":"none","redact":true}'

La copia llega como URL firmada en exports.redacted_image (caduca a las 24 h; vuelve a pedir el análisis para obtener otra). Se conserva aunque el original se borre (por ejemplo con storage: "none") durante la retención de resultados de la plantilla o, si no fija ninguna, 30 días. Así puedes enseñar el documento a un revisor o archivarlo sin guardar el original.

Campos enmascarados (mask_fields)

{ "expect": "es_dni", "mask_fields": ["document_number", "mrz"] }

Los campos de mask_fields (hasta 50) se guardan enmascarados: los dos primeros y los tres últimos caracteres visibles (12345678Z → 12****78Z; valores de 5 caracteres o menos, todo con asteriscos). Los objetos y listas se enmascaran por dentro, y se admiten rutas anidadas (employee.tax_id).

  • La validación usa el valor completo: la letra del NIF o la edad mínima se comprueban antes de enmascarar.
  • La respuesta síncrona de POST /v1/analyze trae el valor completo, una sola vez. Todo lo guardado sale enmascarado: GET /v1/analyses/{id}, listas, webhooks, callbacks de enlaces, exportaciones y el panel.
  • El valor también se enmascara dentro de checks[].message y verdict.reasons[].message.
  • La MRZ repite el número de documento: añade mrz si también la quieres enmascarada.
  • Con resultados progresivos (stream=true), el evento local no trae mrz, barcode ni identifiers si hay mask_fields.
  • En un expediente, un valor enmascarado no sirve para comparar titulares: si enmascaras el número de documento, la comprobación same_holder se apoya en el nombre y la fecha de nacimiento.

Si un análisis no trae mask_fields (ni por petición ni por plantilla), se usan los de la cuenta.

Borrado por metadatos (derecho de supresión)

Guarda en metadata el identificador de la persona en tu sistema ({ "user_id": "123" }) y podrás borrar todos sus análisis de una vez:

curl -X DELETE -G https://api.constaia.com/v1/analyses \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  --data-urlencode "metadata[user_id]=123"
Respuesta
{ "object": "deletion", "deleted": 3, "ids": ["an_01J9Z8Q3K4M5N6P7Q8R9S0T1V2", "an_…", "an_…"] }
  • Hace falta al menos un filtro metadata[clave]=valor; varios filtros deben cumplirse todos. Sin filtro: 422 metadata_filter_required.
  • Borra, en el modo de la clave, el fichero, los resultados, las exportaciones (también la copia pixelada) y los metadatos de cada análisis, igual que DELETE /v1/analyses/{id}.
  • También vacía el cuerpo de las entregas de webhook que llevaban esos resultados.
  • Como mucho 10.000 análisis por petición: si deleted es 10.000, repite la llamada.
  • Queda registrado en el registro de auditoría de la cuenta.

Exportación por metadatos (derecho de acceso)

curl -G https://api.constaia.com/v1/analyses/export \
  -H "Authorization: Bearer $CONSTAIA_API_KEY" \
  --data-urlencode "metadata[user_id]=123" \
  --data-urlencode "format=json"
ParámetroDescripción
metadata[clave]Al menos uno. Deben coincidir todos.
formatjson (por defecto): { "object": "list", "data": [...], "has_more": false, "url": "/v1/analyses/export" } con el objeto analysis completo. csv o xlsx: descarga de un fichero.

Devuelve hasta 1.000 análisis del modo de la clave, del más reciente al más antiguo; has_more: true si hay más. Los campos de mask_fields salen enmascarados, como están guardados.

Retención de resultados

storage decide cuánto vive el fichero; la retención decide cuánto viven los resultados (datos extraídos, veredicto, comprobaciones, nombre del fichero y exportaciones):

  1. retention_days de la plantilla (1–3650 días), si el análisis usó una.
  2. Si no, el plazo de la cuenta («Conservación de resultados» en Ajustes → Privacidad).
  3. Si no hay ninguno, los resultados se conservan hasta que los borres (salvo keep_results: false, que no los guarda).

El plazo empieza al terminar el análisis. Un proceso diario borra los vencidos. Se conserva el registro mínimo del análisis (tipo, veredicto, créditos y metadata) para el uso, la facturación y la analítica: por eso conviene que metadata lleve identificadores internos, no datos personales.

Cuerpos de webhook con resultados

Las entregas de webhook y de callbacks de enlaces que llevan resultados se vacían (quedan { type, purged: true, purged_at }, con su estado, intentos y código de respuesta) a los 7 días de entregarse con éxito, y en cuanto se borran los resultados de alguno de esos análisis (retención, borrado individual o por metadatos). Una entrega pendiente cuyo cuerpo se vacía pasa a failed: no se reenvía un cuerpo vacío.

Siguientes pasos

En esta página