Seguridad

Qué guarda el hub y cómo revocarlo

La plata nunca pasa por el hub: Talo procesa cada pago en tu propia cuenta. El hub guarda lo mínimo para operar, cifra los secretos, y lo podés revocar cuando quieras.

Quién lo opera

Talo Partner Hub lo opera un partner oficial de Talo Pay, dentro del programa de partners de Talo; no es un producto de Talo. Funciona con credenciales de partner que emitió Talo (hoy sandbox; producción cuando Talo emita las credenciales de producción), y Talo procesa cada pago en la cuenta del comercio.

Podés confirmar este partnership directamente con Talo por su línea oficial de WhatsApp: +54 11 3371-1752, la que Talo publica en sus términos y condiciones (Información de contacto).

Dónde está la plata

Los pagos los crea y los procesa Talo en la cuenta Talo del comercio: el comprador transfiere a un CVU de esa cuenta y la plata queda ahí. El hub no tiene fondos y su API no puede mandar plata a una cuenta que elija: lo único que sale de la cuenta a través del hub es un reembolso de un pago (solo keys full), que Talo devuelve por ese pago; el hub no elige el destino. Fuera de eso, crea y consulta pagos y links de pago, simula transferencias en sandbox y ajusta la configuración de cobro de la cuenta.

Qué guarda el hub

La autorización de Talo de la cuenta (un token de partner que Talo emite cuando autorizás el hub)Cifrada con AES-256-GCM. La clave vive en la configuración del deploy, nunca en la base, y cada valor queda atado a su uso.
Las API keys del hub (tph_test_…, tph_live_…)Solo un hash SHA-256 y un prefijo corto. Una key nueva que va hacia el CLI o un cliente MCP queda cifrada hasta que ese cliente la retira (minutos; si nadie la retira, el hub la revoca); después no se puede recuperar.
Los secretos de webhook (whsec_…)Cifrados igual que la autorización; se muestran una vez.
Los pagos que crea el hubID de Talo, tu external_id, monto, estado y sus eventos (estado, CVU, alias, montos, reembolsos, motivo y link de pago). Los datos del comprador (client_data) se le pasan a Talo y no quedan en el hub.
Los links de pagoTítulo, descripción, monto o rango, URL de regreso, y cuándo se crearon y desactivaron. Un pago que un comprador empieza desde un link guarda de qué link vino. Solo para los límites, cada intento de pago nuevo desde un link deja un hash con clave (HMAC-SHA256, 32 caracteres hex) del link y la IP del comprador en una tabla aparte, por un día (lo más viejo se borra en el siguiente intento de ese link); el pago no lo lleva, y la IP nunca se guarda.
Los checkout tokens (ct_…)No se guardan: cada uno va firmado (HMAC-SHA256, con su propia clave) y se verifica al usarlo.
Las URLs de webhook y el resultado de cada entregaTal como se registraron. Si la URL lleva un secreto de bypass de Vercel, también queda guardado, pero el hub nunca lo vuelve a mostrar.
El usoQué key llamó a qué ruta, el canal y el código de respuesta, para las métricas de la cuenta. Sin cuerpos ni keys.

El CLI guarda la key de tu login en tu configuración de usuario, legible solo por vos (modo 600 en macOS y Linux; tu perfil de usuario en Windows), y ahí mismo, mientras esperás autorizar, el login pendiente para poder retomarlo: incluye un token de un solo uso que retira la key de ese login. El CLI lo borra cuando el login se conecta o falla por algo que no es el vencimiento, con logout o disconnect, y, cuando el hub ya no lo acepta (unos 20 minutos después de empezar), la próxima vez que guarda su configuración después de eso. Con el MCP por OAuth, el navegador solo lleva un código de un uso; el cliente MCP lo cambia (con PKCE) por la key en el endpoint de tokens del hub, así que la key nunca pasa por la conversación. Las sesiones del dashboard son cookies cifradas y HttpOnly, y la API solo las acepta junto con un header que una página de otro sitio no puede mandar.

Qué puede hacer cada key

ScopePuedeNo puede
readConsultar pagos, links de pago, eventos, la cuenta y su configuración, saldo y movimientos (cuando Talo los habilita), la lista de keys y de webhooks, y el checklistCrear o cambiar nada
chargeLo anterior, crear pagos, crear y desactivar links de pago, simular transferencias en sandbox y probar webhooksReembolsar, cambiar montos o vencimientos, manejar keys o webhooks
fullTodo: también reembolsos, cambios de precio y vencimiento, keys, webhooks, configuración y desconectar la cuenta

Solo una key full (o el dashboard) puede crear keys, de cualquier scope; las read y charge no pueden crear keys. Los servidores de checkout y los agentes que cobran usan charge: si se filtra, puede crear cobros pero no sacar plata. Sandbox y producción usan keys distintas sobre cuentas Talo distintas, y las skills del hub le indican al agente pedirte confirmación antes de cualquier reembolso, cambio de precio o key de producción.

Revocar

Una keynpx talo-hub keys revoke <id>, el dashboard o DELETE /api/v1/api-keys/{id}
El login del CLInpx talo-hub logout (--all para los dos entornos): revoca su key en el hub (si no lo alcanza, te avisa para que la revoques desde el dashboard) y la borra de la máquina
Un webhooknpx talo-hub webhooks remove <id>
Toda la cuentaDesconectar en el dashboard, npx talo-hub disconnect --yes o DELETE /api/v1/account con una key full. El hub borra su copia de la autorización de Talo, revoca todas las keys, desactiva todos los webhooks y cierra todas las sesiones del dashboard de ese entorno, todo junto. Los cobros y la plata siguen en Talo.
terminal
npx talo-hub disconnect --yes              # sandbox
npx talo-hub disconnect --yes --production # producción (siempre pide --production)

Desconectar no revoca la autorización del lado de Talo, y el hub conserva su registro de pagos y eventos pasados (sin datos del comprador). Para volver, autorizás de nuevo (npx talo-hub login); las sesiones de antes de desconectar no vuelven. Desconectar es decisión de la persona dueña de la cuenta: un agente no debería hacerlo si no se lo pedís en la conversación. Desconectar también desactiva para siempre todos los links de pago de la cuenta, y sus checkout tokens dejan de funcionar.

Checkout token y links de pago

  • El checkout token (checkout_token, ct_…) viene con cada pago que la API crea o consulta, para que tu página muestre ese pago con el widget. Es de solo lectura y nombra un único pago de una cuenta: abre la vista pública de ese pago (estado, montos, CVU, alias, vencimiento, motivo y la página de Talo) y nada más; ni otros pagos, ni cambios, ni datos de la cuenta. Vence a los 15 días de emitido. No se revoca de a uno: desconectar la cuenta los frena a todos, y los emitidos antes de desconectar no vuelven a funcionar aunque reconectes la cuenta. Un token inválido, vencido o de otro pago recibe el mismo 404 que un pago que no existe, así no revela qué existe.
  • Los links de pago (/l/<id>) los puede usar cualquiera que tenga la URL, así que el hub permite hasta 20 pagos por hora desde una misma red (IP) por link, y un freno de 200 por link cada 10 minutos; quien vuelve al link recupera el pago que ya había empezado (también si transfirió de menos), y eso no cuenta. Los que comparten red (el mismo Wi-Fi, una oficina) cuentan juntos. La red se distingue con un hash con clave del link y la IP, que vive solo en la tabla de esos límites, por un día: la IP nunca se guarda. Volver funciona con una cookie HttpOnly de ese link, por un día, mientras ese pago siga pendiente o le falte plata (UNDERPAID) por el mismo monto, así no recibe un CVU nuevo. Un link desactivado, o de una cuenta desconectada, solo dice que no está disponible.
  • Los dos son solo pantalla. Entregá el pedido con el webhook firmado, nunca con el evento talo-paid del widget ni porque el comprador volvió a tu sitio: cualquiera puede disparar un evento en el navegador.

Webhooks

Cada entrega va firmada con HMAC-SHA256 sobre la hora y el cuerpo crudo, y tu verificador la acepta solo dentro de los 5 minutos de esa hora, así tu servidor sabe que viene del hub (ver Webhooks). El hub no sigue redirecciones y nunca muestra el secreto de bypass de Vercel de una URL.