{
  "openapi": "3.0.4",
  "info": {
    "title": "AGOS API",
    "version": "1.7.4"
  },
  "paths": {
    "/api/admin/agents": {
      "get": {
        "tags": [
          "Admin"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAgentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAgentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAgentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAgentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAgentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAgentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/model": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentModelRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentModelRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentModelRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/active": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentActiveRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentActiveRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentActiveRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/documents": {
      "post": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  },
                  "title": {
                    "type": "string"
                  },
                  "source": {
                    "type": "string"
                  },
                  "tags": {
                    "type": "string",
                    "default": ""
                  },
                  "metadataJson": {
                    "type": "string",
                    "default": "{}"
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                },
                "title": {
                  "style": "form"
                },
                "source": {
                  "style": "form"
                },
                "tags": {
                  "style": "form"
                },
                "metadataJson": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/knowledge": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/faqs": {
      "post": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFaqRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFaqRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFaqRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/faqs/{faqId}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "faqId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/documents/{jobId}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{id}/documents/{jobId}/file": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/audit-log": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: audit.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users/{id}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users/{id}/admin": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAdminRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAdminRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetAdminRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users/{id}/password": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users/{id}/plan": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePlanRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePlanRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangePlanRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users/{id}/active": {
      "put": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/users/{id}/quota": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: users.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/indices": {
      "get": {
        "tags": [
          "Admin"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: knowledge.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/metrics": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 7
            }
          },
          {
            "name": "agentKey",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tzOffsetMinutes",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: metrics.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/conversations/export": {
      "get": {
        "tags": [
          "Admin"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: metrics.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{agentId}/widget": {
      "get": {
        "tags": [
          "AgentWidgets"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "AgentWidgets"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWidgetRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWidgetRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWidgetRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.read, agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/agents/{agentId}/widget/rotate": {
      "post": {
        "tags": [
          "AgentWidgets"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: agents.read, agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/status": {
      "get": {
        "tags": [
          "Audio"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/AudioStatusResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AudioStatusResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/AudioStatusResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/transcribe": {
      "post": {
        "tags": [
          "Audio"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "audioFile"
                ],
                "type": "object",
                "properties": {
                  "audioFile": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "audioFile": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/voices": {
      "get": {
        "tags": [
          "Audio"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/config": {
      "get": {
        "tags": [
          "Audio"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Audio"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AudioConfigUpdate"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AudioConfigUpdate"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AudioConfigUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/voices/{voiceId}/install": {
      "post": {
        "tags": [
          "Audio"
        ],
        "parameters": [
          {
            "name": "voiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/voices/{voiceId}": {
      "delete": {
        "tags": [
          "Audio"
        ],
        "parameters": [
          {
            "name": "voiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/audio/speak": {
      "post": {
        "tags": [
          "Audio"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SpeakAudioRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SpeakAudioRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SpeakAudioRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/auth/register": {
      "post": {
        "tags": [
          "Auth"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/login": {
      "post": {
        "tags": [
          "Auth"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/logout": {
      "post": {
        "tags": [
          "Auth"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/branding": {
      "get": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProductBranding"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductBranding"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductBranding"
                }
              }
            }
          }
        }
      }
    },
    "/api/branding/assets/{fileName}": {
      "get": {
        "tags": [
          "Branding"
        ],
        "parameters": [
          {
            "name": "fileName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/admin/branding/assets": {
      "post": {
        "tags": [
          "Branding"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/BrandingAssetResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandingAssetResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrandingAssetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: branding.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/branding": {
      "put": {
        "tags": [
          "Branding"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateBrandingRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateBrandingRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateBrandingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ProductBranding"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductBranding"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductBranding"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: branding.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/security/guardrails": {
      "get": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: guardrails.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Branding"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: guardrails.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/security/guardrails/reset": {
      "post": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: guardrails.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/security/prompt-template": {
      "get": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: prompttemplate.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Branding"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: prompttemplate.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/security/prompt-template/reset": {
      "post": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: prompttemplate.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/security/agentic-prompt-template": {
      "get": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: prompttemplate.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Branding"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGuardrailsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: prompttemplate.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/security/agentic-prompt-template/reset": {
      "post": {
        "tags": [
          "Branding"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GuardrailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: prompttemplate.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/chat": {
      "post": {
        "tags": [
          "Chat"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChatRequestDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/chat/stream": {
      "post": {
        "tags": [
          "Chat"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChatRequestDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/chat/queue": {
      "get": {
        "tags": [
          "Chat"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/chat/{id}/feedback": {
      "post": {
        "tags": [
          "Chat"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "El usuario no tiene permiso."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/connectors": {
      "get": {
        "tags": [
          "Connectors"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: connectors.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Connectors"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateConnectorRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateConnectorRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateConnectorRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: connectors.read, connectors.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/connectors/{id}": {
      "put": {
        "tags": [
          "Connectors"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateConnectorRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateConnectorRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateConnectorRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: connectors.read, connectors.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/connectors/{id}/preview": {
      "get": {
        "tags": [
          "Connectors"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: connectors.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/connectors/{id}/sync": {
      "post": {
        "tags": [
          "Connectors"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: connectors.read, connectors.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/widget-licenses": {
      "get": {
        "tags": [
          "ExternalWidgetLicenses"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "ExternalWidgetLicenses"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateExternalWidgetLicenseRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateExternalWidgetLicenseRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateExternalWidgetLicenseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read, planlimits.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/widget-licenses/{id}": {
      "get": {
        "tags": [
          "ExternalWidgetLicenses"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "ExternalWidgetLicenses"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateExternalWidgetLicenseRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateExternalWidgetLicenseRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateExternalWidgetLicenseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read, planlimits.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/widget-licenses/{id}/usage": {
      "get": {
        "tags": [
          "ExternalWidgetLicenses"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "days",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseUsageResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseUsageResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseUsageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/widget-licenses/{id}/rotate": {
      "post": {
        "tags": [
          "ExternalWidgetLicenses"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
                }
              }
            }
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read, planlimits.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/license": {
      "get": {
        "tags": [
          "License"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: license.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "License"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyLicenseRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyLicenseRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyLicenseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: license.read, license.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "License"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: license.read, license.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/mcp-servers": {
      "get": {
        "tags": [
          "McpServers"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "McpServers"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read, mcp.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/mcp-servers/{id}": {
      "put": {
        "tags": [
          "McpServers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/McpServerRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read, mcp.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "McpServers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read, mcp.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/mcp-servers/{id}/active": {
      "put": {
        "tags": [
          "McpServers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveMcpServerRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveMcpServerRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveMcpServerRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read, mcp.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/mcp-servers/{id}/test": {
      "post": {
        "tags": [
          "McpServers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read, mcp.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/mcp-servers/agents/{agentId}": {
      "get": {
        "tags": [
          "McpServers"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "McpServers"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentMcpServersRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentMcpServersRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentMcpServersRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: mcp.read, agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/memory-profiles": {
      "get": {
        "tags": [
          "MemoryProfiles"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: memory.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "MemoryProfiles"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryProfileRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryProfileRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryProfileRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: memory.read, memory.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/memory-profiles/{id}": {
      "put": {
        "tags": [
          "MemoryProfiles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryProfileRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryProfileRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MemoryProfileRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: memory.read, memory.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "MemoryProfiles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: memory.read, memory.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/memory-profiles/agents/{agentId}": {
      "get": {
        "tags": [
          "MemoryProfiles"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: memory.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "MemoryProfiles"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentMemoryProfilesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentMemoryProfilesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentMemoryProfilesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: memory.read, agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/models": {
      "get": {
        "tags": [
          "ModelConfiguration"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/models/active": {
      "put": {
        "tags": [
          "ModelConfiguration"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveModelRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveModelRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveModelRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/models/pull": {
      "post": {
        "tags": [
          "ModelConfiguration"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PullModelRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PullModelRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PullModelRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/models/pull-status": {
      "get": {
        "tags": [
          "ModelConfiguration"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/model-providers": {
      "get": {
        "tags": [
          "ModelProviders"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "ModelProviders"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelProviderRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelProviderRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ModelProviderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/model-providers/{id}": {
      "put": {
        "tags": [
          "ModelProviders"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelProviderRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ModelProviderRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ModelProviderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "ModelProviders"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/model-providers/{id}/active": {
      "put": {
        "tags": [
          "ModelProviders"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveModelProviderRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveModelProviderRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetActiveModelProviderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/model-providers/{id}/test": {
      "post": {
        "tags": [
          "ModelProviders"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: models.read, models.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/plan-limits": {
      "get": {
        "tags": [
          "PlanLimits"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/plan-limits/{plan}": {
      "get": {
        "tags": [
          "PlanLimits"
        ],
        "parameters": [
          {
            "name": "plan",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "PlanLimits"
        ],
        "parameters": [
          {
            "name": "plan",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePlanLimitDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePlanLimitDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePlanLimitDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: planlimits.read, planlimits.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/public/widgets/{publicationId}": {
      "get": {
        "tags": [
          "PublicWidgets"
        ],
        "parameters": [
          {
            "name": "publicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/public/widgets/{publicationId}/validate-license": {
      "post": {
        "tags": [
          "PublicWidgets"
        ],
        "parameters": [
          {
            "name": "publicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateWidgetLicenseRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateWidgetLicenseRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateWidgetLicenseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/public/widgets/{publicationId}/chat": {
      "post": {
        "tags": [
          "PublicWidgets"
        ],
        "parameters": [
          {
            "name": "publicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicWidgetChatRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicWidgetChatRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PublicWidgetChatRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/public/widgets/{publicationId}/transcribe": {
      "post": {
        "tags": [
          "PublicWidgets"
        ],
        "parameters": [
          {
            "name": "publicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "audioFile",
                  "licenseId"
                ],
                "type": "object",
                "properties": {
                  "audioFile": {
                    "type": "string",
                    "format": "binary"
                  },
                  "licenseId": {
                    "type": "string"
                  }
                }
              },
              "encoding": {
                "audioFile": {
                  "style": "form"
                },
                "licenseId": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/public/widgets/{publicationId}/speak": {
      "post": {
        "tags": [
          "PublicWidgets"
        ],
        "parameters": [
          {
            "name": "publicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WidgetSpeakAudioRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WidgetSpeakAudioRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WidgetSpeakAudioRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/admin/roles/permissions": {
      "get": {
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/roles": {
      "get": {
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Roles"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveRoleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveRoleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveRoleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read, roles.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/roles/{id}": {
      "put": {
        "tags": [
          "Roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveRoleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveRoleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveRoleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read, roles.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read, roles.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/roles/assignments": {
      "get": {
        "tags": [
          "Roles"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/roles/assign": {
      "post": {
        "tags": [
          "Roles"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read, roles.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/roles/revoke": {
      "post": {
        "tags": [
          "Roles"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: roles.read, roles.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/routers": {
      "get": {
        "tags": [
          "Routers"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Routers"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentRouterRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentRouterRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AgentRouterRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read, routers.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/routers/{id}": {
      "put": {
        "tags": [
          "Routers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentRouterRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AgentRouterRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AgentRouterRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read, routers.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Routers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read, routers.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/routers/{id}/test": {
      "post": {
        "tags": [
          "Routers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RouterTestRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RouterTestRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RouterTestRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read, routers.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/routers/{routerId}/widget": {
      "get": {
        "tags": [
          "RouterWidgets"
        ],
        "parameters": [
          {
            "name": "routerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "RouterWidgets"
        ],
        "parameters": [
          {
            "name": "routerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWidgetRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWidgetRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWidgetRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read, routers.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/routers/{routerId}/widget/rotate": {
      "post": {
        "tags": [
          "RouterWidgets"
        ],
        "parameters": [
          {
            "name": "routerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: routers.read, routers.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/skills": {
      "get": {
        "tags": [
          "Skills"
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: skills.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Skills"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkillRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SkillRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SkillRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: skills.read, skills.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/skills/{id}": {
      "put": {
        "tags": [
          "Skills"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkillRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SkillRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SkillRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: skills.read, skills.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Skills"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: skills.read, skills.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    },
    "/api/admin/skills/agents/{agentId}": {
      "get": {
        "tags": [
          "Skills"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: skills.read."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Skills"
        ],
        "parameters": [
          {
            "name": "agentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentSkillsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentSkillsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetAgentSkillsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Sin autenticar o sesión vencida."
          },
          "403": {
            "description": "Requiere el permiso: skills.read, agents.write."
          }
        },
        "security": [
          {
            "bearer": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AgentRouterRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "isDefault": {
            "type": "boolean"
          },
          "fallbackAgentId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "allowedAgentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApplyLicenseRequest": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AssignRoleRequest": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "nullable": true
          },
          "roleName": {
            "type": "string",
            "nullable": true
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AudioConfigUpdate": {
        "type": "object",
        "properties": {
          "sttModel": {
            "type": "string",
            "nullable": true
          },
          "sttDevice": {
            "type": "string",
            "nullable": true
          },
          "defaultVoice": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AudioStatusResponse": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "ready": {
            "type": "boolean"
          },
          "sttModel": {
            "type": "string",
            "nullable": true
          },
          "ttsModel": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BrandingAssetResponse": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ChangePlanRequest": {
        "type": "object",
        "properties": {
          "plan": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ChatRequestDto": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "nullable": true
          },
          "imageBase64": {
            "type": "string",
            "nullable": true
          },
          "agentKey": {
            "type": "string",
            "nullable": true
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatTurn"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ChatTurn": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "nullable": true
          },
          "text": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateAgentRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "keywords": {
            "type": "string",
            "nullable": true
          },
          "systemPrompt": {
            "type": "string",
            "nullable": true
          },
          "priority": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CreateConnectorRequest": {
        "type": "object",
        "properties": {
          "agentId": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "container": {
            "type": "string",
            "nullable": true
          },
          "endpoint": {
            "type": "string",
            "nullable": true
          },
          "settings": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "nullable": true
          },
          "credentials": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateExternalWidgetLicenseRequest": {
        "required": [
          "displayName",
          "externalUserId",
          "licenseId",
          "plan"
        ],
        "type": "object",
        "properties": {
          "externalUserId": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "licenseId": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "displayName": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "plan": {
            "minLength": 1,
            "type": "string"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateFaqRequest": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "nullable": true
          },
          "answer": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateUserRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "plan": {
            "type": "string",
            "nullable": true
          },
          "isAdmin": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ExternalWidgetLicenseDailyUsage": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "inputTokens": {
            "type": "integer",
            "format": "int64"
          },
          "outputTokens": {
            "type": "integer",
            "format": "int64"
          },
          "messages": {
            "type": "integer",
            "format": "int32"
          },
          "voiceMessages": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ExternalWidgetLicenseResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "licenseId": {
            "type": "string",
            "nullable": true
          },
          "externalUserId": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "plan": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "isExpired": {
            "type": "boolean"
          },
          "monthlyInputTokenLimit": {
            "type": "integer",
            "format": "int64"
          },
          "inputTokensUsed": {
            "type": "integer",
            "format": "int64"
          },
          "outputTokensUsed": {
            "type": "integer",
            "format": "int64"
          },
          "messageCount": {
            "type": "integer",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastUsedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ExternalWidgetLicenseUsageResponse": {
        "type": "object",
        "properties": {
          "license": {
            "$ref": "#/components/schemas/ExternalWidgetLicenseResponse"
          },
          "daily": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalWidgetLicenseDailyUsage"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FeedbackDto": {
        "type": "object",
        "properties": {
          "score": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "GuardrailsResponse": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "nullable": true
          },
          "defaultText": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LoginRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "useCookie": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "McpAuthType": {
        "enum": [
          "None",
          "ApiKey",
          "OAuth2ClientCredentials"
        ],
        "type": "string"
      },
      "McpServerRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "transportType": {
            "$ref": "#/components/schemas/McpTransportType"
          },
          "url": {
            "type": "string",
            "nullable": true
          },
          "authType": {
            "$ref": "#/components/schemas/McpAuthType"
          },
          "authHeaderName": {
            "type": "string",
            "nullable": true
          },
          "oAuthTokenUrl": {
            "type": "string",
            "nullable": true
          },
          "oAuthClientId": {
            "type": "string",
            "nullable": true
          },
          "oAuthScope": {
            "type": "string",
            "nullable": true
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "nullable": true
          },
          "secret": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "McpTransportType": {
        "enum": [
          "Http",
          "Sse"
        ],
        "type": "string"
      },
      "MemoryProfileRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "content": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ModelProviderRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/ModelProviderType"
          },
          "baseUrl": {
            "type": "string",
            "nullable": true
          },
          "model": {
            "type": "string",
            "nullable": true
          },
          "apiVersion": {
            "type": "string",
            "nullable": true
          },
          "apiKey": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ModelProviderType": {
        "enum": [
          "Ollama",
          "OpenAi",
          "AzureFoundry",
          "Anthropic"
        ],
        "type": "string"
      },
      "ProductBranding": {
        "type": "object",
        "properties": {
          "productName": {
            "type": "string",
            "nullable": true
          },
          "clientName": {
            "type": "string",
            "nullable": true
          },
          "logoUrl": {
            "type": "string",
            "nullable": true
          },
          "faviconUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PublicWidgetChatRequest": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "nullable": true
          },
          "licenseId": {
            "type": "string",
            "nullable": true
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatTurn"
            },
            "nullable": true
          },
          "voice": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "PullModelRequest": {
        "type": "object",
        "properties": {
          "model": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RegisterRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ResetPasswordRequest": {
        "type": "object",
        "properties": {
          "newPassword": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RouterTestRequest": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveRoleRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "claims": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetActiveMcpServerRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetActiveModelProviderRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetActiveModelRequest": {
        "type": "object",
        "properties": {
          "model": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetActiveRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetAdminRequest": {
        "type": "object",
        "properties": {
          "isAdmin": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetAgentActiveRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetAgentMcpServersRequest": {
        "type": "object",
        "properties": {
          "serverIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetAgentMemoryProfilesRequest": {
        "type": "object",
        "properties": {
          "profileIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetAgentModelRequest": {
        "type": "object",
        "properties": {
          "providerId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "textModel": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetAgentSkillsRequest": {
        "type": "object",
        "properties": {
          "skillIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SkillRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "key": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "content": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SpeakAudioRequest": {
        "required": [
          "text"
        ],
        "type": "object",
        "properties": {
          "text": {
            "maxLength": 4000,
            "minLength": 1,
            "type": "string"
          },
          "voice": {
            "maxLength": 80,
            "minLength": 0,
            "pattern": "^[A-Za-z0-9_:.-]+$",
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateAgentRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "keywords": {
            "type": "string",
            "nullable": true
          },
          "systemPrompt": {
            "type": "string",
            "nullable": true
          },
          "identity": {
            "type": "string",
            "nullable": true
          },
          "memory": {
            "type": "string",
            "nullable": true
          },
          "skillsJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateBrandingRequest": {
        "type": "object",
        "properties": {
          "productName": {
            "type": "string",
            "nullable": true
          },
          "clientName": {
            "type": "string",
            "nullable": true
          },
          "logoUrl": {
            "type": "string",
            "nullable": true
          },
          "faviconUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateExternalWidgetLicenseRequest": {
        "required": [
          "displayName",
          "externalUserId",
          "isActive",
          "plan"
        ],
        "type": "object",
        "properties": {
          "externalUserId": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "displayName": {
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "plan": {
            "minLength": 1,
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateGuardrailsRequest": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdatePlanLimitDto": {
        "type": "object",
        "properties": {
          "dailyMessages": {
            "type": "integer",
            "format": "int32"
          },
          "maxInputChars": {
            "type": "integer",
            "format": "int32"
          },
          "monthlyInputTokenLimit": {
            "type": "integer",
            "format": "int64"
          },
          "maxOutputTokens": {
            "type": "integer",
            "format": "int32"
          },
          "queueTimeoutSeconds": {
            "type": "integer",
            "format": "int32"
          },
          "queuePriority": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "UpdateWidgetRequest": {
        "type": "object",
        "properties": {
          "isPublished": {
            "type": "boolean"
          },
          "settings": {
            "$ref": "#/components/schemas/WidgetTheme"
          }
        },
        "additionalProperties": false
      },
      "ValidateWidgetLicenseRequest": {
        "type": "object",
        "properties": {
          "licenseId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WidgetSpeakAudioRequest": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "nullable": true
          },
          "voice": {
            "type": "string",
            "nullable": true
          },
          "licenseId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "WidgetTheme": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "nullable": true
          },
          "subtitle": {
            "type": "string",
            "nullable": true
          },
          "welcomeMessage": {
            "type": "string",
            "nullable": true
          },
          "placeholder": {
            "type": "string",
            "nullable": true
          },
          "avatarUrl": {
            "type": "string",
            "nullable": true
          },
          "fontFamily": {
            "type": "string",
            "nullable": true
          },
          "primaryColor": {
            "type": "string",
            "nullable": true
          },
          "accentColor": {
            "type": "string",
            "nullable": true
          },
          "backgroundColor": {
            "type": "string",
            "nullable": true
          },
          "textColor": {
            "type": "string",
            "nullable": true
          },
          "position": {
            "type": "string",
            "nullable": true
          },
          "shape": {
            "type": "string",
            "nullable": true
          },
          "animation": {
            "type": "string",
            "nullable": true
          },
          "width": {
            "type": "integer",
            "format": "int32"
          },
          "height": {
            "type": "integer",
            "format": "int32"
          },
          "voice": {
            "type": "string",
            "nullable": true
          },
          "customCredit": {
            "type": "boolean"
          },
          "creditName": {
            "type": "string",
            "nullable": true
          },
          "privacyUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "tags": [
    {
      "name": "Admin"
    },
    {
      "name": "AgentWidgets"
    },
    {
      "name": "Audio"
    },
    {
      "name": "Auth"
    },
    {
      "name": "Branding"
    },
    {
      "name": "Chat"
    },
    {
      "name": "Connectors"
    },
    {
      "name": "ExternalWidgetLicenses"
    },
    {
      "name": "License"
    },
    {
      "name": "McpServers"
    },
    {
      "name": "MemoryProfiles"
    },
    {
      "name": "ModelConfiguration"
    },
    {
      "name": "ModelProviders"
    },
    {
      "name": "PlanLimits"
    },
    {
      "name": "PublicWidgets"
    },
    {
      "name": "Roles"
    },
    {
      "name": "Routers"
    },
    {
      "name": "RouterWidgets"
    },
    {
      "name": "Skills"
    }
  ]
}