{"welcome":"Bienvenido al CLI de Portal Inmuebles","version":"2.1.0","description":"API para gestión de propiedades inmobiliarias, analytics, balance, espacios promocionales y más.","endpoints":{"/api/cli":{"method":"GET","auth_required":false,"description":"Esta documentación (lo que estás leyendo)"},"/.well-known/ai-cli.json":{"method":"GET","auth_required":false,"description":"Endpoint de descubrimiento automático para agentes AI"},"/api/cli/execute":{"method":"POST","auth_required":true,"description":"Ejecutar comandos del CLI","headers":{"Authorization":"Bearer cli_[tu_token_de_64_caracteres]","Content-Type":"application/json"},"body":{"command":"string (REQUERIDO) - Grupo de comando. Ej: \"properties\", \"credits\", \"analytics\"","subcommand":"string (REQUERIDO) - Accion especifica. Ej: \"list\", \"create\", \"get\"","args":"object (opcional) - Argumentos del comando"},"IMPORTANTE":"command y subcommand son campos SEPARADOS. Ejemplo: {\"command\":\"properties\",\"subcommand\":\"create\",\"args\":{...}}. NUNCA enviar \"command\":\"properties:create\"."},"/api/cli/token":{"method":"GET/POST","auth_required":true,"description":"Gestionar tokens CLI (listar, generar, revocar)","note":"Requiere sesión de usuario autenticado (no token CLI)"},"/api/cli/subscription":{"method":"GET/POST","auth_required":true,"description":"Gestionar suscripción CLI (ver estado, cambiar plan)"}},"getting_started":{"paso_1":{"titulo":"Crear cuenta","url":"https://portalinmuebles.cl/auth/register","descripcion":"Registra una cuenta gratuita"},"paso_2":{"titulo":"Obtener token CLI","url":"https://portalinmuebles.cl/dashboard/cli","descripcion":"Solicita tu token CLI (se envía por email por seguridad)"},"paso_3":{"titulo":"Revelar token","descripcion":"Haz clic en el link del email para ver tu token (una sola vez)"},"paso_4":{"titulo":"Ejecutar comandos","descripcion":"Usa POST /api/cli/execute con tu token"}},"commands":{"properties":{"description":"Gestión de propiedades inmobiliarias","subcommands":{"list":{"description":"Listar propiedades","tier_minimo":"FREE","args":{"limit":"number (default: 20, max: 100)","offset":"number (default: 0)","status":"string (active | inactive | draft | sold)"},"ejemplo":{"command":"properties","subcommand":"list","args":{"limit":10,"status":"active"}}},"get":{"description":"Obtener detalle de una propiedad","tier_minimo":"FREE","args":{"id":"string (requerido) - UUID de la propiedad"}},"create":{"description":"Crear nueva propiedad","tier_minimo":"BASIC","args":{"data":{"title":"string (requerido)","property_type":"string (casa|departamento|oficina|terreno|local|bodega)","listing_type":"string (sale|rent)","price":"number","city":"string","address":"string","bedrooms":"number","bathrooms":"number","area_m2":"number","description":"string"}}},"update":{"description":"Actualizar propiedad existente","tier_minimo":"BASIC","args":{"id":"string (requerido)","data":"object - Campos a actualizar"}},"delete":{"description":"Eliminar propiedad","tier_minimo":"PRO","args":{"id":"string (requerido)"}},"bulk-update":{"description":"Actualizar múltiples propiedades","tier_minimo":"PRO"},"bulk-delete":{"description":"Eliminar múltiples propiedades","tier_minimo":"ENTERPRISE"}}},"analytics":{"description":"Análisis y métricas de propiedades","subcommands":{"summary":{"description":"Resumen general de analytics","tier_minimo":"BASIC","respuesta":{"total_properties":"number","active_properties":"number","total_views":"number"}},"views":{"description":"Vistas de propiedades por período","tier_minimo":"PRO","args":{"property_id":"string (opcional)","days":"number (default: 30, max: 90)"}},"export":{"description":"Exportar datos de analytics","tier_minimo":"PRO"},"trends":{"description":"Tendencias de visualización","tier_minimo":"ENTERPRISE"}}},"balance":{"description":"Gestión de saldo/wallet del usuario","subcommands":{"check":{"description":"Ver saldo actual","tier_minimo":"FREE","respuesta":{"balance":"number (CLP)","currency":"string (CLP)"}},"history":{"description":"Historial de transacciones","tier_minimo":"BASIC","args":{"limit":"number (default: 20, max: 100)"}},"add":{"description":"Agregar saldo (genera link de pago)","tier_minimo":"PRO"},"transfer":{"description":"Transferir saldo entre usuarios","tier_minimo":"ENTERPRISE"}}},"spaces":{"description":"Espacios promocionales y subastas","subcommands":{"list":{"description":"Listar espacios disponibles","tier_minimo":"BASIC","respuesta":{"spaces":"array de espacios con position, status, current_bid"}},"buy":{"description":"Comprar/pujar por espacio promocional","tier_minimo":"PRO","args":{"space_id":"string (requerido)","property_id":"string (requerido)"}},"history":{"description":"Historial de espacios comprados","tier_minimo":"ENTERPRISE"}}},"subscription":{"description":"Gestión de suscripción CLI","subcommands":{"status":{"description":"Ver estado de tu suscripción","tier_minimo":"FREE","respuesta":{"has_subscription":"boolean","plan_type":"string","plan_name":"string","property_limit":"number","properties_count":"number","properties_remaining":"number","expires_at":"string (ISO)","current_tier":"string"}},"plans":{"description":"Ver planes disponibles","tier_minimo":"FREE","respuesta":{"plans":"array con name, price_clp, property_limit, features"}}}},"feedback":{"description":"Sistema de feedback para reportar bugs y sugerencias","subcommands":{"submit":{"description":"Enviar feedback","tier_minimo":"FREE","args":{"type":"string (requerido) - bug_report | feature_request | security_concern | performance_issue | documentation | usability | other","message":"string (requerido) - Descripción detallada","severity":"string (opcional) - low | medium | high | critical"},"ejemplo":{"command":"feedback","subcommand":"submit","args":{"type":"bug_report","message":"El comando properties:list ignora el parámetro offset cuando limit es mayor a 50","severity":"medium"}}},"list":{"description":"Ver tu feedback enviado","tier_minimo":"BASIC","args":{"limit":"number (default: 10, max: 50)"}},"types":{"description":"Ver tipos de feedback disponibles","tier_minimo":"FREE"},"stats":{"description":"Estadísticas de feedback (admin)","tier_minimo":"PRO"}}},"users":{"description":"Gestión de usuarios (solo ENTERPRISE)","subcommands":{"list":{"description":"Listar usuarios","tier_minimo":"ENTERPRISE","args":{"limit":"number (default: 20, max: 100)"}},"get":{"description":"Obtener detalle de usuario","tier_minimo":"ENTERPRISE","args":{"id":"string (requerido)"}}}}},"tiers":{"FREE":{"nombre":"Gratuito","precio_clp":0,"precio_display":"Gratis","limite_propiedades":3,"rate_limits":{"per_minute":5,"per_hour":30},"comandos":["properties:list","properties:get","balance:check","feedback:submit","feedback:types","subscription:status","subscription:plans"]},"BASIC":{"nombre":"Básico","precio_clp":9990,"precio_display":"$9.990/mes","limite_propiedades":10,"rate_limits":{"per_minute":20,"per_hour":200},"comandos":["properties:list","properties:get","properties:create","properties:update","analytics:summary","spaces:list","balance:check","balance:history","feedback:submit","feedback:list","feedback:types","subscription:status","subscription:plans"]},"PRO":{"nombre":"Profesional","precio_clp":49990,"precio_display":"$49.990/mes","limite_propiedades":50,"rate_limits":{"per_minute":60,"per_hour":1000},"comandos":["properties:list","properties:get","properties:create","properties:update","properties:delete","properties:bulk-update","analytics:summary","analytics:views","analytics:export","spaces:list","spaces:buy","balance:check","balance:history","balance:add","feedback:submit","feedback:list","feedback:stats","feedback:types","subscription:status","subscription:plans"]},"ENTERPRISE":{"nombre":"Enterprise","precio_clp":99990,"precio_display":"$99.990/mes","limite_propiedades":200,"rate_limits":{"per_minute":120,"per_hour":3000},"comandos":["properties:list","properties:get","properties:create","properties:update","properties:delete","properties:bulk-update","properties:bulk-delete","analytics:summary","analytics:views","analytics:export","analytics:trends","spaces:list","spaces:buy","spaces:history","balance:check","balance:history","balance:add","balance:transfer","feedback:submit","feedback:list","feedback:stats","feedback:types","users:list","users:get","subscription:status","subscription:plans"]}},"ejemplos":{"listar_propiedades_activas":{"descripcion":"Listar las primeras 10 propiedades activas","request":{"method":"POST","url":"/api/cli/execute","headers":{"Authorization":"Bearer cli_abc123...","Content-Type":"application/json"},"body":{"command":"properties","subcommand":"list","args":{"limit":10,"status":"active"}}},"response":{"success":true,"result":{"properties":[{"id":"uuid-1","title":"Departamento en Providencia","property_type":"departamento","listing_type":"sale","price":250000000,"status":"active","city":"Santiago","views_count":45}],"count":10,"total":50},"execution_time_ms":150,"rate_limit":{"remaining":4,"reset_at":"2026-02-03T10:15:00Z"}}},"consultar_saldo":{"descripcion":"Ver saldo actual del wallet","request":{"method":"POST","url":"/api/cli/execute","headers":{"Authorization":"Bearer cli_abc123...","Content-Type":"application/json"},"body":{"command":"balance","subcommand":"check"}},"response":{"success":true,"result":{"balance":150000,"currency":"CLP"},"execution_time_ms":45}},"ver_estado_suscripcion":{"descripcion":"Consultar estado de la suscripción CLI","request":{"method":"POST","url":"/api/cli/execute","headers":{"Authorization":"Bearer cli_abc123...","Content-Type":"application/json"},"body":{"command":"subscription","subcommand":"status"}},"response":{"success":true,"result":{"has_subscription":true,"plan_type":"professional","plan_name":"Profesional","property_limit":50,"properties_count":12,"properties_remaining":38,"current_tier":"PRO","expires_at":"2026-03-15T00:00:00Z"},"execution_time_ms":80}},"reportar_bug":{"descripcion":"Enviar reporte de bug","request":{"method":"POST","url":"/api/cli/execute","headers":{"Authorization":"Bearer cli_abc123...","Content-Type":"application/json"},"body":{"command":"feedback","subcommand":"submit","args":{"type":"bug_report","message":"El endpoint /api/cli/execute devuelve 500 cuando args contiene valores null","severity":"high"}}},"response":{"success":true,"result":{"id":"uuid-feedback","message":"Feedback enviado. Gracias!"},"execution_time_ms":120}}},"error_codes":{"MISSING_TOKEN":{"http_status":401,"descripcion":"No se proporcionó token de autenticación","solucion":"Incluir header Authorization: Bearer cli_xxx"},"INVALID_TOKEN_FORMAT":{"http_status":401,"descripcion":"Formato de token inválido","solucion":"El token debe tener formato cli_[64 caracteres hex]"},"TOKEN_NOT_FOUND":{"http_status":401,"descripcion":"Token no encontrado en la base de datos","solucion":"Generar nuevo token en /dashboard/cli"},"TOKEN_REVOKED":{"http_status":401,"descripcion":"El token ha sido revocado","solucion":"Generar nuevo token en /dashboard/cli"},"TOKEN_EXPIRED":{"http_status":401,"descripcion":"El token ha expirado (duración: 90 días)","solucion":"Generar nuevo token en /dashboard/cli"},"COMMAND_NOT_ALLOWED":{"http_status":403,"descripcion":"Comando no permitido para tu tier de suscripción","solucion":"Actualizar plan en /dashboard/cli"},"RATE_LIMIT_EXCEEDED":{"http_status":429,"descripcion":"Excediste el límite de requests","solucion":"Esperar hasta reset_at indicado en response"},"PROPERTY_LIMIT_EXCEEDED":{"http_status":403,"descripcion":"Alcanzaste el límite de propiedades de tu plan","solucion":"Actualizar plan o eliminar propiedades existentes"},"INVALID_JSON":{"http_status":400,"descripcion":"El body de la request no es JSON válido","solucion":"Verificar sintaxis del JSON enviado"},"MISSING_COMMAND":{"http_status":400,"descripcion":"Falta el campo \"command\" en el body","solucion":"Incluir campo command en el JSON"},"TIMEOUT":{"http_status":504,"descripcion":"El comando excedió el tiempo máximo (25 segundos)","solucion":"Reducir scope del comando o reintentar"},"INTERNAL_ERROR":{"http_status":500,"descripcion":"Error interno del servidor","solucion":"Reportar via feedback:submit con detalles"}},"response_headers":{"X-RateLimit-Remaining":"Requests restantes en la ventana actual","X-RateLimit-Reset":"Timestamp ISO de cuando se resetea el límite","X-Execution-Time":"Milisegundos que tomó ejecutar el comando"},"seguridad":{"capas":["1. Validación de token (SHA256, activo, no expirado)","2. Rate limiting por tier (5-120 req/min)","3. Whitelist de comandos por tier","4. Verificación de ownership (solo tus recursos)","5. Row Level Security en base de datos","6. Auditoría completa de todas las operaciones"],"comandos_bloqueados":["database:* (operaciones de BD directas)","accounts:* (gestión de cuentas)","moderation:* (sistema de moderación)","ai:* (configuración de IA)","auth:* (autenticación interna)"],"nota":"El token CLI solo permite acceder a TUS propios recursos. No puedes ver ni modificar datos de otros usuarios."},"notas_para_agentes_ai":{"descubrimiento":"Este endpoint (/api/cli) y /.well-known/ai-cli.json no requieren autenticación","feedback":"Usa feedback:submit para reportar bugs o sugerencias - ayuda a mejorar el sistema","rate_limiting":"Respeta X-RateLimit-Remaining para evitar bloqueos temporales","sandbox":"Cada usuario solo accede a sus propios recursos (excepto admin)","mejores_practicas":["Verificar subscription:status antes de operaciones masivas","Usar limit y offset para paginar resultados grandes","Revisar error_code en respuestas de error para diagnóstico","El campo execution_time_ms ayuda a optimizar requests"]},"credits":{"description":"Créditos de publicación de propiedades","disponible_desde":"FREE","nota":"Todos los tiers tienen acceso a credits:balance, credits:history, credits:packs. Solo ADMIN_CEO tiene credits:grant.","subcommands":{"balance":{"description":"Saldo actual","tier_minimo":"FREE"},"history":{"description":"Historial de movimientos","tier_minimo":"FREE","args":{"limit":"number (max 50)"}},"packs":{"description":"Catálogo de packs disponibles","tier_minimo":"FREE"},"grant":{"description":"Asignar/descontar créditos (positivo o negativo)","tier_minimo":"ADMIN_CEO","args":{"user_id":"string","credits":"number","reason":"string (opcional)"}}}},"tasacion":{"description":"Tasación de inmuebles por capitalización de rentas, comparables y costo de reposición","disponible_desde":"FREE","nota":"Todos los tiers tienen 1 tasación gratuita/mes. El motor corre en worker Railway (async). Usar tasacion:estado para obtener resultado.","subcommands":{"cuota":{"description":"Ver cuota gratuita y créditos pagados disponibles","tier_minimo":"FREE"},"iniciar":{"description":"Iniciar una tasación. Retorna tasacion_id. Hacer polling con tasacion:estado.","tier_minimo":"FREE","args":{"input_data":{"comuna":"string (requerido)","tipo_propiedad":"string (requerido) — departamento|casa|oficina|local_comercial|bodega|terreno|parcela","superficie_construida":"number (m²)","dormitorios":"number","banos":"number","anio_construccion":"number","estado_conservacion":"excelente|bueno|regular|malo","arriendo_estimado":"number (CLP/mes)","tiene_estacionamiento":"boolean","tiene_bodega":"boolean","vista_especial":"mar|panoramica|montana|parque"}}},"estado":{"description":"Consultar estado y resultado de una tasación","tier_minimo":"FREE","args":{"id":"string (UUID tasacion_id)"},"polling_tip":"Verificar cada 5 segundos. Timeout recomendado 90 segundos.","statuses":["pendiente","procesando","completado","error"]},"historial":{"description":"Últimas tasaciones del usuario","tier_minimo":"FREE","args":{"limit":"number (max 50)"}},"packs":{"description":"Catálogo de packs de créditos de tasación","tier_minimo":"FREE"}}},"visit-orders":{"description":"Órdenes de visita recibidas por el broker o propietario","disponible_desde":"BASIC","subcommands":{"list":{"description":"Listar órdenes","tier_minimo":"BASIC","args":{"limit":"number","status":"pending|confirmed|cancelled|completed"}},"get":{"description":"Detalle de una orden","tier_minimo":"BASIC","args":{"id":"string"}},"update-status":{"description":"Cambiar estado de una orden","tier_minimo":"BASIC","args":{"id":"string","status":"pending|confirmed|cancelled|completed"}}}},"links":{"registro":"https://portalinmuebles.cl/auth/register","dashboard_cli":"https://portalinmuebles.cl/dashboard/cli","dashboard_tasacion":"https://portalinmuebles.cl/dashboard/tasacion","centro_ayuda":"https://portalinmuebles.cl/ayuda","discovery_cli":"https://portalinmuebles.cl/.well-known/ai-cli.json","discovery_tasacion":"https://portalinmuebles.cl/.well-known/ai-tasacion.json","tasacion_docs":"https://portalinmuebles.cl/api/tasacion","tasar_web":"https://portalinmuebles.cl/tasar"}}