{"status": "ok", "tool": "borde", "contract": "1.0", "codigo": {"arranque": 1791692122.1315234, "disco": 1789662151.5728757, "sin_desplegar": false}, "canales": {"whatsapp": {"limite_mb": 16.0, "adjuntos": true, "nombre": "WhatsApp"}, "cli": {"limite_mb": 2048.0, "adjuntos": true, "nombre": "terminal"}, "app": {"limite_mb": 24.0, "adjuntos": true, "nombre": "la app"}}, "canal_por_defecto": "cli", "preguntas_minimas": {"destino": ["chat", "directorio"], "ejecutar_ia_final": "sólo si destino=directorio", "cuando": "después de adjuntar todo; sin ellas el borde pregunta en vez de elegir por el usuario (D-116)"}, "auth": {"requerida": true, "transporte": "cabecera Authorization: Bearer <clave>", "identidad": "por usuario: sale de la credencial del registro compartido, no del campo `usuario` del formulario. Sólo un cliente con scope \"service\" puede declarar por quién actúa.", "token_compartido": null, "aviso": null}, "asignador": {"url": "http://127.0.0.1:8092", "clave_de_servicio": true}, "url_publica": "https://joshua.taile0c5c5.ts.net", "nota": null, "retiro": {"ruta": "GET /salida/<lote_id>?exp=&f=[&ref=]", "permiso": "firmado en la URL: vale para UN lote, UN archivo y hasta que venza. No usa cabeceras porque lo abre un navegador.", "vigencia_horas": 168, "secreto_efimero": false, "aviso": null}, "catalogo": "GET /catalogo — qué se le puede pedir al flujo y quién decide cada flag (pasa-manos al asignador; pide el mismo token)", "cancelar": {"ruta": "POST /lotes/<lote_id>/cancelar", "cuerpo": "{\"conservar\": true|false} — opcional; por defecto conserva", "que_hace": "para el lote antes del próximo archivo (el que corre termina) y dice si se entrega lo ya procesado. Sólo lotes del usuario autenticado."}, "pendientes": {"ruta": "GET /pendientes[?pendientes=1]", "que": "los lotes del usuario de la credencial, con su estado, sus archivos y el link de retiro cuando ya hay salida", "usuario": "sale de la credencial, nunca de la query", "ventana": "sólo mientras el asignador conserve el estado del lote"}}