Para los equipos de TI

La misma protección, llamada por tus programas — una imagen sin estado que operar.

Antes de que un flujo de trabajo envíe un documento a una IA, a un traductor o a un proveedor, puede pedir a DoNotLeak que encuentre y sustituya los datos personales que contiene — mediante una API que exige una identidad, atendida por el motor de la página.

¿Un componente más que alojar, proteger, actualizar y supervisar? Esto es lo que pide: una imagen firmada, sin base de datos ni volumen que respaldar, configurada por su entorno, llamada por máquinas identificadas. Y, bajo petición, su código fuente para tus equipos.

Solo llamantes identificados · No se guarda nada · Imágenes firmadas, amd64 y arm64

Dibujo lineal panorámico: una pila de documentos entra en una fila de tres cajas idénticas, unidas entre sí; la línea sigue hasta un portátil que muestra un documento y una lista corta, se divide hacia un edificio de oficinas y una nube, y vuelve a unirse en un engranaje. Una línea de puntos, aún sin conectar, lleva a un pequeño robot dentro de un marco discontinuo.

Probar la API

Envíe una solicitud, lea la respuesta.

El motor real, abierto aquí como demostración, sin clave: la respuesta que lee es la que recibirán sus programas.

  • 1 llamada cada 15 s por dirección IP
  • textos de hasta 4 KB
  • no se conserva nada
  • una misma red comparte el ritmo
Los topes de la demostración

Por dirección — una red IPv6 /64 cuenta como una sola: 100 llamadas al día, 300 a la semana, 600 al mes, 2000 al año. Para toda la demostración: 600 llamadas por minuto y un solo texto analizado a la vez; más allá, responde 503 y el resto del servicio no se ve afectado. Su dirección solo se mantiene en memoria, mientras se cuentan sus llamadas; los registros guardan el verbo, el estado, los tamaños y la duración — nunca la dirección, el texto ni la respuesta.

RateLimit-Policy · RateLimit · Retry-After

  • POSTscan
  • POSTprotectPróximamente
  • POSTrestorePróximamente
  • GETcapabilitiesPróximamente
  • POSTextractcon una clave
  • POSTrendercon una clave

Solicitud

POST/api/demo/scan

Encuentra los datos personales — dónde están (en bytes UTF-8), su tipo, su gravedad — y devuelve el texto protegido.

81 / 4096 bytes

Países
Ver el JSON enviado
{
  "text": "Damien Morel a validé le virement vers l'IBAN FR76 3000 6000 0112 3456 7890 189.",
  "scope": [
    "FR"
  ]
}

Listo — 1 llamada disponible

Respuesta

La respuesta aparecerá aquí.

Sus programas llaman a /api/v1/scan con su identidad — un certificado de cliente o un token: es la sección siguiente.

La API

Lo que hace hoy: encontrar y luego sustituir.

Una sola llamada: JSON de entrada; las detecciones y el texto protegido de salida. Responde el propio motor de la página.

  • Encontrar

    Cada dato personal del texto, con su tipo, su posición y una puntuación de confianza. Los formatos siguen los países que indiques.

    findings · counts · scope

  • Sustituir

    La misma respuesta trae el texto protegido: cada valor se convierte en un marcador tipado y numerado. Los valores que indiques como conservados quedan tal cual.

    anonymized_text · replacements · kept

La llamada

curl -sS --cacert ca.pem --cert client.pem --key client.key \
  -H 'Content-Type: application/json' \
  -X POST --data '{"text":"Contact: jean.dupont@example.org"}' \
  https://donotleak.example.org/api/v1/scan
Con un token en lugar de un certificado
-H "Authorization: Bearer $TOKEN"

La respuesta — grabada del motor, saltos de línea añadidos

{"version":1,
 "findings":[{"id":0,"kind":"Pii","span":{"start":9,"end":32},
   "primary":{"label":"EMAIL","severity":"Medium","confidence":85},
   "alternatives":[],"entity_id":0,"kept":false,"applied":0}],
 "counts":{"total":1,"low":0,"medium":1,"high":0,"critical":0},
 "anonymized_text":"Contact: [[EMAIL-1]]",
 "replacements":[{"span":{"start":9,"end":32},"placeholder":"[[EMAIL-1]]"}],
 "entities":[{"id":0,"label":"EMAIL","value":"jean.dupont@example.org",
   "placeholder":"[[EMAIL-1]]"}],
 "skipped_overlaps":0}
Los rechazos y la tabla de entidades

Los rechazos nunca citan el contenido: 400 vacío o no JSON, 413 más de 1 MiB, 422 contenido sospechoso, 401 sin identidad, 403 no autorizado, 429 presupuesto superado.

La tabla de entidades devuelve cada valor original al llamante que lo envió — es lo que hace posible restaurar. Solo el texto protegido sigue hacia la IA.

Lo que aún no hace
  • Restaurar: devolver los originales a la respuesta de la IA Próximamente
  • Los documentos Word a través de la API Próximamente
  • El contrato v1 publicado: una descripción OpenAPI, errores uniformes, cuotas por llamante Próximamente

Dónde encaja en tus flujos de trabajo

Un control antes de la llamada externa.

Un flujo — un gestor documental, un CRM, un lote de archivos — llama a DoNotLeak justo antes de llamar a una IA o a un socio. Solo sigue adelante el texto protegido.

Tú eliges dónde se sitúa el control y qué viene después: enviar enseguida, o dejar que una persona revise las detecciones y volver a enviar el texto conservando los valores que la tarea necesita.

Dibujo lineal: documentos con líneas naranjas avanzan en una cinta a través de un arco de análisis y después bajo una lupa. Un camino, validado, lleva una página protegida hacia un chip de IA; el otro, tachado, aparta los originales.
El control va antes de la frontera — donde tú decidas ponerlo.

Identidad de las máquinas

Nunca anónimo: cada llamada nombra a su llamante.

La API no tiene ninguna puerta abierta. El servidor se niega a arrancar mientras no sepa identificar a un llamante, y cada llamada se juzga según tu política.

  • Un certificado de cliente

    TLS mutuo, terminado por el propio servidor: el certificado debe remontar a la autoridad de certificación que reconoces, y su ID SPIFFE — si no, su nombre DNS, nunca su common name — se convierte en el llamante.

    TLS_CLIENT_CA · TLS_CLIENT_IDENTITY=san

  • Un token de tu proveedor de identidad

    El emisor OpenID Connect que designes — tu directorio, tu SSO: la firma, el emisor, la audiencia y la caducidad de cada token se comprueban con las claves que publica, y sus roles lo acompañan.

    OIDC_ISSUER_URL · OIDC_CLIENT_ID · probado en CI con Keycloak

  • Denegado por defecto: un llamante sin rol en tu archivo de política es rechazado (403), y analizar es un derecho aparte.
  • Ninguna clave de API estática que pueda filtrarse: un llamante se acredita con un certificado o un token firmado.

Alojamiento y soberanía

Alojada por Contee, o dentro de tu propio sistema de información.

La misma imagen headless en ambos casos.

  • Por Contee, en la UE

    Contee opera el servidor y tú lo llamas. La página pública ya funciona así, en OVH SAS, un proveedor de alojamiento francés (ver el aviso legal).

    La API alojada, con su propio contrato de servicio Próximamente

  • Dentro de tu sistema de información

    La imagen se ejecuta en tus servidores, detrás de tu PKI y de tu proveedor de identidad: los textos nunca salen de tu perímetro. Bajo petición, con su código fuente: la oferta en tus instalaciones, más abajo.

Dibujo lineal: una mujer coloca un cubo marcado con un escudo dentro de un círculo que rodea un armario de servidores; un portátil le envía un documento; sale una página, y solo una flecha discontinua lleva hacia una nube lejana.
Dónde se ejecuta el control es tu decisión de arquitectura.

La oferta en tus instalaciones

El código fuente en tus manos, y tus equipos para hacerlo evolucionar.

Para una organización que quiere DoNotLeak dentro de su propio sistema de información, sin depender de Contee para mantenerlo vivo.

  • El código fuente entregado

    Para el uso interno de tu organización: tus equipos lo leen, lo compilan y lo despliegan dentro de tu perímetro.

  • Tus equipos formados

    Para mantenerlo, mejorarlo y ampliarlo: las competencias se construyen en tu casa, no en la nuestra.

  • La menor dependencia posible

    El código y el saber hacer se quedan en casa; el servidor solo llega a lo que configuras, nunca a un servicio de Contee.

  • Una sola vez, no una suscripción SaaS

Disponible desde hoy, bajo petición, para tu perímetro.

La imagen headless

Solo el núcleo de análisis — firmado, para dos arquitecturas.

Sin página, sin cookie, sin código de navegador: la API y el motor, nada más.

  • El motor de la página

    La página y la API llaman a la misma función de análisis: lo que una persona ve en la página es lo que obtiene un programa.

    un núcleo · dos puertas

  • Pequeña y cerrada por defecto

    Una base distroless — sin shell, sin gestor de paquetes — y un usuario no root. Se niega a arrancar sin una fuente de identidad, o con una configuración TLS a medias.

    puerto 3000 · TLS y mTLS en la aplicación, o detrás de tu proxy

  • Construida y firmada como la imagen web

    La misma cadena la construye y la analiza, y luego la firma por digest con la clave propia de DoNotLeak — la imagen, su lista de materiales y su procedencia de compilación.

    amd64 + arm64 · cosign · SBOM SPDX · procedencia SLSA · Trivy, Grype, Dockle, Dive

Operaciones

Lo que la imagen pide a tus operaciones.

Un contenedor entre los demás.

  • Sin estado

    Ni base de datos ni volumen que respaldar: cada petición se procesa en memoria y después se olvida. Nada que restaurar.

    sin base de datos · sin volumen de datos

  • Configurada por su entorno

    Dirección de escucha, certificados, autoridad de clientes, emisor OIDC, archivo de política, presupuestos: variables, y archivos montados en solo lectura. Una configuración a medias se niega a arrancar.

    LEPTOS_SITE_ADDR · TLS_CERT · TLS_CLIENT_CA · CASBIN_POLICY_FILE · SCAN_*

  • Supervisada por tus herramientas

    Las trazas salen por OpenTelemetry hacia tu colector o, si no, a la salida estándar; los registros nunca contienen un texto analizado.

    OTEL_EXPORTER_OTLP_ENDPOINT

  • Actualizada por digest

    Una versión es una imagen firmada designada por su digest: comprobar la firma, cambiar el digest, reiniciar. Un certificado que cambia: archivos nuevos y luego un reinicio.

    cosign verify · amd64 + arm64

Dondequiera que se ejecute

Tres cosas que no cambian.

  • No se guarda nada

    Cada texto se analiza en la memoria de la petición que lo transporta, en el servidor, y desaparece con ella: ninguna copia, ningún registro de su contenido.

    Cada pipeline hace pasar un texto testigo por el servidor headless y falla si su registro llega a mostrarlo.

  • No se llama a nadie más

    La detección se basa en formatos, reglas y diccionarios: ningún modelo de lenguaje, ningún servicio de terceros. El servidor solo llega a lo que configuras — tu proveedor de identidad, tu colector de telemetría.

  • Cada versión verificable

    Cada imagen está firmada por digest, con su lista de materiales y su procedencia; la cadena comprueba la firma antes de publicar nada.

Dibujo lineal: páginas marcadas en naranja pasan por una cinta a través de una pequeña máquina de engranajes con un indicador y salen con recuadros discontinuos en lugar de las marcas; al lado, una gran máquina que muestra un cerebro está desenchufada, con el enchufe colgando.
Reglas y diccionarios hacen el trabajo: ningún modelo de lenguaje al que llamar.

Pruébalo en la página y luego escribe a Contee.

La página responde con el mismo motor que la API: pega un texto típico de tus flujos de trabajo. La seguridad de la imagen se comprueba control por control en la página del CISO. Para la API alojada o la oferta en tus instalaciones, escribe a Contee.