Documentation menu

Seguridad y revocación de acceso

Tokens, no contraseñas

Conectar un asistente nunca le entrega tu contraseña de MailInApp ni una clave de API. Aprobar la pantalla de consentimiento acuña un token de acceso de OAuth con el alcance exacto de los permisos que marcaste, vinculado exactamente a la cuenta que elegiste. Los tokens son cadenas aleatorias opacas almacenadas con hash — el mismo patrón que MailInApp ya usa para las claves de API para desarrolladores — así que una lectura de la base de datos no puede recuperar una credencial utilizable, y revocar uno es instantáneo en lugar de esperar a un vencimiento.

  • Los tokens de acceso duran 1 hora.
  • Los tokens de actualización duran 60 días y rotan en cada uso — el anterior deja de funcionar en el momento en que se emite uno nuevo, y si alguna vez se reproduce un token de actualización ya rotado (una señal de que se filtró), toda la conexión se revoca automáticamente en lugar de solo ese token.

Confirmación en dos pasos antes de cualquier envío

Que se otorgue campaigns:send no significa que un asistente pueda enviar correo a tus contactos en un solo paso. Enviar siempre pasa por dos llamadas a herramientas separadas:

  1. prepare_send resuelve tu audiencia, aplica supresiones y renderiza una vista previa real — anotada como de solo lectura, porque no envía nada. Devuelve el número de destinatarios, una muestra de direcciones, el HTML renderizado, y un confirmationToken de corta duración vinculado a ese proyecto, asunto y audiencia exactos.
  2. confirm_send requiere ese token exacto, más el mismo proyecto/asunto/audiencia exactos para los que se acuñó. Cualquier discrepancia — un asunto distinto, una selección de filas distinta, un token vencido (ventana de 10 minutos) — se rechaza de plano.

El efecto práctico: un asistente no puede enviar correo sin antes mostrar qué está por enviar y a cuántas personas, y no puede cambiar la audiencia o el asunto entre mostrarte la vista previa y realmente enviar. En Claude, el resultado de prepare_send se renderiza como una tarjeta real con su propio botón Confirm & Send — así que la aprobación humana es un clic en una vista previa renderizada, no una frase en una transcripción de chat que un modelo pudiera convencerse a sí mismo de pasar por alto.

Cada envío realizado de esta forma sigue pasando además por las salvaguardas existentes de tu cuenta: el límite connectorSendRecipientsMonthly de tu plan (separado de, y mucho menor que, tu volumen de envío mensual habitual — 0 en el plan gratuito), la misma lista de supresión que verifica cualquier otro envío, y el límite de envío mensual general de tu cuenta. Cada uno de estos también se registra como su propio registro de auditoría.

El contenido no confiable se delimita, no se confía en él

Los campos de contacto, los cuerpos de mensaje del buzón de correo entrante y las respuestas de texto libre de formulario están todos escritos por personas distintas de ti — un destinatario, o quien sea que le escriba a tu bandeja de soporte. Las herramientas que devuelven este contenido lo envuelven claramente como datos no confiables en el resultado de la herramienta, así que tu asistente lo trata como algo para leer y resumir, nunca como una instrucción a seguir. (Para quien tenga curiosidad técnica: este delimitado vive en el resultado de la herramienta, nunca en la descripción de la herramienta — poner instrucciones de comportamiento en una descripción es exactamente el tipo de superficie de inyección de instrucciones que los revisores de conectores rechazan a simple vista.)

Lo que ninguna herramienta puede alcanzar jamás

Ninguna herramienta de conector — sin importar qué alcances otorgues — puede leer o rotar una clave de API, un secreto de firma de webhook, una contraseña SMTP, o un secreto de cliente OAuth de una fuente de datos conectada; cambiar la configuración de pagos, dominio o SMTP; ni gestionar invitaciones de equipo. Estas reflejan exactamente las mismas exclusiones que ya no puede alcanzar un compañero de equipo con rol de editor en cualquier otro lugar de MailInApp. Nada de esto toca Stripe ni facturación tampoco — un cargo disputado o un reembolso sigue siendo una acción solo del panel.

Con cuál cuenta, siempre revalidado

Una conexión está vinculada a una cuenta en el momento del consentimiento y nunca vuelve a leer un encabezado para decidir con cuál cuenta actuar (a diferencia de una sesión del panel con la sesión iniciada eligiendo entre empresas). Ese vínculo se revalida en cada llamada individual contra tu membresía de equipo actual — si te eliminan de un equipo, o tu rol cambia, la siguiente llamada en esa conexión refleja la nueva realidad, no lo que era cierto cuando otorgaste los alcances.

Revocar una conexión

Ve a Conexiones en el panel (/dashboard/connections). Cada asistente que has aprobado aparece listado con sus alcances otorgados y cuándo hizo su última llamada; Revocar tiene efecto de inmediato — cada token que tiene ese asistente, de acceso y de actualización por igual, deja de funcionar en su siguiente llamada. No hay nada que deshacer primero del lado de la plataforma (Claude/Gemini); revocar aquí siempre es suficiente.