{"openapi":"3.1.0","info":{"title":"Lince","description":"API REST de Lince, la alternativa libre y local a Dialogflow para crear chatbots en español, y para entrenar modelos de machine learning con tus tablas o tus imágenes.\n\n- **Conversación** (`/detect`, `:detectIntent`): no necesita el token de administración; si el agente tiene clave de API hay que enviarla en la cabecera `X-Api-Key`.\n- **Predicción** (`/api/ml/<dirección>/predict`): el modelo publicado de un proyecto de machine learning; tampoco necesita el token, solo la clave de API del proyecto (`X-Api-Key`) si la tiene.\n- **Administración** (todo lo demás): si el servidor se arrancó con `AGENTE_ADMIN_TOKEN`, cada petición debe llevar `Authorization: Bearer <token>`.\n- Los errores devuelven `{\"detail\": \"mensaje\"}` con el código HTTP correspondiente.","version":"0.13.1"},"paths":{"/api/info":{"get":{"tags":["general"],"summary":"Información del servidor","description":"Versión, idiomas, entidades del sistema, si hace falta token de administración, si el servidor\ntiene cuentas de usuario (`accounts`: cada uno entra con su usuario y ve solo sus agentes) y los\nagentes de ejemplo tal como vienen (`examples`, para crear una copia con `template`).\n\n`restartNeeded` es `true` si el código del servidor ha cambiado desde que se arrancó\n(hay que reiniciarlo para usar la versión nueva).","operationId":"info_api_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth-check":{"get":{"tags":["general"],"summary":"Comprobar el token de administración","description":"Devuelve `{\"ok\": true}` si el token es correcto (o si el servidor no pide token).","operationId":"auth_check_api_auth_check_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"tokenAdmin":[]}]}},"/api/accounts":{"post":{"tags":["cuentas"],"summary":"Crear una cuenta","description":"Crea el usuario y su espacio privado, con los agentes de ejemplo. Devuelve la llave del\nespacio (`spaceKey`): mándala en la cabecera `X-Space-Key` en las demás peticiones.\n\nSi la petición lleva la llave de un espacio sin cuenta (`X-Space-Key`, de quien entró sin\ncuenta), la cuenta se queda con ese espacio: no se pierde nada de lo que tenía.","operationId":"register_api_accounts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credentials"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest":{"post":{"tags":["cuentas"],"summary":"Entrar sin cuenta","description":"Un espacio sin usuario ni contraseña, con los agentes de ejemplo. Su llave (`spaceKey`) se\nqueda en ese navegador: desde otro no se puede abrir (para llevarse un agente, se exporta y se\nimporta). Si luego se crea una cuenta con esa llave, la cuenta se queda con el espacio.","operationId":"guest_api_guest_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/login":{"post":{"tags":["cuentas"],"summary":"Entrar","description":"Comprueba el usuario y la contraseña y devuelve la llave de su espacio (`spaceKey`). Tras\nvarios intentos fallidos seguidos, ese usuario queda bloqueado unos minutos.","operationId":"login_api_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credentials"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account":{"get":{"tags":["cuentas"],"summary":"Mi cuenta","description":"El usuario dueño de la llave y cuántos agentes tiene (sirve para comprobar que la llave vale).\n`guest` es `true` si es un espacio sin cuenta.","operationId":"account_api_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"tokenAdmin":[]},{"cuenta":[]}]}},"/api/account/password":{"post":{"tags":["cuentas"],"summary":"Cambiar la contraseña","description":"Hace falta la contraseña actual. La llave del espacio no cambia.","operationId":"change_password_api_account_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChange"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"tokenAdmin":[]},{"cuenta":[]}]}},"/api/agents":{"get":{"tags":["agentes"],"summary":"Listar agentes","description":"Resumen de cada agente: nombre, idioma, cuántas intenciones, entidades y frases tiene, si es\nuno de los agentes de ejemplo (`example`), que la consola enseña aparte, y su dirección pública\n(`publicId`), la del widget y el chat.","operationId":"list_agents_api_agents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"tokenAdmin":[]},{"cuenta":[]}]},"post":{"tags":["agentes"],"summary":"Crear un agente","description":"Crea un agente vacío (bienvenida y fallback) o una copia: de otro agente tuyo o de uno de\nejemplo (`copyOf`, con todo lo que tenga) o de un ejemplo tal como viene (`template`: pizzeria\nu hotel). La copia es un agente propio: sale en «Tus agentes».","operationId":"create_agent_api_agents_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgent"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"tokenAdmin":[]},{"cuenta":[]}]}},"/api/agents/import":{"post":{"tags":["agentes"],"summary":"Importar un agente","description":"Envía el fichero en el cuerpo de la petición: el JSON exportado desde aquí o el ZIP que exporta\nDialogflow ES (Configuración del agente → Exportar e importar).","operationId":"import_agent_api_agents_import_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"name","in":"query","required":false,"schema":{"type":"string","description":"Nombre nuevo (opcional)","default":"","title":"Name"},"description":"Nombre nuevo (opcional)"},{"name":"filename","in":"query","required":false,"schema":{"type":"string","description":"Nombre del fichero, para saber si es .json o .zip","default":"","title":"Filename"},"description":"Nombre del fichero, para saber si es .json o .zip"}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"requestBody":{"required":true,"description":"El fichero tal cual","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}}},"/api/agents/{agent_id}":{"get":{"tags":["agentes"],"summary":"Leer un agente","description":"El agente completo: ajustes, intenciones (con frases, parámetros y respuestas) y entidades.","operationId":"read_agent_api_agents__agent_id__get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["agentes"],"summary":"Cambiar nombre, idioma o ajustes","description":"Cambia `name`, `description`, `language`, `timezone` y las claves de `settings` que se envíen\n(umbral, corrección ortográfica, reglas de normalización, webhook, clave de API…).","operationId":"update_agent_api_agents__agent_id__patch","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"Pizzería Luigi","description":"Pedidos y reservas","settings":{"threshold":0.35}}],"title":"Changes"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agentes"],"summary":"Borrar un agente","description":"Borra el agente con sus intenciones, entidades y conversaciones (y su enlace, si se compartía).\nNo se puede deshacer.","operationId":"delete_agent_api_agents__agent_id__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/export":{"get":{"tags":["agentes"],"summary":"Exportar a JSON","description":"Descarga el agente como fichero JSON (se puede volver a importar).","operationId":"export_agent_api_agents__agent_id__export_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/duplicate":{"post":{"tags":["agentes"],"summary":"Duplicar un agente","description":"Crea una copia con el nombre «(copia)». La copia de un ejemplo ya es un agente propio.","operationId":"duplicate_agent_api_agents__agent_id__duplicate_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/train":{"post":{"tags":["entrenamiento"],"summary":"Reentrenar el modelo","description":"Entrena de nuevo (normalmente no hace falta: se reentrena solo al cambiar el agente) y devuelve el informe.","operationId":"train_api_agents__agent_id__train_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/model":{"get":{"tags":["entrenamiento"],"summary":"Lo que ha aprendido el modelo","description":"Informe del entrenamiento, rasgos con más peso por intención, mapa de frases y último examen.","operationId":"model_info_api_agents__agent_id__model_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"k","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Rasgos por intención","default":8,"title":"K"},"description":"Rasgos por intención"},{"name":"chars","in":"query","required":false,"schema":{"type":"boolean","description":"Incluir los trozos de letras","default":false,"title":"Chars"},"description":"Incluir los trozos de letras"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/explain":{"post":{"tags":["entrenamiento"],"summary":"Explicar una frase paso a paso","description":"Recorrido completo de una frase por dentro del modelo: tokens, entidades, rasgos, probabilidades\ny la aportación de cada rasgo a la decisión.","operationId":"explain_api_agents__agent_id__explain_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/evaluate":{"post":{"tags":["entrenamiento"],"summary":"Examen (validación cruzada)","description":"Acierto con frases que el modelo no ha visto, por intención, con la matriz de confusión y los fallos.","operationId":"evaluate_api_agents__agent_id__evaluate_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EvaluateRequest"},{"type":"null"}],"title":"Req"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/status":{"get":{"tags":["entrenamiento"],"summary":"Estado del modelo","description":"Si el modelo está al día con la última versión del agente, cuándo se entrenó y cuánto tardó.","operationId":"status_api_agents__agent_id__status_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/validate":{"get":{"tags":["entrenamiento"],"summary":"Avisos de calidad","description":"Errores y consejos: frases repetidas, intenciones con pocas frases, contextos que nadie activa…","operationId":"validate_agent_api_agents__agent_id__validate_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/intents":{"post":{"tags":["intenciones"],"summary":"Crear una intención","description":"Las frases pueden ir como texto o como `{\"text\", \"annotations\"}`; lo que falte se completa solo.","operationId":"create_intent_api_agents__agent_id__intents_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"info.envios","trainingPhrases":["cuánto tarda el envío","cuándo llega mi paquete","hacéis envíos a Canarias"],"responses":[{"type":"text","variants":["Enviamos en 24-48 horas."]}]}],"title":"Intent"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/intents/{intent_id}":{"put":{"tags":["intenciones"],"summary":"Guardar una intención","description":"Sustituye la intención entera por la que se envía.","operationId":"update_intent_api_agents__agent_id__intents__intent_id__put","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"info.envios","trainingPhrases":["cuánto tarda el envío","cuándo llega mi paquete","hacéis envíos a Canarias"],"responses":[{"type":"text","variants":["Enviamos en 24-48 horas."]}]}],"title":"Intent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["intenciones"],"summary":"Borrar una intención","operationId":"delete_intent_api_agents__agent_id__intents__intent_id__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/intents/{intent_id}/phrases":{"post":{"tags":["intenciones"],"summary":"Añadir una frase de entrenamiento","description":"Si la frase estaba en otra intención, se mueve a esta. Sin `annotations`, las entidades se marcan solas.","operationId":"create_phrase_api_agents__agent_id__intents__intent_id__phrases_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhraseRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/entities":{"post":{"tags":["entidades"],"summary":"Crear una entidad","description":"`kind`: map (valores con sinónimos), list (solo valores) o regex (expresiones regulares).","operationId":"create_entity_api_agents__agent_id__entities_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"tamano","kind":"map","fuzzy":true,"entries":[{"value":"familiar","synonyms":["familiar","grande","XL"]},{"value":"mediana","synonyms":["mediana","normal"]}]}],"title":"Entity"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/entities/{entity_id}":{"put":{"tags":["entidades"],"summary":"Guardar una entidad","description":"Sustituye la entidad. Si cambia el nombre, se actualizan también las intenciones que la usan.","operationId":"update_entity_api_agents__agent_id__entities__entity_id__put","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"tamano","kind":"map","fuzzy":true,"entries":[{"value":"familiar","synonyms":["familiar","grande","XL"]},{"value":"mediana","synonyms":["mediana","normal"]}]}],"title":"Entity"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["entidades"],"summary":"Borrar una entidad","operationId":"delete_entity_api_agents__agent_id__entities__entity_id__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/entities/{entity_id}/synonyms":{"post":{"tags":["entidades"],"summary":"Añadir un sinónimo","operationId":"add_synonym_api_agents__agent_id__entities__entity_id__synonyms_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SynonymRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/annotate":{"post":{"tags":["nlu"],"summary":"Anotar entidades automáticamente","description":"Propone qué partes de la frase son entidades y con qué parámetro (como al escribir una frase en la consola).","operationId":"annotate_api_agents__agent_id__annotate_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnotateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/analyze":{"post":{"tags":["nlu"],"summary":"Analizar una frase","description":"Tokens, entidades, intenciones candidatas con su confianza, parámetros y frases parecidas.\nNo crea conversación ni guarda nada.","operationId":"analyze_api_agents__agent_id__analyze_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/detect":{"post":{"tags":["conversación"],"summary":"Conversar (enviar un mensaje)","description":"Un turno de la conversación. Envía `text` (o `event`) con el mismo `sessionId` en todos los\nmensajes de una conversación: así se recuerdan los contextos y las preguntas pendientes. En un\nservidor con cuentas, el agente va con su dirección pública (`publicId`, «<espacio>.<agente>»).","operationId":"detect_api_agents__agent_id__detect_post","security":[{"claveApi":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectRequest"}}}},"responses":{"200":{"description":"Lo que ha entendido y lo que responde","content":{"application/json":{"schema":{},"example":{"sessionId":"usuario-123","queryText":"quiero una pizza barbacoa familiar","intent":{"id":"i019","name":"pedido.pizza","isFallback":false},"confidence":0.97,"action":"pedido.crear","parameters":{"cantidad":1,"pizza":"barbacoa","tamano":"familiar"},"allRequiredParamsPresent":true,"fulfillmentText":"¡Marchando! 1 × barbacoa (familiar). ¿A domicilio o para recoger?","messages":[{"type":"text","text":"¡Marchando! 1 × barbacoa (familiar). ¿A domicilio o para recoger?"},{"type":"quickReplies","items":["A domicilio","Para recoger"]}],"outputContexts":[{"name":"pedido","lifespan":5,"parameters":{"pizza":"barbacoa"}}],"match":"ml","endConversation":false}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/sessions/{session_id}/reset":{"post":{"tags":["conversación"],"summary":"Empezar la conversación de cero","description":"Olvida los contextos y las preguntas pendientes de esa sesión.","operationId":"reset_session_api_agents__agent_id__sessions__session_id__reset_post","security":[{"claveApi":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/public":{"get":{"tags":["conversación"],"summary":"Datos públicos del agente","description":"Datos mínimos para el widget de chat: nombre, idioma y si hace falta clave.","operationId":"public_info_api_agents__agent_id__public_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/logs":{"get":{"tags":["entrenamiento"],"summary":"Mensajes para revisar","description":"Los mensajes reales de los usuarios, para aprobarlos o corregirlos (pantalla Revisión).","operationId":"list_logs_api_agents__agent_id__logs_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"review","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"pending, approved, corrected, ignored o vacío para todos","default":"pending","title":"Review"},"description":"pending, approved, corrected, ignored o vacío para todos"},{"name":"fallback","in":"query","required":false,"schema":{"type":"boolean","description":"Solo los no entendidos","default":false,"title":"Fallback"},"description":"Solo los no entendidos"},{"name":"lowConfidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Solo los que tienen menos confianza que esta","title":"Lowconfidence"},"description":"Solo los que tienen menos confianza que esta"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Buscar texto","default":"","title":"Q"},"description":"Buscar texto"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/logs/{log_id}/review":{"post":{"tags":["entrenamiento"],"summary":"Revisar un mensaje","description":"Aprobar o asignar un mensaje lo convierte en frase de entrenamiento; también se puede ignorar.","operationId":"review_log_api_agents__agent_id__logs__log_id__review_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"log_id","in":"path","required":true,"schema":{"type":"integer","title":"Log Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/logs/clear":{"post":{"tags":["entrenamiento"],"summary":"Vaciar el registro de mensajes","description":"Borra todos los mensajes y conversaciones guardados del agente.","operationId":"clear_logs_api_agents__agent_id__logs_clear_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/conversations":{"get":{"tags":["historial"],"summary":"Listar conversaciones","operationId":"conversations_api_agents__agent_id__conversations_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/conversations/{session_id}":{"get":{"tags":["historial"],"summary":"Leer una conversación","description":"Todos los turnos de una conversación, con lo que se entendió en cada uno.","operationId":"conversation_api_agents__agent_id__conversations__session_id__get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agents/{agent_id}/stats":{"get":{"tags":["historial"],"summary":"Estadísticas de uso","description":"Mensajes, conversaciones, no entendidos, intenciones más usadas y actividad por día.","operationId":"stats_api_agents__agent_id__stats_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Días hacia atrás","default":30,"title":"Days"},"description":"Días hacia atrás"},{"name":"tz","in":"query","required":false,"schema":{"type":"integer","maximum":900,"minimum":-900,"description":"Minutos de diferencia con UTC (getTimezoneOffset del navegador)","default":0,"title":"Tz"},"description":"Minutos de diferencia con UTC (getTimezoneOffset del navegador)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/system-entities":{"get":{"tags":["general"],"summary":"Entidades del sistema","description":"Las entidades @sys.* que reconoce cualquier agente sin configurar nada.","operationId":"system_entities_api_system_entities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/agents/{agent_id}/share":{"get":{"tags":["compartir"],"summary":"Ver si se comparte","description":"El código del enlace con el que se comparte el agente (`code`), o `null` si no se comparte.","operationId":"share_status_api_agents__agent_id__share_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["compartir"],"summary":"Compartir un agente","description":"Guarda una copia del agente (sin clave de API ni webhook) y devuelve su código: quien abra\n`/#/shared/<código>` puede guardarla en su cuenta o descargarla. Volver a compartir actualiza la\ncopia sin cambiar el enlace.","operationId":"share_api_agents__agent_id__share_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compartir"],"summary":"Dejar de compartir","description":"Borra la copia compartida: el enlace deja de funcionar (las copias que ya guardó la gente se quedan).","operationId":"unshare_api_agents__agent_id__share_delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shared/{code}":{"get":{"tags":["compartir"],"summary":"Ver un agente compartido","description":"Resumen de la copia compartida: nombre, descripción, cuántas intenciones, entidades y frases\ntiene y el nombre de sus intenciones. No hace falta cuenta.","operationId":"shared_info_api_shared__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shared/{code}/download":{"get":{"tags":["compartir"],"summary":"Descargar un agente compartido","description":"El agente en JSON, para importarlo en una instalación local (Agentes → Importar).","operationId":"shared_download_api_shared__code__download_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shared/{code}/save":{"post":{"tags":["compartir"],"summary":"Guardar un agente compartido en mi cuenta","description":"Guarda una copia en tu cuenta. Es tuya: lo que cambies no afecta al original ni al revés.","operationId":"shared_save_api_shared__code__save_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/projects/{agent_id}/agent/sessions/{session_id}:detectIntent":{"post":{"tags":["compatibilidad Dialogflow"],"summary":"detectIntent (Dialogflow ES v2)","description":"Mismo formato que detectIntent de Dialogflow ES v2.","operationId":"df_detect_v2_projects__agent_id__agent_sessions__session_id__detectIntent_post","security":[{"claveApi":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"queryInput":{"text":{"text":"hola","languageCode":"es"}}}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/info":{"get":{"tags":["ml · proyectos"],"summary":"Algoritmos, métricas y ejemplos","description":"Lo que necesita el formulario de entrenar: los algoritmos de cada tarea con sus ajustes (y qué hace cada\nuno), los candidatos del modo automático, las métricas, los proyectos de ejemplo y los límites.","operationId":"ml_info_api_ml_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"tokenAdmin":[]}]}},"/api/ml/projects":{"get":{"tags":["ml · proyectos"],"summary":"Listar proyectos","description":"Resumen de cada proyecto: tipo, datos, mejor modelo y modelo publicado.","operationId":"list_projects_api_ml_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"tokenAdmin":[]},{"cuenta":[]}]},"post":{"tags":["ml · proyectos"],"summary":"Crear un proyecto","description":"Un proyecto vacío (`kind`: table o images) o con los datos de un ejemplo (`example`).","operationId":"create_project_api_ml_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProject"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"tokenAdmin":[]},{"cuenta":[]}]}},"/api/ml/projects/{pid}":{"get":{"tags":["ml · proyectos"],"summary":"Leer un proyecto","description":"El proyecto con el perfil de cada columna (tabla), sus entrenamientos y sus modelos.","operationId":"read_project_api_ml_projects__pid__get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["ml · proyectos"],"summary":"Cambiar nombre, tipos o clave","description":"`name`, `description`, `types` (el tipo de alguna columna: number, category, date o text) y `apiKey`\n(`\"new\"` crea una clave nueva, `\"\"` la quita).","operationId":"update_project_api_ml_projects__pid__patch","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"Pingüinos de la Antártida","types":{"año":"category"}}],"title":"Changes"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ml · proyectos"],"summary":"Borrar un proyecto","description":"Borra el proyecto con sus datos, entrenamientos y modelos.","operationId":"delete_project_api_ml_projects__pid__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/data":{"post":{"tags":["ml · datos"],"summary":"Subir la tabla (CSV)","description":"El cuerpo de la petición es el CSV tal cual (separado por comas, punto y coma o tabuladores; UTF-8 o\nel formato de Excel). Sustituye la tabla anterior y devuelve el perfil de cada columna.","operationId":"upload_data_api_ml_projects__pid__data_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"filename","in":"query","required":false,"schema":{"type":"string","description":"Nombre del fichero","default":"","title":"Filename"},"description":"Nombre del fichero"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/rows":{"get":{"tags":["ml · datos"],"summary":"Ver filas de la tabla","description":"Un trozo de la tabla tal como se guardó, para la vista previa.","operationId":"rows_api_ml_projects__pid__rows_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/data.csv":{"get":{"tags":["ml · datos"],"summary":"Descargar la tabla","description":"La tabla en CSV (comas, punto decimal y fechas AAAA-MM-DD).","operationId":"download_csv_api_ml_projects__pid__data_csv_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/images":{"get":{"tags":["ml · datos"],"summary":"Ver las imágenes","description":"Las clases con sus imágenes (miniaturas PNG en data: URL).","operationId":"list_images_api_ml_projects__pid__images_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ml · datos"],"summary":"Añadir imágenes a una clase","description":"Imágenes ya reducidas a 64 × 64 (la consola las recorta y reduce en el navegador).","operationId":"add_images_api_ml_projects__pid__images_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagesRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/images/{iid}":{"delete":{"tags":["ml · datos"],"summary":"Borrar una imagen","operationId":"delete_image_api_ml_projects__pid__images__iid__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/classes/{label}":{"patch":{"tags":["ml · datos"],"summary":"Renombrar una clase","operationId":"rename_class_api_ml_projects__pid__classes__label__patch","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"label","in":"path","required":true,"schema":{"type":"string","title":"Label"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"name":"gato"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ml · datos"],"summary":"Borrar una clase con sus imágenes","operationId":"delete_class_api_ml_projects__pid__classes__label__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"label","in":"path","required":true,"schema":{"type":"string","title":"Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/images.zip":{"get":{"tags":["ml · datos"],"summary":"Descargar las imágenes","description":"Un ZIP con una carpeta por clase y las imágenes en PNG (lo que espera el script de PyTorch).","operationId":"images_zip_api_ml_projects__pid__images_zip_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/jobs":{"post":{"tags":["ml · entrenamiento"],"summary":"Entrenar","description":"Lanza un entrenamiento en segundo plano y devuelve su id. Consulta cómo va con GET …/jobs/{id}.","operationId":"start_job_api_ml_projects__pid__jobs_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobConfig"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["ml · entrenamiento"],"summary":"Listar entrenamientos","operationId":"list_jobs_api_ml_projects__pid__jobs_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/jobs/{jid}":{"get":{"tags":["ml · entrenamiento"],"summary":"Cómo va un entrenamiento","description":"Estado (queued, running, done, failed, cancelled), pasos, registro, avance (0 a 1) y, al terminar, la\ntabla de algoritmos probados con su nota (`leaderboard`) y el mejor (`best`).","operationId":"read_job_api_ml_projects__pid__jobs__jid__get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"jid","in":"path","required":true,"schema":{"type":"string","title":"Jid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ml · entrenamiento"],"summary":"Borrar un entrenamiento y sus modelos","operationId":"delete_job_api_ml_projects__pid__jobs__jid__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"jid","in":"path","required":true,"schema":{"type":"string","title":"Jid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/jobs/{jid}/cancel":{"post":{"tags":["ml · entrenamiento"],"summary":"Cancelar un entrenamiento","operationId":"cancel_job_api_ml_projects__pid__jobs__jid__cancel_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"jid","in":"path","required":true,"schema":{"type":"string","title":"Jid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/models":{"get":{"tags":["ml · modelos"],"summary":"Listar modelos","operationId":"list_models_api_ml_projects__pid__models_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/models/{mid}":{"get":{"tags":["ml · modelos"],"summary":"Leer un modelo","description":"El informe del modelo: métricas (en el examen y con sus propias filas), validación cruzada, gráficos,\nimportancia de las columnas, cómo se prepararon los datos y lo que ha aprendido.","operationId":"read_model_api_ml_projects__pid__models__mid__get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ml · modelos"],"summary":"Borrar un modelo","operationId":"delete_model_api_ml_projects__pid__models__mid__delete","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/models/{mid}/predict":{"post":{"tags":["ml · modelos"],"summary":"Predecir con un modelo","description":"Predicciones de cualquier modelo del proyecto (publicado o no), con su explicación si `explain`.","operationId":"predict_model_api_ml_projects__pid__models__mid__predict_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","title":"Mid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/models/{mid}/batch":{"post":{"tags":["ml · modelos"],"summary":"Predecir un CSV entero (por lotes)","description":"El cuerpo es un CSV con las columnas del modelo (las que falten se rellenan como los vacíos; las que\nsobren se dejan tal cual). Devuelve `csv`: el mismo fichero con la predicción al final (y la seguridad, al\nclasificar), con su separador y su coma o punto decimal; `summary`: cuántas de cada clase o la media (y, si\nel fichero trae la columna que se predice, cuánto acierta); y `preview`: las primeras filas.","operationId":"batch_model_api_ml_projects__pid__models__mid__batch_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/models/{mid}/code":{"get":{"tags":["ml · modelos"],"summary":"Script equivalente en Python","description":"El script que hace lo mismo con scikit-learn (tablas) o PyTorch (imágenes): para verlo como código o\nllevarlo a Azure ML como «script de entrenamiento personalizado».","operationId":"model_code_api_ml_projects__pid__models__mid__code_get","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"mid","in":"path","required":true,"schema":{"type":"string","title":"Mid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/projects/{pid}/publish":{"post":{"tags":["ml · modelos"],"summary":"Publicar un modelo","description":"El modelo que responde en la dirección pública del proyecto (POST /api/ml/<dirección>/predict). `modelId`\nvacío o `null` deja de publicar.","operationId":"publish_api_ml_projects__pid__publish_post","security":[{"tokenAdmin":[]},{"cuenta":[]}],"parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"examples":[{"modelId":"m3f9a1c0b7d"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/{ref}/predict":{"post":{"tags":["ml · predicción"],"summary":"Predecir con el modelo publicado","description":"Lo que llama tu web o tu aplicación. `ref` es la dirección pública del proyecto (en un servidor con\ncuentas, «<espacio>.<proyecto>»: está en la página API del proyecto). Si el proyecto tiene clave de API,\nenvíala en la cabecera `X-Api-Key`.","operationId":"public_predict_api_ml__ref__predict_post","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PredictRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/{ref}/batch":{"post":{"tags":["ml · predicción"],"summary":"Predecir un CSV entero con el modelo publicado","description":"Como un punto de conexión por lotes de Azure: el cuerpo es un CSV y devuelve el mismo CSV con la predicción\nde cada fila (en `csv`), un resumen y las primeras filas. Con la clave de API en `X-Api-Key` si el proyecto\nla tiene.","operationId":"public_batch_api_ml__ref__batch_post","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ml/{ref}/schema":{"get":{"tags":["ml · predicción"],"summary":"Qué espera el modelo publicado","description":"Las columnas que hay que enviar (con su tipo y, en las categorías, sus valores) o el tamaño de las imágenes.","operationId":"public_schema_api_ml__ref__schema_get","parameters":[{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnalyzeRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Frase a analizar"},"contexts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Contexts","description":"Contextos que se consideran activos"}},"type":"object","required":["text"],"title":"AnalyzeRequest","examples":[{"text":"reserva para 3 el lunes a las 8"}]},"AnnotateRequest":{"properties":{"text":{"type":"string","title":"Text"},"intentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intentid","description":"Intención a la que va la frase (reutiliza sus parámetros)"}},"type":"object","required":["text"],"title":"AnnotateRequest","examples":[{"text":"una hawaiana grande"}]},"CreateAgent":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Nombre visible del agente"},"language":{"type":"string","title":"Language","description":"Idioma: es o en (en una copia, el del agente copiado)","default":"es"},"description":{"type":"string","title":"Description","description":"Descripción (en una copia, si va vacía se queda la del agente copiado)","default":""},"timezone":{"type":"string","title":"Timezone","description":"Zona horaria para «mañana», «el lunes»…","default":"Europe/Madrid"},"copyOf":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Copyof","description":"Id de uno de tus agentes (o de uno de ejemplo) del que hacer una copia con este nombre. Si se da, no se mira `template`"},"template":{"type":"string","title":"Template","description":"blank (vacío), pizzeria u hotel: copia del ejemplo tal como viene, aunque ya no lo tengas en la lista (ver `examples` en /api/info)","default":"blank"}},"type":"object","required":["name"],"title":"CreateAgent","examples":[{"description":"Dudas sobre pedidos y envíos","language":"es","name":"Atención al cliente","template":"blank"},{"copyOf":"pizzeria","name":"Mi pizzería"}]},"CreateProject":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name","description":"Nombre del proyecto"},"kind":{"type":"string","title":"Kind","description":"table (datos en tabla, CSV) o images (imágenes por clases)","default":"table"},"description":{"type":"string","maxLength":300,"title":"Description","default":""},"example":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Example","description":"Empezar con los datos de un ejemplo: pinguinos, bicis o formas"}},"type":"object","required":["name"],"title":"CreateProject","examples":[{"example":"pinguinos","kind":"table","name":"Pingüinos"}]},"Credentials":{"properties":{"user":{"type":"string","title":"User","description":"Usuario: de 3 a 30 caracteres (letras sin tildes ni eñes, números, puntos o guiones)"},"password":{"type":"string","title":"Password","description":"Contraseña: al menos 6 caracteres"}},"type":"object","required":["user","password"],"title":"Credentials","examples":[{"password":"una-contraseña-larga","user":"lucia.garcia"}]},"DetectRequest":{"properties":{"sessionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessionid","description":"Identificador de la conversación (uno por usuario o pestaña)"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"Lo que ha escrito el usuario"},"event":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event","description":"Nombre de un evento (p. ej. WELCOME) en lugar de texto"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters","description":"Parámetros que acompañan al evento"},"contexts":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Contexts","description":"Contextos que se activan antes de entender el mensaje"},"payload":{"title":"Payload"},"source":{"type":"string","title":"Source","description":"Origen, para el historial (api, widget…)","default":"api"},"debug":{"type":"boolean","title":"Debug","description":"Incluir el análisis completo en la respuesta","default":false}},"type":"object","title":"DetectRequest","examples":[{"sessionId":"usuario-123","text":"quiero una pizza barbacoa familiar"},{"event":"WELCOME","sessionId":"usuario-123"}]},"EvaluateRequest":{"properties":{"folds":{"type":"integer","maximum":10.0,"minimum":2.0,"title":"Folds","description":"Rondas de la validación cruzada","default":5}},"type":"object","title":"EvaluateRequest","examples":[{"folds":5}]},"ExplainRequest":{"properties":{"text":{"type":"string","title":"Text"},"contexts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Contexts"}},"type":"object","required":["text"],"title":"ExplainRequest","examples":[{"text":"quiero reservar mesa para dos"}]},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImagesRequest":{"properties":{"label":{"type":"string","maxLength":40,"minLength":1,"title":"Label","description":"La clase de las imágenes"},"images":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Images","description":"Píxeles RGB de 64 × 64 en base64"}},"type":"object","required":["label","images"],"title":"ImagesRequest"},"JobConfig":{"properties":{"task":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task","description":"classification, regression o clustering (en imágenes no hace falta)"},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target","description":"La columna que se predice (no en agrupación)"},"features":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Features","description":"Las columnas con las que aprender (por defecto, todas las útiles)"},"mode":{"type":"string","title":"Mode","description":"auto (prueba varios algoritmos y elige) o custom (el que elijas)","default":"auto"},"algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Algorithm","description":"En modo custom: tree, forest, knn, logistic, linear, bayes, kmeans, cnn…"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params","description":"Ajustes del algoritmo (ver /api/ml/info)"},"metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric","description":"Métrica para comparar: accuracy, balanced_accuracy, f1_macro, r2, rmse, mae"},"testSize":{"type":"number","maximum":0.5,"minimum":0.1,"title":"Testsize","description":"Parte de las filas que se esconde para el examen final","default":0.2},"folds":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"Folds","description":"Rondas de la validación cruzada (0 = sin validación cruzada)","default":5},"seed":{"type":"integer","title":"Seed","description":"Semilla: con la misma, el entrenamiento sale siempre igual","default":42},"compare":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compare","description":"En agrupación: columna con la que comparar los grupos (no se usa para aprender)"}},"type":"object","title":"JobConfig","examples":[{"mode":"auto","target":"especie","task":"classification"}]},"PasswordChange":{"properties":{"current":{"type":"string","title":"Current","description":"Contraseña actual"},"new":{"type":"string","title":"New","description":"Contraseña nueva (al menos 6 caracteres)"}},"type":"object","required":["current","new"],"title":"PasswordChange","examples":[{"current":"la-de-ahora","new":"otra-contraseña-larga"}]},"PhraseRequest":{"properties":{"text":{"type":"string","title":"Text"},"annotations":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Annotations","description":"Entidades marcadas [{start, end, entity, param}]; si se omite se anotan solas"}},"type":"object","required":["text"],"title":"PhraseRequest","examples":[{"text":"me pones una margarita familiar"}]},"PredictRequest":{"properties":{"rows":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Rows","description":"Filas con el valor de cada columna (proyectos de tabla)"},"images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Images","description":"Imágenes de 64 × 64 en color: los píxeles RGB en base64 (12288 bytes cada una)"},"explain":{"type":"boolean","title":"Explain","description":"Incluir la explicación de cada predicción","default":false}},"type":"object","title":"PredictRequest","examples":[{"rows":[{"aleta_mm":217,"isla":"Biscoe","peso_g":5200,"pico_alto_mm":15,"pico_largo_mm":47.5,"sexo":"macho"}]}]},"ReviewRequest":{"properties":{"action":{"type":"string","title":"Action","description":"approve (aprobar), assign (asignar a otra intención), ignore o reopen"},"intentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intentid","description":"Intención correcta (con assign)"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"Texto corregido (opcional)"},"annotations":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Annotations"}},"type":"object","required":["action"],"title":"ReviewRequest","examples":[{"action":"approve"},{"action":"assign","intentId":"i019"}]},"SynonymRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Valor de referencia (se crea si no existe)"},"synonym":{"type":"string","title":"Synonym","description":"Sinónimo que se añade"}},"type":"object","required":["value","synonym"],"title":"SynonymRequest","examples":[{"synonym":"barbiquiu","value":"barbacoa"}]},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"tokenAdmin":{"type":"http","description":"Token de administración (variable AGENTE_ADMIN_TOKEN). Solo hace falta si el servidor se arrancó con ella.","scheme":"bearer"},"cuenta":{"type":"apiKey","description":"Llave de tu espacio: la devuelven «Entrar» y «Crear una cuenta» y la consola la guarda en el navegador. Solo en servidores con cuentas.","in":"header","name":"X-Space-Key"},"claveApi":{"type":"apiKey","description":"Clave de API del agente (Ajustes → Seguridad). Solo si el agente la tiene.","in":"header","name":"X-Api-Key"}}},"tags":[{"name":"conversación","description":"Hablar con un agente: lo que usan el widget, tu web o tu aplicación. Si el agente tiene clave de API, envíala en la cabecera X-Api-Key."},{"name":"agentes","description":"Crear, leer, importar, exportar, duplicar y borrar agentes."},{"name":"intenciones","description":"Lo que quiere el usuario: frases de entrenamiento, parámetros y respuestas."},{"name":"entidades","description":"Tipos de dato que se reconocen dentro de las frases, con sus valores y sinónimos."},{"name":"nlu","description":"Cómo entiende el motor una frase, sin crear conversación ni guardar nada."},{"name":"entrenamiento","description":"El modelo por dentro, el examen y la revisión de los mensajes reales."},{"name":"historial","description":"Conversaciones guardadas y estadísticas de uso."},{"name":"compatibilidad Dialogflow","description":"La misma petición y la misma respuesta que `detectIntent` de la API v2 de Dialogflow ES: tu aplicación puede apuntar aquí sin cambios."},{"name":"general","description":"Información del servidor."},{"name":"ml · proyectos","description":"Machine learning: un proyecto tiene unos datos (una tabla o imágenes), sus entrenamientos y sus modelos."},{"name":"ml · datos","description":"Subir la tabla (CSV) o las imágenes de cada clase, verlas y elegir el tipo de cada columna."},{"name":"ml · entrenamiento","description":"Lanzar un entrenamiento (automático o personalizado) y seguirlo paso a paso."},{"name":"ml · modelos","description":"Los modelos entrenados: cómo han salido, qué han aprendido, su script y predicciones."},{"name":"ml · predicción","description":"El modelo publicado de un proyecto, desde tu web o tu aplicación (como un punto de conexión de Azure). Si el proyecto tiene clave de API, envíala en X-Api-Key."},{"name":"cuentas","description":"Cada persona entra con su usuario y su contraseña y ve solo sus agentes. Al entrar se recibe la llave de su espacio, que va en la cabecera X-Space-Key."},{"name":"compartir","description":"Un agente se comparte con un enlace: quien lo abre puede guardar una copia en su cuenta o descargarla para una instalación local."}]}