Constaia
Guías por caso

Solo analizar sin guardar

Minimización de datos (RGPD) con Constaia. Analiza documentos sin guardar el fichero ni los datos extraídos con storage none y keep_results false.

Muchas veces solo necesitas una respuesta ("¿es un DNI vigente de esta persona?") y no quieres que el documento ni sus datos queden guardados en ningún sitio más. Constaia permite analizar sin conservar el fichero y, si quieres, sin conservar tampoco los resultados. Es la forma más sencilla de aplicar el principio de minimización de datos del RGPD.

Tres niveles

Qué quieresOpcionesQué queda en Constaia
No guardar el ficherostorage: "none" (por defecto)Los resultados del análisis (tipo, veredicto, campos), hasta que lo borres.
No guardar nadastorage: "none" + keep_results: falseSolo metadatos de uso y facturación.
Guardar un tiempo y borrar despuésstorage: "temporary" o "persistent" + DELETE /v1/analyses/{id}Nada tras el borrado.

storage: "none": el fichero no se guarda

Es el valor por defecto, salvo que hayas cambiado el de tu cuenta en el panel (ajustes de la cuenta).

  • Análisis síncrono (lo normal): el fichero se procesa en memoria y nunca se escribe en el almacenamiento.
  • Análisis asíncrono (async: true) y lotes: el fichero se guarda cifrado solo mientras se procesa y se borra al terminar.

La respuesta deja constancia en storage.file_deleted_at, que puedes guardar como prueba:

"storage": { "mode": "none", "file_deleted_at": "2026-09-29T10:00:02Z", "expires_at": null }

Con storage: "none" tampoco se conserva el texto OCR del documento.

keep_results: false: tampoco se guardan los datos

Con keep_results: false recibes el resultado completo una sola vez, en la respuesta, y Constaia no guarda los datos extraídos (tipo, campos, checks, motivos). Después:

  • GET /v1/analyses/{id} devuelve 404 resource_missing.
  • GET /v1/analyses/{id}/export también devuelve 404.
  • El análisis no aparece en los listados de la API.
  • Solo queda lo necesario para uso y facturación: páginas, créditos, tipo de documento y el estado del veredicto.

Cuidado con export y metadata

Si pides export junto con keep_results: false, los ficheros exportados se generan igualmente y se guardan cifrados hasta que caducan, a las 24 horas. Si no quieres que quede nada, no pidas exportaciones: toma los datos de la respuesta. Y los metadata que envíes se guardan con el análisis: usa ids internos, no nombres ni números de documento.

analyze-no-store.js
import { Constaia, ConstaiaError, NotFoundError } from "@constaia/sdk";
import { fromPath } from "@constaia/sdk/node";

const constaia = new Constaia(); // lee CONSTAIA_API_KEY

try {
  const analysis = await constaia.analyze(await fromPath("./dni_valid.jpg"), {
    expect: "es_dni",
    checks: { holder: { fullName: "María García López" } },
    storage: "none",
    keepResults: false,
    metadata: { user_id: "u_8812" },
  });

  // Lo que necesitas, ahora: después ya no estará.
  const record = {
    analysisId: analysis.id,
    status: analysis.verdict?.status,
    checkedAt: analysis.completed_at,
    fileDeletedAt: analysis.storage.file_deleted_at,
  };
  console.log(record);

  await constaia.analyses.get(analysis.id); // lanza NotFoundError
} catch (err) {
  if (err instanceof NotFoundError) console.log("No se conserva nada:", err.code); // resource_missing
  else if (err instanceof ConstaiaError) console.error(err.code, err.message, err.requestId);
  else throw err;
}

Usa el análisis síncrono con keep_results: false. Si el análisis supera los 30 segundos de espera y la API responde 202, el resultado ya no se puede consultar después: solo te llegará por el webhook analysis.completed, así que tenlo configurado si procesas PDF largos. Ver Webhooks.

Borrar lo que sí guardaste

Si guardas ficheros o resultados un tiempo (por ejemplo, con storage: "temporary" y ttl_hours para una revisión humana, o persistent), bórralos cuando ya no los necesites. El borrado elimina el fichero, los resultados y las exportaciones:

delete.js
const deleted = await constaia.analyses.delete("an_01J...");
console.log(deleted); // { id: "an_01J...", object: "analysis", deleted: true }

Con temporary, el fichero se borra solo al cumplirse ttl_hours (de 1 a 720; por defecto 24). La respuesta indica cuándo en storage.expires_at.

Valores por defecto de la cuenta

En el panel (app.constaia.com, ajustes de la cuenta) puedes fijar el modo de almacenamiento y el TTL por defecto. Se aplican cuando una petición no envía storage o ttl_hours. Aun así, envía storage: "none" explícitamente en el código de los flujos sensibles: así un cambio en el panel no los altera. keep_results no tiene valor de cuenta: es true salvo que envíes false.

Qué guardar en tu lado

Si Constaia no guarda nada, tu registro es la única constancia de la comprobación. Normalmente basta con:

  • analysis.id como referencia (para soporte; no sirve para recuperar datos con keep_results: false).
  • verdict.status y la fecha (completed_at).
  • storage.file_deleted_at, como prueba de que el fichero no se conservó.
  • Solo los campos que tu proceso necesite de verdad (por ejemplo, el número de documento validado).

Dónde se procesa

El procesamiento se hace en la UE y los ficheros que se guardan se cifran en la aplicación antes de llegar al almacenamiento. Los detalles están en Almacenamiento y privacidad y en Residencia de datos.

Si además quieres que el documento lo procesen solo proveedores con sede y operación en la UE, añade processing: "sovereign" a las opciones. La respuesta trae el objeto processing con el perfil, la región y los proveedores que lo trataron: guárdalo junto a tu decisión como prueba. Ver Residencia de datos.

Probarlo

Con una clave ck_test_…, analiza dni_valid.jpg con storage: "none" y keep_results: false como en el ejemplo: la respuesta trae el resultado completo y storage.file_deleted_at, y el GET posterior devuelve 404. Más en Modo test.

Siguientes pasos

En esta página