{
  "openapi": "3.1.0",
  "info": {
    "title": "Plazbot",
    "description": "Documentacion completa de la API de Plazbot. Incluye todos los servicios para gestion de contactos, conversaciones, mensajes, oportunidades, tareas, plantillas, agentes de IA, usuarios y workspaces.",
    "license": {
      "name": "MIT"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.plazbot.com",
      "description": "Servidor de produccion de Plazbot"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "automation",
      "description": "Servicios de automatizacion y nodos de IA"
    },
    {
      "name": "agent",
      "description": "Servicios para gestion de Agentes de Inteligencia Artificial"
    },
    {
      "name": "contact",
      "description": "Servicios para gestion de contactos del workspace"
    },
    {
      "name": "conversation",
      "description": "Servicios para gestion de conversaciones y campanas"
    },
    {
      "name": "message",
      "description": "Servicios para envio y gestion de mensajes"
    },
    {
      "name": "opportunity",
      "description": "Servicios para gestion de oportunidades de negocio"
    },
    {
      "name": "task",
      "description": "Servicios para gestion de tareas"
    },
    {
      "name": "template",
      "description": "Servicios para gestion de plantillas de WhatsApp"
    },
    {
      "name": "user",
      "description": "Servicios para gestion de usuarios y autenticacion"
    },
    {
      "name": "workspace",
      "description": "Servicios para gestion de workspaces"
    }
  ],
  "paths": {
    "/api/automation/node/{nodeId}/prompt": {
      "post": {
        "summary": "Actualizar Prompt de Nodo IA",
        "description": "Servicio para actualizar el prompt del Agente de IA en un nodo de automatizacion. Para obtener el ID del nodo, se debe haber creado una automatizacion y un nodo tipo Agente de IA en la plataforma.\n\nEn la configuracion del nodo existe la opcion de copiar el ID del nodo que se reemplazara en la URL {nodeId}.\n\n(ej: **node-733030XXXX-26377XXXXX**)",
        "tags": [
          "automation"
        ],
        "operationId": "updateAutomationNodePrompt",
        "parameters": [
          {
            "name": "nodeId",
            "in": "path",
            "description": "ID del nodo de automatizacion de tipo Agente IA (ej: node-733030XXXX-26377XXXXX)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "urlDocument": {
                    "type": "string",
                    "description": "URL del documento a utilizar como contexto para el prompt del agente"
                  }
                },
                "required": [
                  "workspaceId",
                  "urlDocument"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Prompt del nodo actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/add": {
      "post": {
        "summary": "Crear Agente IA",
        "description": "Servicio para crear un nuevo Agente de Inteligencia Artificial en el workspace.",
        "tags": [
          "agent"
        ],
        "operationId": "createAgent",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del agente"
                  },
                  "model": {
                    "type": "string",
                    "description": "Modelo de IA a utilizar"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "Prompt de configuracion del agente"
                  },
                  "temperature": {
                    "type": "number",
                    "description": "Temperatura del modelo (0 a 1)"
                  },
                  "maxTokens": {
                    "type": "integer",
                    "description": "Maximo de tokens por respuesta"
                  },
                  "channelId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del canal asociado"
                  },
                  "platformType": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Tipo de plataforma"
                  },
                  "widgetEnabled": {
                    "type": "boolean",
                    "description": "Habilitar widget del agente"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "name",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Agente creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Agent"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/update": {
      "put": {
        "summary": "Actualizar Agente IA",
        "description": "Servicio para actualizar la configuracion de un Agente de IA existente.",
        "tags": [
          "agent"
        ],
        "operationId": "updateAgent",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID del agente a actualizar"
                  },
                  "name": {
                    "type": "string",
                    "description": "Nombre del agente"
                  },
                  "model": {
                    "type": "string",
                    "description": "Modelo de IA a utilizar"
                  },
                  "prompt": {
                    "type": "string",
                    "description": "Prompt de configuracion del agente"
                  },
                  "temperature": {
                    "type": "number",
                    "description": "Temperatura del modelo (0 a 1)"
                  },
                  "maxTokens": {
                    "type": "integer",
                    "description": "Maximo de tokens por respuesta"
                  },
                  "channelId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del canal asociado"
                  },
                  "platformType": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Tipo de plataforma"
                  },
                  "widgetEnabled": {
                    "type": "boolean",
                    "description": "Habilitar widget del agente"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "id",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Agente actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Agent"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/get-agents": {
      "get": {
        "summary": "Listar Agentes",
        "description": "Servicio para obtener la lista de todos los Agentes de IA del workspace.",
        "tags": [
          "agent"
        ],
        "operationId": "listAgents",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de agentes obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Agent"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/get-agent": {
      "get": {
        "summary": "Obtener Agente",
        "description": "Servicio para obtener la informacion de un Agente de IA especifico.",
        "tags": [
          "agent"
        ],
        "operationId": "getAgent",
        "parameters": [
          {
            "name": "agentId",
            "in": "query",
            "description": "ID del agente a consultar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Agente obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Agent"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/get-by-channel": {
      "get": {
        "summary": "Obtener Agente por Canal",
        "description": "Servicio para obtener un Agente de IA asociado a un canal especifico.",
        "tags": [
          "agent"
        ],
        "operationId": "getAgentByChannel",
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "description": "ID del canal",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Agente obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Agent"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/copy-agent": {
      "post": {
        "summary": "Copiar Agente",
        "description": "Servicio para crear una copia de un Agente de IA existente.",
        "tags": [
          "agent"
        ],
        "operationId": "copyAgent",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "agentId": {
                    "type": "string",
                    "description": "ID del agente a copiar"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "agentId",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Agente copiado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Agent"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/delete": {
      "delete": {
        "summary": "Eliminar Agente",
        "description": "Servicio para eliminar un Agente de IA del workspace.",
        "tags": [
          "agent"
        ],
        "operationId": "deleteAgent",
        "parameters": [
          {
            "name": "agentId",
            "in": "query",
            "description": "ID del agente a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Agente eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/enable-widget": {
      "post": {
        "summary": "Habilitar Widget",
        "description": "Servicio para habilitar o deshabilitar el widget de un Agente de IA.",
        "tags": [
          "agent"
        ],
        "operationId": "enableAgentWidget",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "agentId": {
                    "type": "string",
                    "description": "ID del agente"
                  },
                  "widgetEnabled": {
                    "type": "boolean",
                    "description": "True para habilitar, false para deshabilitar"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "agentId",
                  "widgetEnabled",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Widget actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/generate-upload-token": {
      "get": {
        "summary": "Generar Token de Subida",
        "description": "Servicio para generar un token temporal que permite subir archivos al Agente de IA.",
        "tags": [
          "agent"
        ],
        "operationId": "generateAgentUploadToken",
        "parameters": [
          {
            "name": "fileName",
            "in": "query",
            "description": "Nombre del archivo a subir",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "agentId",
            "in": "query",
            "description": "ID del agente",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Token de subida generado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "uploadUrl": {
                          "type": "string",
                          "description": "URL de subida con token temporal"
                        },
                        "token": {
                          "type": "string",
                          "description": "Token de subida"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/add-file": {
      "post": {
        "summary": "Agregar Archivo al Agente",
        "description": "Servicio para agregar un archivo al Agente de IA mediante URL.",
        "tags": [
          "agent"
        ],
        "operationId": "addFileToAgent",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "agentId": {
                    "type": "string",
                    "description": "ID del agente"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "fileName": {
                    "type": "string",
                    "description": "Nombre del archivo"
                  },
                  "fileUrl": {
                    "type": "string",
                    "description": "URL publica del archivo"
                  }
                },
                "required": [
                  "agentId",
                  "workspaceId",
                  "fileName",
                  "fileUrl"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Archivo agregado exitosamente al agente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/add-file-direct": {
      "post": {
        "summary": "Agregar Archivo Directo al Agente",
        "description": "Servicio para agregar un archivo directamente al Agente de IA mediante subida de archivo.",
        "tags": [
          "agent"
        ],
        "operationId": "addFileDirectToAgent",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Archivo a subir"
                  },
                  "agentId": {
                    "type": "string",
                    "description": "ID del agente"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "file",
                  "agentId",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Archivo subido y agregado exitosamente al agente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/validate-file": {
      "get": {
        "summary": "Validar Archivo",
        "description": "Servicio para validar si un archivo puede ser procesado por el Agente de IA.",
        "tags": [
          "agent"
        ],
        "operationId": "validateAgentFile",
        "parameters": [
          {
            "name": "fileName",
            "in": "query",
            "description": "Nombre del archivo a validar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "agentId",
            "in": "query",
            "description": "ID del agente",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Resultado de la validacion del archivo",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "isValid": {
                          "type": "boolean",
                          "description": "Indica si el archivo es valido"
                        },
                        "message": {
                          "type": "string",
                          "description": "Mensaje descriptivo de la validacion"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/delete-file": {
      "delete": {
        "summary": "Eliminar Archivo del Agente",
        "description": "Servicio para eliminar un archivo asociado a un Agente de IA.",
        "tags": [
          "agent"
        ],
        "operationId": "deleteAgentFile",
        "parameters": [
          {
            "name": "agentId",
            "in": "query",
            "description": "ID del agente",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileName",
            "in": "query",
            "description": "Nombre del archivo a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Archivo eliminado exitosamente del agente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/on-message": {
      "post": {
        "summary": "Enviar Mensaje al Agente",
        "description": "Envia mensajes al Agente de IA para obtener respuestas que pueden ser utilizadas en las aplicaciones que se necesiten. Es importante mantener el sessionId para conservar el contexto y memoria de la conversacion.",
        "tags": [
          "agent"
        ],
        "operationId": "sendMessageToAgent",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "agentId": {
                    "type": "string",
                    "description": "ID del Agente de IA"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "question": {
                    "type": "string",
                    "description": "Pregunta o mensaje que se envia al agente"
                  },
                  "sessionId": {
                    "type": "string",
                    "description": "ID de sesion del usuario. Es importante mantener la sesion para que el agente no pierda el contexto y la memoria de la conversacion."
                  },
                  "file": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "URL de un archivo para que el agente lo procese"
                  },
                  "multipleAnswers": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "Si es true, el agente puede proporcionar multiples respuestas en formato array"
                  }
                },
                "required": [
                  "agentId",
                  "workspaceId",
                  "question",
                  "sessionId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Respuesta del agente obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "answer": {
                          "type": "string",
                          "description": "Respuesta del agente"
                        },
                        "answers": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Respuestas multiples del agente (cuando multipleAnswers=true)"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/on-message-portal": {
      "post": {
        "summary": "Enviar Mensaje al Portal",
        "description": "Envia mensajes al Agente de IA a traves del portal para obtener respuestas.",
        "tags": [
          "agent"
        ],
        "operationId": "sendMessageToAgentPortal",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "Mensaje a enviar al agente"
                  },
                  "from": {
                    "type": "string",
                    "description": "Identificador del remitente"
                  },
                  "agentId": {
                    "type": "string",
                    "description": "ID del Agente de IA"
                  },
                  "conversationId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la conversacion"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "portalId": {
                    "type": "string",
                    "description": "ID del portal"
                  }
                },
                "required": [
                  "message",
                  "from",
                  "agentId",
                  "workspaceId",
                  "portalId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Respuesta del agente obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/clear-buffer": {
      "post": {
        "summary": "Limpiar Buffer del Agente",
        "description": "Servicio para limpiar el buffer de conversacion del Agente de IA, reiniciando el contexto de la sesion.",
        "tags": [
          "agent"
        ],
        "operationId": "clearAgentBuffer",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "agentId": {
                    "type": "string",
                    "description": "ID del Agente de IA"
                  },
                  "conversationId": {
                    "type": "string",
                    "description": "ID de la conversacion a limpiar"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "agentId",
                  "conversationId",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Buffer del agente limpiado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/ai-builder-prompt": {
      "post": {
        "summary": "Generar Agente con Prompt",
        "description": "Genera la configuracion completa de un Agente de IA a partir de un unico prompt descriptivo en lenguaje natural. El sistema analiza el texto, detecta automaticamente el tipo de negocio y genera un JSON listo para crear el agente con POST /api/agent/add.\n\nMientras mas detallado sea el prompt, mejor sera la configuracion generada. Si se proporciona poca informacion, el sistema deduce valores razonables por defecto.",
        "tags": [
          "agent"
        ],
        "operationId": "aiBuilderPrompt",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "prompt": {
                    "type": "string",
                    "description": "Descripcion en lenguaje natural del agente que necesitas crear. Incluye tipo de negocio, nombre, proposito, canales, tono, idioma, y cualquier detalle relevante.",
                    "example": "Necesito un agente para mi clinica dental DentalSmile en Lima Peru, que agende citas, confirme y cancele citas, horario lunes a viernes 9am a 6pm, tono amable y profesional, en español, canal whatsapp, si no puede resolver que derive a un humano"
                  }
                },
                "required": [
                  "prompt"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Configuracion del agente generada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la generacion fue exitosa",
                      "example": true
                    },
                    "config": {
                      "type": "object",
                      "description": "JSON completo de configuracion del agente, listo para usar con POST /api/agent/add",
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Nombre del agente",
                          "example": "Asistente DentalSmile"
                        },
                        "description": {
                          "type": "string",
                          "description": "Descripcion del agente"
                        },
                        "prompt": {
                          "type": "string",
                          "description": "System prompt generado para el agente"
                        },
                        "zone": {
                          "type": "string",
                          "enum": [
                            "LA",
                            "EU"
                          ],
                          "description": "Zona geografica"
                        },
                        "timezone": {
                          "type": "string",
                          "description": "Zona horaria IANA",
                          "example": "America/Lima"
                        },
                        "buffer": {
                          "type": "integer",
                          "description": "Cantidad de mensajes en buffer",
                          "example": 8
                        },
                        "instructions": {
                          "type": "object",
                          "description": "Instrucciones de tono, personalidad, idioma, etc."
                        },
                        "person": {
                          "type": "object",
                          "description": "Persona del agente (nombre, rol)"
                        },
                        "fallbacks": {
                          "type": "object",
                          "description": "Respuestas predeterminadas"
                        },
                        "actions": {
                          "type": "array",
                          "description": "Acciones internas (citas, tags, escalacion)"
                        },
                        "services": {
                          "type": "array",
                          "description": "Conexiones a APIs externas"
                        },
                        "channels": {
                          "type": "array",
                          "description": "Canales habilitados"
                        },
                        "useToolCalling": {
                          "type": "boolean",
                          "description": "Habilitar tool calling"
                        },
                        "aiProviders": {
                          "type": "array",
                          "description": "Proveedores de IA configurados"
                        }
                      }
                    },
                    "usage": {
                      "type": "object",
                      "description": "Tokens consumidos en la generacion",
                      "properties": {
                        "input_tokens": {
                          "type": "integer",
                          "description": "Tokens de entrada consumidos",
                          "example": 1847
                        },
                        "output_tokens": {
                          "type": "integer",
                          "description": "Tokens de salida consumidos",
                          "example": 623
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Prompt vacio o no se pudo generar la configuracion",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "example": false
                    },
                    "message": {
                      "type": "string",
                      "example": "El campo 'prompt' es requerido."
                    },
                    "error": {
                      "type": "string",
                      "example": "No se pudo generar la configuracion del agente. Intenta con un prompt mas descriptivo."
                    },
                    "usage": {
                      "type": "object",
                      "properties": {
                        "input_tokens": {
                          "type": "integer"
                        },
                        "output_tokens": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/agent/logs": {
      "get": {
        "summary": "Obtener Logs del Monitor",
        "description": "Obtiene el historial de eventos del agente de IA. Permite consultar eventos recientes, filtrar por contacto especifico, o buscar por sesion/nombre de contacto.\n\nEl endpoint selecciona automaticamente la consulta segun los parametros:\n- Si se envia `search`: busca por session_id o contact_name (busqueda profunda)\n- Si se envia `contactId`: filtra eventos de un contacto especifico\n- Si no se envia ninguno: retorna los eventos mas recientes\n\n### Tipos de evento disponibles\n\n| event_type | Descripcion |\n|---|---|\n| `msg_in` | Mensaje entrante del contacto |\n| `msg_out` | Respuesta del agente |\n| `model` | Proveedor y modelo de IA seleccionado |\n| `tool_call` | Llamada a herramienta del LLM |\n| `api_req` | Request HTTP a servicio externo |\n| `api_res` | Response del servicio externo |\n| `action` | Accion ejecutada (asignar agente, etiqueta, etapa, etc.) |\n| `rag` | Busqueda en base de conocimiento |\n| `tokens` | Consumo de tokens (input/output) |\n| `error` | Error durante el procesamiento |\n| `bot_off` | Bot apagado |\n| `session_field` | Campo de sesion solicitado |\n\n### Ejemplos de uso\n\n**Ultimos 100 eventos:**\n```bash\ncurl \"https://api.plazbot.com/api/agent/logs?agentId=AGENT_ID&limit=100\" \\\n  -H \"x-workspace-id: WORKSPACE_ID\" \\\n  -H \"Authorization: Bearer TOKEN\"\n```\n\n**Buscar por telefono (session_id):**\n```bash\ncurl \"https://api.plazbot.com/api/agent/logs?agentId=AGENT_ID&search=51932114990&from=2026-03-01 00:00:00&limit=200\" \\\n  -H \"x-workspace-id: WORKSPACE_ID\" \\\n  -H \"Authorization: Bearer TOKEN\"\n```\n\n**Buscar por nombre de contacto:**\n```bash\ncurl \"https://api.plazbot.com/api/agent/logs?agentId=AGENT_ID&search=Maria&from=2026-03-01 00:00:00&limit=200\" \\\n  -H \"x-workspace-id: WORKSPACE_ID\" \\\n  -H \"Authorization: Bearer TOKEN\"\n```\n\n**Filtrar por contacto especifico:**\n```bash\ncurl \"https://api.plazbot.com/api/agent/logs?agentId=AGENT_ID&contactId=CONTACT_ID&from=2026-03-01 00:00:00&limit=50\" \\\n  -H \"x-workspace-id: WORKSPACE_ID\" \\\n  -H \"Authorization: Bearer TOKEN\"\n```",
        "tags": [
          "agent"
        ],
        "operationId": "getAgentMonitorLogs",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "agentId",
            "in": "query",
            "description": "ID del Agente de IA",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto para filtrar eventos de un contacto especifico. No se puede combinar con `search`.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Texto para buscar en session_id (numero de telefono) o contact_name. Coincidencia parcial, case insensitive. No se puede combinar con `contactId`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "examples": {
              "phone": {
                "summary": "Buscar por telefono",
                "value": "51932114990"
              },
              "name": {
                "summary": "Buscar por nombre",
                "value": "Maria"
              }
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Fecha desde la cual obtener eventos. Formato: `YYYY-MM-DD HH:MM:SS`. Si no se especifica, retorna los mas recientes.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-03-01 00:00:00"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Cantidad maxima de eventos a retornar",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de eventos del agente obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa",
                      "example": true
                    },
                    "data": {
                      "type": "array",
                      "description": "Array de eventos del agente ordenados por timestamp descendente",
                      "items": {
                        "$ref": "#/components/schemas/AgentLogEvent"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - agentId es requerido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Servicio no disponible - El servicio de logging no esta configurado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact": {
      "get": {
        "summary": "Obtener Contactos",
        "description": "Servicio para obtener los contactos del workspace. La respuesta viene paginada en bloques de 20 registros. Utilice el continuationToken para obtener la siguiente pagina.",
        "tags": [
          "contact"
        ],
        "operationId": "getContacts",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "currentUser",
            "in": "query",
            "description": "Identificador del usuario autenticado (usr_xxx). Se obtiene del endpoint /api/user/login. Necesario para resolver filtros relativos de vistas (ej: 'agente asignado = usuario actual').",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "continuationToken",
            "in": "query",
            "description": "Token de paginacion para obtener los siguientes registros. Si es null, no hay mas registros.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viewId",
            "in": "query",
            "description": "Identificador de la vista a aplicar. Si se omite, no se aplican filtros de vista.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stageId",
            "in": "query",
            "description": "Filtrar contactos por etapa/fase especifica.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assignedAgentId",
            "in": "query",
            "description": "Filtrar contactos por agente asignado.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de contactos obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/PaginatedContactResponse"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Crear Contacto",
        "description": "Servicio para crear un nuevo contacto en el workspace. El campo platformId indica el canal del contacto (ver descripcion del campo para los codigos disponibles).",
        "tags": [
          "contact"
        ],
        "operationId": "createContact",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "name": {
                    "type": "string",
                    "description": "Nombre del contacto"
                  },
                  "lastname": {
                    "type": "string",
                    "description": "Apellido del contacto"
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Correo electronico del contacto. Obligatorio y debe ser valido cuando platformId=3 (Facebook) o platformId=4 (Instagram)."
                  },
                  "platformId": {
                    "type": "integer",
                    "enum": [
                      1,
                      2,
                      3,
                      4,
                      5,
                      6
                    ],
                    "description": "ID del canal del contacto. Valores permitidos: 1=Webchat, 2=WhatsApp, 3=Facebook, 4=Instagram, 5=Telegram, 6=Portal"
                  },
                  "internalWhatsappNumber": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Numero de WhatsApp del contacto (ej: 57123456789). Obligatorio cuando platformId=2 (WhatsApp). Se almacena solo con digitos."
                  },
                  "stageId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la etapa del contacto. Obtener los codigos del servicio Get Workspace"
                  },
                  "isoCountryCode": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Indicador de bandera del pais (ej: PE, US, ES, CO)"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "IDs de etiquetas a asignar"
                  },
                  "customFields": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/CustomField"
                    },
                    "description": "Campos personalizados, se crea en la plataforma en Configuracion -> Variables"
                  }
                },
                "required": [
                  "workspaceId",
                  "name",
                  "platformId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contacto creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID del contacto creado"
                        },
                        "contact": {
                          "$ref": "#/components/schemas/Contact"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "put": {
        "summary": "Actualizar Contacto",
        "description": "Servicio para actualizar los campos de un contacto existente. Los campos que se pueden actualizar incluyen: name, lastname, email, stageId, segmentationId, entre otros.",
        "tags": [
          "contact"
        ],
        "operationId": "updateContact",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "ID del contacto a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del contacto"
                  },
                  "lastname": {
                    "type": "string",
                    "description": "Apellido del contacto"
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Correo electronico"
                  },
                  "stageId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la etapa del contacto"
                  },
                  "segmentationId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de segmentacion"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "IDs de etiquetas"
                  },
                  "customFields": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/CustomField"
                    },
                    "description": "Campos personalizados"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contacto actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID del contacto"
                        },
                        "contact": {
                          "$ref": "#/components/schemas/Contact"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/{contactId}": {
      "get": {
        "summary": "Obtener Contacto por ID",
        "description": "Servicio que retorna la informacion de un contacto filtrado por su ID.",
        "tags": [
          "contact"
        ],
        "operationId": "getContactById",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto a consultar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Contacto obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Contact"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/get-by-email": {
      "get": {
        "summary": "Obtener Contacto por Email",
        "description": "Servicio que retorna la informacion de un contacto filtrado por correo electronico.",
        "tags": [
          "contact"
        ],
        "operationId": "getContactByEmail",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "description": "Correo electronico del contacto a buscar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Contacto obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Contact"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/get-by-phone": {
      "get": {
        "summary": "Obtener Contacto por Telefono",
        "description": "Servicio que retorna la informacion de un contacto filtrado por numero de telefono de WhatsApp.",
        "tags": [
          "contact"
        ],
        "operationId": "getContactByPhone",
        "parameters": [
          {
            "name": "phone",
            "in": "query",
            "description": "Numero de telefono del contacto (ej: 57123456789)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Contacto obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Contact"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/delete-batch": {
      "post": {
        "summary": "Eliminar Contactos en Lote",
        "description": "Servicio para eliminar uno o mas contactos de forma masiva.",
        "tags": [
          "contact"
        ],
        "operationId": "deleteContactsBatch",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "contactIds": {
                    "type": "array",
                    "description": "Lista de IDs de contactos a eliminar",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "workspaceId",
                  "contactIds"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contactos eliminados exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/{contactId}/activities": {
      "post": {
        "summary": "Actualizar Actividades del Contacto",
        "description": "Servicio para registrar una nueva actividad en el historial del contacto.",
        "tags": [
          "contact"
        ],
        "operationId": "addContactActivity",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "content": {
                    "type": "string",
                    "description": "Descripcion de la actividad o comentario"
                  },
                  "date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha de la actividad"
                  },
                  "categoryType": {
                    "type": "string",
                    "description": "Tipo de categoria: Calls, Meeting, Whatsapp, Email"
                  }
                },
                "required": [
                  "workspaceId",
                  "content"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actividad registrada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "summary": "Obtener Actividades del Contacto",
        "description": "Servicio para obtener todas las actividades registradas de un contacto.",
        "tags": [
          "contact"
        ],
        "operationId": "getContactActivities",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actividades obtenidas exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Activity"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/{contactId}/files": {
      "post": {
        "summary": "Agregar Archivos al Contacto",
        "description": "Servicio para agregar archivos adjuntos al contacto mediante subida directa.",
        "tags": [
          "contact"
        ],
        "operationId": "addFilesToContact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "contentFile": {
                    "type": "string",
                    "format": "binary",
                    "description": "Archivo a subir"
                  }
                },
                "required": [
                  "contentFile"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Archivos agregados exitosamente al contacto",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/block": {
      "post": {
        "summary": "Bloquear Contacto",
        "description": "Servicio para bloquear o desbloquear un contacto del workspace.",
        "tags": [
          "contact"
        ],
        "operationId": "blockContact",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "contactId": {
                    "type": "string",
                    "description": "ID del contacto"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "blocked": {
                    "type": "boolean",
                    "description": "True para bloquear, false para desbloquear"
                  }
                },
                "required": [
                  "contactId",
                  "workspaceId",
                  "blocked"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Estado de bloqueo del contacto actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/exportContactsReport": {
      "post": {
        "summary": "Exportar Reporte de Contactos",
        "description": "Servicio para exportar un reporte de contactos del workspace con filtros opcionales.",
        "tags": [
          "contact"
        ],
        "operationId": "exportContactsReport",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "filters": {
                    "type": "object",
                    "description": "Filtros opcionales para el reporte",
                    "additionalProperties": true
                  }
                },
                "required": [
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Reporte de contactos generado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/uploadMassive": {
      "post": {
        "summary": "Importar Contactos Masivamente",
        "description": "Servicio para importar contactos de forma masiva mediante un archivo (CSV o Excel).",
        "tags": [
          "contact"
        ],
        "operationId": "uploadMassiveContacts",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Archivo CSV o Excel con los contactos a importar"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "file",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Importacion masiva de contactos iniciada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/{contactId}/events": {
      "post": {
        "summary": "Crear Evento del Contacto",
        "description": "Servicio para crear un nuevo evento asociado a un contacto.",
        "tags": [
          "contact"
        ],
        "operationId": "createContactEvent",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "data": {
                    "type": "object",
                    "description": "Datos del evento a crear",
                    "properties": {
                      "title": {
                        "type": "string",
                        "description": "Titulo del evento"
                      },
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Descripcion del evento"
                      },
                      "startDate": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Fecha y hora de inicio del evento (ISO 8601)"
                      },
                      "endDate": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time",
                        "description": "Fecha y hora de fin del evento (ISO 8601)"
                      },
                      "color": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Color del evento en formato hexadecimal"
                      },
                      "allDay": {
                        "type": [
                          "boolean",
                          "null"
                        ],
                        "description": "Indica si el evento dura todo el dia"
                      },
                      "variables": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/EventVariable"
                        },
                        "description": "Variables personalizadas del evento. Se crean en la plataforma en Configuracion -> Variables (modulo Eventos). Solo se guardan las variables cuyo codigo exista; el resto se descarta."
                      }
                    },
                    "required": [
                      "title",
                      "startDate"
                    ]
                  }
                },
                "required": [
                  "workspaceId",
                  "data"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Evento creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/contact/{contactId}/events/{eventId}": {
      "put": {
        "summary": "Actualizar Evento del Contacto",
        "description": "Servicio para actualizar un evento existente asociado a un contacto.",
        "tags": [
          "contact"
        ],
        "operationId": "updateContactEvent",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventId",
            "in": "path",
            "description": "ID del evento a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "data": {
                    "type": "object",
                    "description": "Datos del evento a actualizar",
                    "properties": {
                      "title": {
                        "type": "string",
                        "description": "Titulo del evento"
                      },
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Descripcion del evento"
                      },
                      "startDate": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Fecha y hora de inicio del evento (ISO 8601)"
                      },
                      "endDate": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time",
                        "description": "Fecha y hora de fin del evento (ISO 8601)"
                      },
                      "color": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Color del evento en formato hexadecimal"
                      },
                      "allDay": {
                        "type": [
                          "boolean",
                          "null"
                        ],
                        "description": "Indica si el evento dura todo el dia"
                      },
                      "eventStatus": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Estado del evento: pending, confirmed o cancelled"
                      },
                      "variables": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/EventVariable"
                        },
                        "description": "Variables personalizadas del evento. Se crean en la plataforma en Configuracion -> Variables (modulo Eventos). Solo se guardan las variables cuyo codigo exista; el resto se descarta."
                      }
                    }
                  }
                },
                "required": [
                  "workspaceId",
                  "data"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Evento actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Evento del Contacto",
        "description": "Servicio para eliminar un evento de un contacto.",
        "tags": [
          "contact"
        ],
        "operationId": "deleteContactEvent",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "ID del contacto",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventId",
            "in": "path",
            "description": "ID del evento a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Evento eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/conversation": {
      "get": {
        "summary": "Listar Conversaciones",
        "description": "Servicio que extrae toda la informacion de las conversaciones del workspace. La respuesta viene paginada en bloques de 20 registros.",
        "tags": [
          "conversation"
        ],
        "operationId": "listConversations",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto para filtrar conversaciones",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "continuationToken",
            "in": "query",
            "description": "Token de paginacion para obtener los siguientes registros. Si es null, no hay mas registros.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de conversaciones obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/PaginatedConversationResponse"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Enviar Conversacion",
        "description": "Envia conversaciones de WhatsApp desde tu plataforma a tus clientes de forma masiva o individual utilizando plantillas. Por defecto, si no se envia el tipo, este llegara como API (3). Si se envia tipo API, se pueden agrupar los envios con el campo campaignName.",
        "tags": [
          "conversation"
        ],
        "operationId": "sendConversation",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "template": {
                    "type": "string",
                    "description": "Nombre de la plantilla a utilizar"
                  },
                  "destination": {
                    "type": "string",
                    "description": "Numero de WhatsApp del destinatario (ej: 574787443997)"
                  },
                  "reference1": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Valor de referencia 1. Campos adicionales para almacenar informacion relevante sobre el mensaje. Utiles para categorizar, filtrar o buscar mensajes. Tambien se pueden usar en el webhook de la plantilla cuando el cliente hace clic en un boton interactivo."
                  },
                  "reference2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Valor de referencia 2"
                  },
                  "reference3": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Valor de referencia 3"
                  },
                  "variablesHeader": {
                    "type": "array",
                    "description": "Variables para el encabezado de la plantilla",
                    "items": {
                      "type": "object",
                      "properties": {
                        "variable": {
                          "type": "string",
                          "description": "Nombre de la variable"
                        },
                        "value": {
                          "type": "string",
                          "description": "Valor de la variable"
                        }
                      },
                      "required": [
                        "variable",
                        "value"
                      ]
                    }
                  },
                  "variablesBody": {
                    "type": "array",
                    "description": "Variables para el cuerpo de la plantilla",
                    "items": {
                      "type": "object",
                      "properties": {
                        "variable": {
                          "type": "string",
                          "description": "Nombre de la variable"
                        },
                        "value": {
                          "type": "string",
                          "description": "Valor de la variable"
                        }
                      },
                      "required": [
                        "variable",
                        "value"
                      ]
                    }
                  },
                  "file": {
                    "type": "array",
                    "description": "Archivos a enviar con la plantilla",
                    "items": {
                      "type": "object",
                      "properties": {
                        "fileUrl": {
                          "type": "string",
                          "description": "URL publica del archivo a enviar"
                        },
                        "fileName": {
                          "type": "string",
                          "description": "Nombre del archivo"
                        }
                      }
                    }
                  },
                  "sendType": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Tipo de envio de la conversacion:\n\n- 1: Campana\n- 2: Individual\n- 3: API\n\nPor defecto, si no se envia el tipo, este llegara como API (3)."
                  },
                  "campaignName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Nombre de la campana. Se puede enviar para tipo API y Campana."
                  },
                  "fUseSystemVariables": {
                    "type": "boolean",
                    "default": false,
                    "description": "Reemplaza automaticamente los VALORES de las variables del BODY con los datos del contacto. Importante: no sustituye el envio de variablesBody ni variablesHeader; igual debes enviarlas con la misma cantidad y los mismos nombres que la plantilla (de lo contrario la API rechaza el request). Cuando es true, el sistema busca el contacto por su numero de WhatsApp y, solo para las variables del BODY que tengan configurado un valor de reemplazo (replaceWith) en la plantilla, sobreescribe el valor enviado con: CONTACT_NAME (nombre y apellido), EMAIL, COUNTRY (codigo ISO del pais), AGENT_NAME (agente asignado), CELLPHONE (numero de WhatsApp) o una variable personalizada del contacto por su codigo. Condiciones: el contacto debe existir en la base de datos y la variable debe tener replaceWith configurado; si no, se usa el valor enviado. El reemplazo aplica unicamente al BODY, no al HEADER. Cuando es false (valor por defecto), se usan los valores enviados en variablesBody tal cual."
                  }
                },
                "required": [
                  "workspaceId",
                  "template",
                  "destination"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Conversacion enviada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "contactId": {
                          "type": "string",
                          "description": "ID del contacto destinatario"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/conversation/counterForExportData": {
      "get": {
        "summary": "Contador para Exportar Datos",
        "description": "Servicio para obtener el conteo de registros disponibles para exportacion en un rango de fechas.",
        "tags": [
          "conversation"
        ],
        "operationId": "getConversationExportCount",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Fecha de inicio del rango (formato ISO)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Fecha de fin del rango (formato ISO)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Conteo obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "count": {
                          "type": "integer",
                          "description": "Numero total de registros disponibles"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/conversation/exportConversationsReport": {
      "post": {
        "summary": "Exportar Reporte de Conversaciones",
        "description": "Servicio para exportar un reporte de conversaciones del workspace en un rango de fechas.",
        "tags": [
          "conversation"
        ],
        "operationId": "exportConversationsReport",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "dateFrom": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha de inicio del rango"
                  },
                  "dateTo": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha de fin del rango"
                  }
                },
                "required": [
                  "workspaceId",
                  "dateFrom",
                  "dateTo"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Reporte de conversaciones generado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/conversation/campaign": {
      "get": {
        "summary": "Listar Campanas",
        "description": "Servicio para listar todas las campanas de envio del workspace.",
        "tags": [
          "conversation"
        ],
        "operationId": "listCampaigns",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de campanas obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "ID de la campana"
                          },
                          "name": {
                            "type": "string",
                            "description": "Nombre de la campana"
                          },
                          "status": {
                            "type": "string",
                            "description": "Estado de la campana"
                          },
                          "creationDate": {
                            "type": "string",
                            "format": "date-time",
                            "description": "Fecha de creacion"
                          },
                          "totalContacts": {
                            "type": "integer",
                            "description": "Total de contactos en la campana"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Crear Campana",
        "description": "Servicio para crear una nueva campana de envio masivo de mensajes.",
        "tags": [
          "conversation"
        ],
        "operationId": "createCampaign",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre de la campana"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "ID de la plantilla a utilizar"
                  },
                  "contacts": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Lista de IDs de contactos"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "name",
                  "templateId",
                  "contacts",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Campana creada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/conversation/campaign/{campaignId}/cancel": {
      "post": {
        "summary": "Cancelar Campana",
        "description": "Servicio para cancelar una campana de envio que esta en progreso.",
        "tags": [
          "conversation"
        ],
        "operationId": "cancelCampaign",
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "ID de la campana a cancelar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Campana cancelada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/message": {
      "get": {
        "summary": "Obtener Mensajes",
        "description": "Servicio para obtener los mensajes de una conversacion especifica. La respuesta viene paginada.",
        "tags": [
          "message"
        ],
        "operationId": "getMessages",
        "parameters": [
          {
            "name": "conversationId",
            "in": "query",
            "description": "ID de la conversacion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "continuationToken",
            "in": "query",
            "description": "Token de paginacion para obtener los siguientes registros. Si es null, no hay mas registros.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de mensajes obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "continuationToken": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Token para la siguiente pagina"
                        },
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Message"
                          },
                          "description": "Lista de mensajes"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Enviar Mensaje",
        "description": "Envia un mensaje de WhatsApp al cliente. No se trata de una plantilla. Si ha pasado el tiempo permitido por WhatsApp (24 horas), el mensaje no llegara y se debera usar el servicio de plantillas.",
        "tags": [
          "message"
        ],
        "operationId": "sendMessage",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-agent-id",
            "in": "header",
            "description": "Identificador del agente que envia el mensaje",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "content": {
                    "type": "string",
                    "description": "Contenido del mensaje a enviar"
                  },
                  "recipientPhone": {
                    "type": "string",
                    "description": "Numero de WhatsApp del destinatario (ej: 574787443997)"
                  },
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "conversationId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la conversacion"
                  }
                },
                "required": [
                  "content",
                  "recipientPhone",
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Mensaje enviado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "contactId": {
                          "type": "string",
                          "description": "ID del contacto"
                        },
                        "message": {
                          "$ref": "#/components/schemas/Message"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Mensaje",
        "description": "Servicio para eliminar un mensaje especifico.",
        "tags": [
          "message"
        ],
        "operationId": "deleteMessage",
        "parameters": [
          {
            "name": "messageId",
            "in": "query",
            "description": "ID del mensaje a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mensaje eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/message/files": {
      "post": {
        "summary": "Enviar Archivos en Mensaje",
        "description": "Servicio para enviar archivos adjuntos en un mensaje de WhatsApp al contacto.",
        "tags": [
          "message"
        ],
        "operationId": "sendMessageFiles",
        "parameters": [
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recipientPhone",
            "in": "query",
            "description": "Numero de WhatsApp del destinatario",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "contentFile": {
                    "type": "string",
                    "format": "binary",
                    "description": "Archivo a enviar"
                  }
                },
                "required": [
                  "contentFile"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Archivo enviado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/message/get-query-messages": {
      "get": {
        "summary": "Buscar Mensajes",
        "description": "Servicio para buscar mensajes por texto dentro de las conversaciones del workspace.",
        "tags": [
          "message"
        ],
        "operationId": "searchMessages",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "description": "Texto a buscar en los mensajes",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto para filtrar la busqueda",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Resultados de busqueda obtenidos exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Message"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/message/get-all": {
      "get": {
        "summary": "Obtener Todos los Mensajes",
        "description": "Servicio para obtener todos los mensajes de una conversacion sin paginacion.",
        "tags": [
          "message"
        ],
        "operationId": "getAllMessages",
        "parameters": [
          {
            "name": "conversationId",
            "in": "query",
            "description": "ID de la conversacion",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mensajes obtenidos exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Message"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity": {
      "post": {
        "summary": "Crear Oportunidad",
        "description": "Servicio para crear una nueva oportunidad de negocio.",
        "tags": [
          "opportunity"
        ],
        "operationId": "createOpportunity",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "name": {
                    "type": "string",
                    "description": "Nombre de la oportunidad"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descripcion de la oportunidad"
                  },
                  "assignedComercialId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del comercial asignado. Se puede obtener del servicio User: GetInformationByEmail"
                  },
                  "contactId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del contacto asociado a la oportunidad"
                  },
                  "amount": {
                    "type": "number",
                    "description": "Monto de la oportunidad"
                  },
                  "stageId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la etapa del proceso comercial"
                  },
                  "pipelineId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del proceso comercial (pipeline) al que pertenece la oportunidad"
                  },
                  "customFields": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/CustomField"
                    },
                    "description": "Campos personalizados"
                  }
                },
                "required": [
                  "workspaceId",
                  "name",
                  "description",
                  "amount"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Oportunidad creada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID de la oportunidad creada"
                        },
                        "opportunity": {
                          "$ref": "#/components/schemas/Opportunity"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "put": {
        "summary": "Actualizar Oportunidad",
        "description": "Servicio para actualizar los campos de una oportunidad existente.",
        "tags": [
          "opportunity"
        ],
        "operationId": "updateOpportunity",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "ID de la oportunidad a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre de la oportunidad"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descripcion de la oportunidad"
                  },
                  "amount": {
                    "type": "number",
                    "description": "Monto de la oportunidad"
                  },
                  "stageId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la etapa del proceso comercial"
                  },
                  "pipelineId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del proceso comercial (pipeline)"
                  },
                  "contactId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del contacto asociado"
                  },
                  "customFields": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/CustomField"
                    },
                    "description": "Campos personalizados"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Oportunidad actualizada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID de la oportunidad"
                        },
                        "opportunity": {
                          "$ref": "#/components/schemas/Opportunity"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "summary": "Obtener Oportunidades",
        "description": "Servicio para obtener todas las oportunidades del workspace. La respuesta viene paginada en bloques de 20 registros.",
        "tags": [
          "opportunity"
        ],
        "operationId": "getOpportunities",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto para filtrar oportunidades",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "continuationToken",
            "in": "query",
            "description": "Token de paginacion para obtener los siguientes registros. Si es null, no hay mas registros.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de oportunidades obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/PaginatedOpportunityResponse"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}": {
      "get": {
        "summary": "Obtener Oportunidad por ID",
        "description": "Servicio para obtener una oportunidad especifica filtrada por su ID.",
        "tags": [
          "opportunity"
        ],
        "operationId": "getOpportunityById",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Oportunidad obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Opportunity"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Oportunidad",
        "description": "Servicio para eliminar una oportunidad del workspace.",
        "tags": [
          "opportunity"
        ],
        "operationId": "deleteOpportunity",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deletionUserId",
            "in": "query",
            "description": "ID del usuario que realiza la eliminacion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Oportunidad eliminada exitosamente"
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}/activities": {
      "post": {
        "summary": "Agregar Actividad a Oportunidad",
        "description": "Servicio para agregar una nueva actividad a una oportunidad. Las actividades pueden ser: llamadas, mensajes de WhatsApp, envio de Email y agendamiento de reuniones.",
        "tags": [
          "opportunity"
        ],
        "operationId": "addOpportunityActivity",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "content": {
                    "type": "string",
                    "description": "Detalle del comentario o actividad"
                  },
                  "date": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Fecha de la actividad"
                  },
                  "categoryType": {
                    "type": "string",
                    "description": "Tipo de categoria: Calls, Meeting, Whatsapp, Email"
                  }
                },
                "required": [
                  "workspaceId",
                  "content",
                  "date",
                  "categoryType"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actividad registrada exitosamente en la oportunidad",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "summary": "Obtener Actividades de Oportunidad",
        "description": "Servicio para obtener las actividades registradas de una oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "getOpportunityActivities",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actividades de la oportunidad obtenidas exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Activity"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}/agent/activities": {
      "post": {
        "summary": "Actualizar Actividades del Agente en Oportunidad",
        "description": "Servicio para actualizar las actividades del agente asociadas a una oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "updateOpportunityAgentActivities",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "activities": {
                    "type": "array",
                    "description": "Lista de actividades del agente",
                    "items": {
                      "type": "object",
                      "properties": {
                        "content": {
                          "type": "string",
                          "description": "Contenido de la actividad"
                        },
                        "date": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de la actividad"
                        },
                        "categoryType": {
                          "type": "string",
                          "description": "Tipo de categoria"
                        }
                      },
                      "required": [
                        "content",
                        "date",
                        "categoryType"
                      ]
                    }
                  }
                },
                "required": [
                  "workspaceId",
                  "activities"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Actividades del agente actualizadas exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "summary": "Obtener Actividades del Agente en Oportunidad",
        "description": "Servicio para obtener las actividades del agente asociadas a una oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "getOpportunityAgentActivities",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actividades del agente obtenidas exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Activity"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}/files": {
      "post": {
        "summary": "Agregar Archivos a Oportunidad",
        "description": "Servicio para agregar archivos adjuntos a una oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "addFilesToOpportunity",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "files": {
                    "type": "string",
                    "format": "binary",
                    "description": "Archivo a subir"
                  }
                },
                "required": [
                  "files"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Archivos agregados exitosamente a la oportunidad",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}/files/{id}": {
      "delete": {
        "summary": "Eliminar Archivo de Oportunidad",
        "description": "Servicio para eliminar un archivo adjunto de una oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "deleteOpportunityFile",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "ID del archivo a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Archivo eliminado exitosamente de la oportunidad",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}/agent/activities/{id}": {
      "delete": {
        "summary": "Eliminar Actividad del Agente",
        "description": "Servicio para eliminar una actividad del agente asociada a una oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "deleteOpportunityAgentActivity",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "ID de la actividad a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actividad del agente eliminada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/sortOpportunityInCards": {
      "post": {
        "summary": "Reordenar Oportunidad en Kanban",
        "description": "Servicio para reordenar las oportunidades en la vista Kanban y opcionalmente cambiar de etapa del proceso comercial.",
        "tags": [
          "opportunity"
        ],
        "operationId": "sortOpportunityInCards",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "ID del workspace"
                  },
                  "opportunityId": {
                    "type": "string",
                    "description": "ID de la oportunidad a mover"
                  },
                  "fromStageId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la etapa de origen"
                  },
                  "toStageId": {
                    "type": "string",
                    "description": "ID de la etapa de destino"
                  },
                  "previousOpportunityId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la oportunidad anterior en la columna"
                  },
                  "postOpportunityId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID de la oportunidad posterior en la columna"
                  }
                },
                "required": [
                  "workspaceId",
                  "opportunityId",
                  "toStageId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Oportunidad reordenada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/{opportunityId}/activities/{activityId}/toggle": {
      "put": {
        "summary": "Toggle Completar Actividad",
        "description": "Servicio para alternar el estado de completado de una actividad de la oportunidad.",
        "tags": [
          "opportunity"
        ],
        "operationId": "toggleActivityCompleted",
        "parameters": [
          {
            "name": "opportunityId",
            "in": "path",
            "description": "ID de la oportunidad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activityId",
            "in": "path",
            "description": "ID de la actividad",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Estado de actividad actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "code": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "activityId": {
                          "type": "string"
                        },
                        "completed": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/opportunity/viewlist/activities": {
      "get": {
        "summary": "Listar Actividades por Vista",
        "description": "Servicio para listar actividades de oportunidades con filtros de vista y paginacion.",
        "tags": [
          "opportunity"
        ],
        "operationId": "getViewlistActivities",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Campo de ordenamiento (default: date)",
            "required": false,
            "schema": {
              "type": "string",
              "default": "date"
            }
          },
          {
            "name": "continuationToken",
            "in": "query",
            "description": "Token para paginacion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viewId",
            "in": "query",
            "description": "ID de la vista para aplicar filtros",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Actividades obtenidas exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/masterOfPipelines": {
      "post": {
        "summary": "Crear Proceso Comercial",
        "description": "Servicio para crear un nuevo proceso comercial (pipeline) en el workspace con sus etapas.",
        "tags": [
          "proceso-comercial"
        ],
        "operationId": "createPipeline",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del proceso comercial"
                  },
                  "isDefault": {
                    "type": "boolean",
                    "description": "Si es el proceso comercial por defecto",
                    "default": false
                  },
                  "stages": {
                    "type": "array",
                    "description": "Etapas iniciales del proceso comercial",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Nombre de la etapa"
                        },
                        "color": {
                          "type": "string",
                          "description": "Color hex de la etapa"
                        },
                        "indexOrder": {
                          "type": "integer",
                          "description": "Orden de la etapa"
                        }
                      },
                      "required": [
                        "name"
                      ]
                    }
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Proceso comercial creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/masterOfPipelines/{pipelineId}": {
      "put": {
        "summary": "Actualizar Proceso Comercial",
        "description": "Servicio para actualizar un proceso comercial existente.",
        "tags": [
          "proceso-comercial"
        ],
        "operationId": "updatePipeline",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "ID del proceso comercial",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del proceso comercial"
                  },
                  "isDefault": {
                    "type": "boolean",
                    "description": "Si es el proceso comercial por defecto"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Proceso comercial actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Proceso Comercial",
        "description": "Servicio para eliminar un proceso comercial del workspace.",
        "tags": [
          "proceso-comercial"
        ],
        "operationId": "deletePipeline",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "ID del proceso comercial a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Proceso comercial eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/masterOfPipelines/{pipelineId}/stages": {
      "post": {
        "summary": "Crear Etapa en Proceso Comercial",
        "description": "Servicio para agregar una nueva etapa a un proceso comercial existente.",
        "tags": [
          "proceso-comercial"
        ],
        "operationId": "createPipelineStage",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "ID del proceso comercial",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre de la etapa"
                  },
                  "color": {
                    "type": "string",
                    "description": "Color hex de la etapa (ej: #3B82F6)"
                  },
                  "indexOrder": {
                    "type": "integer",
                    "description": "Orden de la etapa en el proceso comercial"
                  },
                  "isArchived": {
                    "type": "boolean",
                    "description": "Si la etapa esta archivada",
                    "default": false
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Etapa creada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/masterOfPipelines/{pipelineId}/stages/{stageId}": {
      "put": {
        "summary": "Actualizar Etapa del Proceso Comercial",
        "description": "Servicio para actualizar una etapa existente de un proceso comercial.",
        "tags": [
          "proceso-comercial"
        ],
        "operationId": "updatePipelineStage",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "ID del proceso comercial",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stageId",
            "in": "path",
            "description": "ID de la etapa a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre de la etapa"
                  },
                  "color": {
                    "type": "string",
                    "description": "Color hex de la etapa"
                  },
                  "indexOrder": {
                    "type": "integer",
                    "description": "Orden de la etapa"
                  },
                  "isArchived": {
                    "type": "boolean",
                    "description": "Si la etapa esta archivada"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Etapa actualizada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Etapa del Proceso Comercial",
        "description": "Servicio para eliminar una etapa de un proceso comercial.",
        "tags": [
          "proceso-comercial"
        ],
        "operationId": "deletePipelineStage",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "ID del proceso comercial",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stageId",
            "in": "path",
            "description": "ID de la etapa a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Etapa eliminada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/task": {
      "post": {
        "summary": "Crear Tarea",
        "description": "Servicio para crear una nueva tarea en el workspace.",
        "tags": [
          "task"
        ],
        "operationId": "createTask",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "name": {
                    "type": "string",
                    "description": "Nombre de la tarea"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descripcion de la tarea"
                  },
                  "notes": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Notas adicionales de la tarea"
                  },
                  "expirationDate": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time",
                    "description": "Fecha de vencimiento"
                  },
                  "assignedUserId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del usuario asignado"
                  },
                  "contactId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del contacto asociado"
                  }
                },
                "required": [
                  "workspaceId",
                  "name",
                  "description"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tarea creada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "taskId": {
                          "type": "string",
                          "description": "ID de la tarea creada"
                        },
                        "task": {
                          "$ref": "#/components/schemas/Task"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "summary": "Obtener Tareas",
        "description": "Servicio para obtener la lista de tareas del workspace con filtros opcionales.",
        "tags": [
          "task"
        ],
        "operationId": "getTasks",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "description": "ID del contacto para filtrar tareas",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pageNumber",
            "in": "query",
            "description": "Numero de pagina",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Cantidad de registros por pagina",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filtrar por nombre de tarea",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectStatusId",
            "in": "query",
            "description": "Filtrar por estado del proyecto",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de tareas obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Task"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/task/{taskId}": {
      "get": {
        "summary": "Obtener Tarea por ID",
        "description": "Servicio para obtener la informacion de una tarea especifica filtrada por su ID.",
        "tags": [
          "task"
        ],
        "operationId": "getTaskById",
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "description": "ID de la tarea",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tarea obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Task"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "put": {
        "summary": "Actualizar Tarea",
        "description": "Servicio para actualizar los campos de una tarea existente.",
        "tags": [
          "task"
        ],
        "operationId": "updateTask",
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "description": "ID de la tarea a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre de la tarea"
                  },
                  "description": {
                    "type": "string",
                    "description": "Descripcion de la tarea"
                  },
                  "notes": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Notas adicionales"
                  },
                  "expirationDate": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time",
                    "description": "Fecha de vencimiento"
                  },
                  "statusId": {
                    "type": "integer",
                    "description": "ID del estado (1=Pendiente, 2=En progreso, 3=Completada)"
                  },
                  "assignedUserId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del usuario asignado"
                  },
                  "contactId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID del contacto asociado"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tarea actualizada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID de la tarea"
                        },
                        "name": {
                          "type": "string",
                          "description": "Nombre de la tarea actualizada"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Tarea",
        "description": "Servicio para eliminar una tarea del workspace.",
        "tags": [
          "task"
        ],
        "operationId": "deleteTask",
        "parameters": [
          {
            "name": "taskId",
            "in": "path",
            "description": "ID de la tarea a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tarea eliminada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/template": {
      "get": {
        "summary": "Listar Plantillas",
        "description": "Servicio para obtener la lista de todas las plantillas de WhatsApp del workspace.",
        "tags": [
          "template"
        ],
        "operationId": "listTemplates",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de plantillas obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Template"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Crear Plantilla",
        "description": "Servicio para crear una nueva plantilla de WhatsApp. La plantilla sera enviada a Meta para aprobacion.",
        "tags": [
          "template"
        ],
        "operationId": "createTemplate",
        "parameters": [
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "userId": {
                    "type": "string",
                    "description": "ID del usuario que crea la plantilla"
                  },
                  "elementName": {
                    "type": "string",
                    "description": "Nombre de la plantilla"
                  },
                  "languageCode": {
                    "type": "string",
                    "description": "Codigo de idioma (ej: es, en)"
                  },
                  "category": {
                    "type": "string",
                    "description": "Categoria de la plantilla: MARKETING, UTILITY, AUTHENTICATION"
                  },
                  "templateType": {
                    "type": "string",
                    "description": "Tipo de plantilla: TEXT, IMAGE, VIDEO, DOCUMENT"
                  },
                  "components": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/TemplateComponent"
                    },
                    "description": "Componentes de la plantilla (HEADER, BODY, FOOTER, BUTTONS)"
                  }
                },
                "required": [
                  "workspaceId",
                  "userId",
                  "elementName",
                  "languageCode",
                  "category",
                  "templateType",
                  "components"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Plantilla creada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "plantilla": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "ID de la plantilla creada"
                            },
                            "elementName": {
                              "type": "string",
                              "description": "Nombre de la plantilla"
                            },
                            "status": {
                              "type": "string",
                              "description": "Estado de la plantilla (ej: APPROVED, PENDING, REJECTED)"
                            }
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/template/actives": {
      "get": {
        "summary": "Listar Plantillas Activas",
        "description": "Servicio para obtener solo las plantillas activas (aprobadas) del workspace.",
        "tags": [
          "template"
        ],
        "operationId": "listActiveTemplates",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de plantillas activas obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Template"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/template/{id}": {
      "get": {
        "summary": "Obtener Plantilla",
        "description": "Servicio para obtener una plantilla especifica por su ID.",
        "tags": [
          "template"
        ],
        "operationId": "getTemplate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID de la plantilla",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Plantilla obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Template"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "put": {
        "summary": "Actualizar Plantilla",
        "description": "Servicio para actualizar una plantilla de WhatsApp existente.",
        "tags": [
          "template"
        ],
        "operationId": "updateTemplate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID de la plantilla a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  },
                  "elementName": {
                    "type": "string",
                    "description": "Nombre de la plantilla"
                  },
                  "languageCode": {
                    "type": "string",
                    "description": "Codigo de idioma"
                  },
                  "category": {
                    "type": "string",
                    "description": "Categoria de la plantilla"
                  },
                  "templateType": {
                    "type": "string",
                    "description": "Tipo de plantilla"
                  },
                  "components": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/TemplateComponent"
                    },
                    "description": "Componentes de la plantilla"
                  }
                },
                "required": [
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Plantilla actualizada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Plantilla",
        "description": "Servicio para eliminar una plantilla de WhatsApp.",
        "tags": [
          "template"
        ],
        "operationId": "deleteTemplate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID de la plantilla a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Plantilla eliminada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/template/sync-status": {
      "get": {
        "summary": "Estado de Sincronizacion",
        "description": "Servicio para verificar el estado de sincronizacion de las plantillas con Meta/WhatsApp.",
        "tags": [
          "template"
        ],
        "operationId": "getTemplateSyncStatus",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Estado de sincronizacion obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "isSynced": {
                          "type": "boolean",
                          "description": "Indica si las plantillas estan sincronizadas"
                        },
                        "lastSyncDate": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "format": "date-time",
                          "description": "Fecha de la ultima sincronizacion"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/template/{templateId}/activate": {
      "post": {
        "summary": "Activar Plantilla",
        "description": "Servicio para activar una plantilla de WhatsApp.",
        "tags": [
          "template"
        ],
        "operationId": "activateTemplate",
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID de la plantilla a activar",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string",
                    "description": "Identificador del workspace"
                  }
                },
                "required": [
                  "workspaceId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Plantilla activada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user": {
      "post": {
        "summary": "Crear Usuario",
        "description": "Servicio para crear un nuevo usuario en la plataforma.",
        "tags": [
          "user"
        ],
        "operationId": "createUser",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del usuario"
                  },
                  "lastName": {
                    "type": "string",
                    "description": "Apellido del usuario"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Correo electronico del usuario"
                  },
                  "password": {
                    "type": "string",
                    "description": "Contrasena del usuario"
                  },
                  "defaultStartWeek": {
                    "type": "integer",
                    "description": "Dia de inicio de semana (0=Domingo, 1=Lunes)",
                    "default": 0
                  },
                  "company": {
                    "type": "string",
                    "description": "Codigo de la compania. Para Plazbot usar: 'plazbot'"
                  },
                  "isExternalCreation": {
                    "type": "boolean",
                    "description": "Indica si es una creacion externa del usuario",
                    "default": true
                  }
                },
                "required": [
                  "name",
                  "lastName",
                  "email",
                  "password",
                  "company"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Usuario creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "userId": {
                          "type": "string",
                          "description": "ID del usuario creado"
                        },
                        "email": {
                          "type": "string",
                          "description": "Email del usuario"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "summary": "Obtener Usuarios",
        "description": "Servicio para obtener la lista de usuarios asociados a un workspace.",
        "tags": [
          "user"
        ],
        "operationId": "getUsers",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "query",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-workspace-id",
            "in": "header",
            "description": "Identificador del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de usuarios obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/User"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user/{id}": {
      "get": {
        "summary": "Obtener Usuario por ID",
        "description": "Servicio para obtener la informacion de un usuario especifico por su ID.",
        "tags": [
          "user"
        ],
        "operationId": "getUserById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del usuario",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Usuario obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/User"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "put": {
        "summary": "Actualizar Usuario",
        "description": "Servicio para actualizar la informacion de un usuario.",
        "tags": [
          "user"
        ],
        "operationId": "updateUser",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del usuario a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del usuario"
                  },
                  "lastName": {
                    "type": "string",
                    "description": "Apellido del usuario"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Correo electronico"
                  },
                  "role": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Rol del usuario"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Usuario actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/User"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Usuario",
        "description": "Servicio para eliminar un usuario de la plataforma.",
        "tags": [
          "user"
        ],
        "operationId": "deleteUser",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del usuario a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Usuario eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user/email": {
      "get": {
        "summary": "Obtener Usuario por Email",
        "description": "Servicio para obtener la informacion de un usuario filtrado por correo electronico.",
        "tags": [
          "user"
        ],
        "operationId": "getUserByEmail",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "description": "Correo electronico del usuario a buscar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Usuario obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/User"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user/login": {
      "post": {
        "summary": "Iniciar Sesion",
        "description": "Servicio para validar el acceso a la plataforma mediante usuario y contrasena. Retorna un token Bearer para autenticacion.",
        "tags": [
          "user"
        ],
        "operationId": "loginUser",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Correo electronico del usuario"
                  },
                  "password": {
                    "type": "string",
                    "description": "Contrasena del usuario"
                  }
                },
                "required": [
                  "email",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Inicio de sesion exitoso",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "token": {
                          "type": "string",
                          "description": "Token Bearer para autenticacion"
                        },
                        "user": {
                          "$ref": "#/components/schemas/User"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/user/sendEmailToResetPassword": {
      "post": {
        "summary": "Enviar Email para Restablecer Contrasena",
        "description": "Servicio para enviar un correo electronico al usuario con instrucciones para restablecer su contrasena.",
        "tags": [
          "user"
        ],
        "operationId": "sendResetPasswordEmail",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Correo electronico del usuario"
                  },
                  "company": {
                    "type": "string",
                    "description": "Codigo de la compania. Para socios marca blanca cada socio tiene su propio codigo. Para Plazbot usar: 'plazbot'"
                  }
                },
                "required": [
                  "email",
                  "company"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Correo de restablecimiento enviado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/user/resetPassword": {
      "post": {
        "summary": "Restablecer Contrasena",
        "description": "Servicio para restablecer la contrasena del usuario utilizando el token de verificacion recibido por correo.",
        "tags": [
          "user"
        ],
        "operationId": "resetPassword",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Correo electronico del usuario"
                  },
                  "newPassword": {
                    "type": "string",
                    "description": "Nueva contrasena del usuario"
                  },
                  "verificationId": {
                    "type": "string",
                    "description": "Token de verificacion recibido por correo"
                  }
                },
                "required": [
                  "email",
                  "newPassword",
                  "verificationId"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contrasena restablecida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/api/user/{userId}/avatar": {
      "post": {
        "summary": "Subir Avatar",
        "description": "Servicio para subir o actualizar la imagen de avatar del usuario.",
        "tags": [
          "user"
        ],
        "operationId": "uploadUserAvatar",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID del usuario",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Imagen del avatar"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Avatar subido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user/avatar/{userId}": {
      "delete": {
        "summary": "Eliminar Avatar",
        "description": "Servicio para eliminar la imagen de avatar del usuario.",
        "tags": [
          "user"
        ],
        "operationId": "deleteUserAvatar",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID del usuario",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Avatar eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user/{id}/tokens": {
      "get": {
        "summary": "Listar Tokens del Usuario",
        "description": "Servicio para obtener la lista de tokens API de un usuario.",
        "tags": [
          "user"
        ],
        "operationId": "listUserTokens",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del usuario",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de tokens obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Nombre del token"
                          },
                          "value": {
                            "type": "string",
                            "description": "Valor del token"
                          },
                          "creationDate": {
                            "type": "string",
                            "format": "date-time",
                            "description": "Fecha de creacion"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Crear Token del Usuario",
        "description": "Servicio para crear un nuevo token API para un usuario.",
        "tags": [
          "user"
        ],
        "operationId": "createUserToken",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del usuario",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre descriptivo del token"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Token creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Nombre del token"
                        },
                        "value": {
                          "type": "string",
                          "description": "Valor del token generado"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/user/{userId}/tokens/{tokenvalue}": {
      "delete": {
        "summary": "Eliminar Token del Usuario",
        "description": "Servicio para eliminar un token API de un usuario.",
        "tags": [
          "user"
        ],
        "operationId": "deleteUserToken",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID del usuario",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tokenvalue",
            "in": "path",
            "description": "Valor del token a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Token eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace": {
      "post": {
        "summary": "Crear Workspace",
        "description": "Servicio para crear un nuevo workspace en la plataforma.",
        "tags": [
          "workspace"
        ],
        "operationId": "createWorkspace",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del workspace"
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Descripcion del workspace"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Workspace creado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Workspace"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{id}": {
      "get": {
        "summary": "Obtener Workspace",
        "description": "Servicio que extrae toda la informacion del workspace, incluyendo etapas, procesos comerciales, segmentacion, etiquetas e integraciones.",
        "tags": [
          "workspace"
        ],
        "operationId": "getWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Workspace"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "put": {
        "summary": "Actualizar Workspace",
        "description": "Servicio para actualizar la informacion de un workspace existente.",
        "tags": [
          "workspace"
        ],
        "operationId": "updateWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del workspace a actualizar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Nombre del workspace"
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Descripcion del workspace"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Workspace actualizado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "$ref": "#/components/schemas/Workspace"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "delete": {
        "summary": "Eliminar Workspace",
        "description": "Servicio para eliminar un workspace de la plataforma. Esta accion es irreversible.",
        "tags": [
          "workspace"
        ],
        "operationId": "deleteWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del workspace a eliminar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace eliminado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/metrics": {
      "get": {
        "summary": "Obtener Metricas del Workspace",
        "description": "Servicio para obtener las metricas y estadisticas del workspace.",
        "tags": [
          "workspace"
        ],
        "operationId": "getWorkspaceMetrics",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Metricas obtenidas exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "totalContacts": {
                          "type": "integer",
                          "description": "Total de contactos"
                        },
                        "totalConversations": {
                          "type": "integer",
                          "description": "Total de conversaciones"
                        },
                        "totalOpportunities": {
                          "type": "integer",
                          "description": "Total de oportunidades"
                        },
                        "totalTasks": {
                          "type": "integer",
                          "description": "Total de tareas"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/users": {
      "post": {
        "summary": "Agregar Usuario al Workspace",
        "description": "Servicio para agregar un usuario existente a un workspace con un rol especifico.",
        "tags": [
          "workspace"
        ],
        "operationId": "addUserToWorkspace",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "userId": {
                    "type": "string",
                    "description": "ID del usuario a agregar"
                  },
                  "role": {
                    "type": "string",
                    "description": "Rol del usuario en el workspace"
                  }
                },
                "required": [
                  "userId",
                  "role"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Usuario agregado exitosamente al workspace",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/usersByWorkspaceId/{id}": {
      "get": {
        "summary": "Listar Usuarios del Workspace",
        "description": "Servicio para obtener la lista de usuarios asociados a un workspace.",
        "tags": [
          "workspace"
        ],
        "operationId": "listWorkspaceUsers",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de usuarios del workspace obtenida exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/User"
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/workspaceByUserId/{id}/{workspace}": {
      "delete": {
        "summary": "Eliminar Usuario del Workspace",
        "description": "Servicio para remover un usuario de un workspace.",
        "tags": [
          "workspace"
        ],
        "operationId": "removeUserFromWorkspace",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID del usuario a remover",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "workspace",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Usuario removido exitosamente del workspace",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos de la respuesta"
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Datos invalidos o faltantes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/onboarding-link": {
      "get": {
        "summary": "Obtener Link de Onboarding",
        "description": "Obtiene el link de onboarding activo para un tipo de integracion especifico. Retorna el link existente con su token y fecha de expiracion. Si no existe un link activo, retorna null en data.",
        "tags": [
          "workspace"
        ],
        "operationId": "getOnboardingLink",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Tipo de integracion. Valores validos: `whatsapp`, `whatsapp_business`, `facebook`, `instagram`",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "whatsapp",
                "whatsapp_business",
                "facebook",
                "instagram"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Link de onboarding obtenido exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Datos del link de onboarding",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID unico del link"
                        },
                        "type": {
                          "type": "string",
                          "description": "Tipo de integracion (whatsapp, whatsapp_business, facebook, instagram)"
                        },
                        "token": {
                          "type": "string",
                          "description": "Token unico del link"
                        },
                        "shortUrl": {
                          "type": "string",
                          "description": "URL corta lista para compartir. Ejemplo: https://co.plzb.link/La_tk_xxx"
                        },
                        "expiresAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de expiracion del link (7 dias desde la creacion)"
                        },
                        "isActive": {
                          "type": "boolean",
                          "description": "Indica si el link esta activo"
                        },
                        "createdAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de creacion del link"
                        },
                        "createdBy": {
                          "type": "string",
                          "description": "ID del usuario que creo el link"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Tipo invalido o faltante",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "post": {
        "summary": "Generar Link de Onboarding",
        "description": "Genera un nuevo link de onboarding compartible para que un usuario externo (sin acceso a la plataforma) pueda conectar una cuenta de WhatsApp, WhatsApp Business, Facebook Messenger o Instagram. El link generado expira en 7 dias. La URL compartible se construye como: `https://co.plzb.link/{token}`",
        "tags": [
          "workspace"
        ],
        "operationId": "generateOnboardingLink",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "Tipo de integracion a conectar",
                    "enum": [
                      "whatsapp",
                      "whatsapp_business",
                      "facebook",
                      "instagram"
                    ]
                  }
                },
                "required": [
                  "type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Link de onboarding generado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "description": "Datos del link generado",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID unico del link"
                        },
                        "type": {
                          "type": "string",
                          "description": "Tipo de integracion"
                        },
                        "token": {
                          "type": "string",
                          "description": "Token unico del link"
                        },
                        "shortUrl": {
                          "type": "string",
                          "description": "URL corta lista para compartir. Ejemplo: https://co.plzb.link/La_tk_xxx"
                        },
                        "expiresAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de expiracion del link (7 dias)"
                        },
                        "isActive": {
                          "type": "boolean",
                          "description": "Indica si el link esta activo"
                        },
                        "createdAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de creacion"
                        },
                        "createdBy": {
                          "type": "string",
                          "description": "ID del usuario creador"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Tipo invalido o faltante",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/onboarding-link/regenerate": {
      "post": {
        "summary": "Regenerar Link de Onboarding",
        "description": "Invalida el link de onboarding existente para el tipo especificado y genera uno nuevo. El link anterior dejara de funcionar inmediatamente. Util cuando un link ha sido comprometido o necesita ser renovado. El nuevo link expira en 7 dias.",
        "tags": [
          "workspace"
        ],
        "operationId": "regenerateOnboardingLink",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "Tipo de integracion a regenerar",
                    "enum": [
                      "whatsapp",
                      "whatsapp_business",
                      "facebook",
                      "instagram"
                    ]
                  }
                },
                "required": [
                  "type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Link regenerado exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "description": "Datos del nuevo link generado",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID unico del nuevo link"
                        },
                        "type": {
                          "type": "string",
                          "description": "Tipo de integracion"
                        },
                        "token": {
                          "type": "string",
                          "description": "Nuevo token unico del link"
                        },
                        "shortUrl": {
                          "type": "string",
                          "description": "URL corta lista para compartir. Ejemplo: https://co.plzb.link/La_tk_xxx"
                        },
                        "expiresAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de expiracion del nuevo link (7 dias)"
                        },
                        "isActive": {
                          "type": "boolean",
                          "description": "Indica si el link esta activo"
                        },
                        "createdAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de creacion"
                        },
                        "createdBy": {
                          "type": "string",
                          "description": "ID del usuario creador"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - Tipo invalido o faltante",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/api/workspace/{workspaceId}/integrations/{integrationId}/activate": {
      "post": {
        "summary": "Activar Integracion",
        "description": "Activa o desactiva una integracion del workspace. Este endpoint permite conectar o desconectar canales como WhatsApp, Messenger, Instagram o Telegram. Cuando se activa, la integracion comienza a recibir y procesar mensajes del canal asociado.",
        "tags": [
          "workspace"
        ],
        "operationId": "activateIntegration",
        "parameters": [
          {
            "name": "workspaceId",
            "in": "path",
            "description": "ID del workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "integrationId",
            "in": "path",
            "description": "ID de la integracion a activar o desactivar",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "isActive": {
                    "type": "boolean",
                    "description": "true para activar (conectar) la integracion, false para desactivar (desconectar)"
                  }
                },
                "required": [
                  "isActive"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Integracion activada o desactivada exitosamente",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "Indica si la operacion fue exitosa"
                    },
                    "code": {
                      "type": "integer",
                      "description": "Codigo HTTP de la respuesta"
                    },
                    "errorCode": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Codigo de error, null si no hay error"
                    },
                    "message": {
                      "type": "string",
                      "description": "Mensaje descriptivo del resultado"
                    },
                    "data": {
                      "type": "object",
                      "description": "Datos de la integracion actualizada",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "ID unico de la integracion"
                        },
                        "type": {
                          "type": "string",
                          "description": "Tipo de integracion (whatsapp, facebook, instagram, telegram)"
                        },
                        "isActive": {
                          "type": "integer",
                          "description": "Estado de la integracion. 1 = activa, 0 = inactiva"
                        },
                        "aliasName": {
                          "type": "string",
                          "description": "Nombre personalizado de la integracion"
                        },
                        "srcName": {
                          "type": "string",
                          "description": "Nombre de origen de la integracion"
                        },
                        "cellphoneNumber": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Numero de telefono asociado (solo para WhatsApp)"
                        },
                        "cellphoneNumberFormat": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Numero de telefono formateado (solo para WhatsApp)"
                        },
                        "creationDate": {
                          "type": "string",
                          "format": "date-time",
                          "description": "Fecha de creacion de la integracion"
                        }
                      }
                    }
                  },
                  "required": [
                    "success",
                    "code",
                    "errorCode",
                    "message",
                    "data"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Solicitud incorrecta - ID de integracion invalido o body faltante",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado - Token Bearer requerido o invalido",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No encontrado - Integracion o workspace no existe",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Token de autenticacion Bearer. Obtenga el token usando el endpoint /api/user/login"
      }
    },
    "schemas": {
      "AgentLogEvent": {
        "type": "object",
        "description": "Evento del monitor del agente de IA. Cada interaccion del agente genera multiples eventos que registran el flujo completo de procesamiento.",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha y hora UTC del evento",
            "example": "2026-03-14 15:30:01"
          },
          "workspace_id": {
            "type": "string",
            "description": "ID del workspace"
          },
          "agent_id": {
            "type": "string",
            "description": "ID del agente de IA"
          },
          "contact_id": {
            "type": "string",
            "description": "ID del contacto (vacio si no aplica)"
          },
          "contact_name": {
            "type": "string",
            "description": "Nombre del contacto para display",
            "example": "Maria Garcia"
          },
          "session_id": {
            "type": "string",
            "description": "ID de sesion. En WhatsApp es el numero de telefono, en Messenger el Facebook User ID, en Instagram el IG User ID, en Telegram el TG User ID.",
            "example": "51932114990"
          },
          "event_type": {
            "type": "string",
            "description": "Tipo de evento",
            "enum": [
              "msg_in",
              "msg_out",
              "model",
              "tool_call",
              "api_req",
              "api_res",
              "action",
              "rag",
              "tokens",
              "error",
              "bot_off",
              "session_field"
            ],
            "example": "msg_in"
          },
          "event_title": {
            "type": "string",
            "description": "Titulo corto del evento para mostrar en el monitor. Ejemplos: mensaje del contacto, nombre de herramienta, URL del servicio, accion ejecutada.",
            "example": "Hola, quiero informacion de precios"
          },
          "event_data": {
            "type": "string",
            "description": "JSON string con datos especificos del evento. El contenido varia segun el event_type. Para msg_in/msg_out contiene el mensaje completo, para tool_call los argumentos, para api_req el body del request, para action los detalles de la accion, para tokens el consumo.",
            "example": "{\"message\":\"Hola, quiero informacion de precios\",\"platform\":\"whatsapp\"}"
          },
          "duration_ms": {
            "type": "integer",
            "description": "Duracion en milisegundos (relevante para api_res y tool_call)",
            "example": 340
          },
          "level": {
            "type": "string",
            "description": "Nivel de severidad del evento",
            "enum": [
              "info",
              "warning",
              "error"
            ],
            "example": "info"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Respuesta de error estandar de la API",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Siempre false en errores"
          },
          "code": {
            "type": "integer",
            "description": "Codigo HTTP del error"
          },
          "errorCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Codigo de error especifico"
          },
          "message": {
            "type": "string",
            "description": "Mensaje descriptivo del error"
          }
        },
        "required": [
          "success",
          "code",
          "message"
        ]
      },
      "Tag": {
        "type": "object",
        "description": "Etiqueta asignada a un contacto u oportunidad",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico de la etiqueta"
          },
          "name": {
            "type": "string",
            "description": "Nombre de la etiqueta"
          },
          "color": {
            "type": [
              "string",
              "null"
            ],
            "description": "Color de la etiqueta en formato hexadecimal"
          },
          "assignmentDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Fecha de asignacion de la etiqueta",
            "format": "date-time"
          }
        }
      },
      "CustomField": {
        "type": "object",
        "description": "Campo personalizado definido por el usuario",
        "properties": {
          "code": {
            "type": "string",
            "description": "Codigo del campo personalizado (Variable)"
          },
          "value": {
            "type": "string",
            "description": "Valor de la variable personalizada"
          }
        }
      },
      "EventVariable": {
        "type": "object",
        "description": "Variable personalizada de un evento. El codigo debe existir en Configuracion -> Variables (modulo Eventos). Las variables cuyo codigo no exista se descartan silenciosamente.",
        "properties": {
          "code": {
            "type": "string",
            "description": "Codigo de la variable (module = 3). Las variables de evento tienen scope de contacto, por lo que su codigo usa el prefijo ctc_ (ej: ctc_1234567)"
          },
          "val": {
            "type": "string",
            "description": "Valor de la variable de evento"
          }
        }
      },
      "Contact": {
        "type": "object",
        "description": "Informacion completa de un contacto en el workspace",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico del contacto"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion del contacto"
          },
          "assignedAgentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del agente asignado al contacto"
          },
          "assignedAgentName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nombre del agente asignado"
          },
          "segmentationId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de segmentacion del contacto"
          },
          "lastMessage": {
            "type": [
              "string",
              "null"
            ],
            "description": "Ultimo mensaje del contacto"
          },
          "lastMessageDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha del ultimo mensaje"
          },
          "platformSenderId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del remitente en la plataforma"
          },
          "platformSenderName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nombre del remitente en la plataforma"
          },
          "platformSenderPhone": {
            "type": [
              "string",
              "null"
            ],
            "description": "Telefono del remitente en la plataforma"
          },
          "platformSenderEmail": {
            "type": [
              "string",
              "null"
            ],
            "description": "Email del remitente en la plataforma"
          },
          "isRead": {
            "type": "boolean",
            "description": "Indica si el contacto ha sido leido"
          },
          "isBotEnabled": {
            "type": "boolean",
            "description": "Indica si el bot esta habilitado para este contacto"
          },
          "isManuallyAdded": {
            "type": "boolean",
            "description": "Indica si el contacto fue agregado manualmente"
          },
          "avatarColor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Color del avatar del contacto"
          },
          "orderInCards": {
            "type": "integer",
            "description": "Orden del contacto en la vista de tarjetas"
          },
          "orderInCardsLastUpdated": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de ultima actualizacion del orden"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            },
            "description": "Etiquetas asignadas al contacto"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            },
            "description": "Campos personalizados del contacto"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Archivos adjuntos del contacto"
          },
          "isSolved": {
            "type": "boolean",
            "description": "Indica si la conversacion esta resuelta"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace al que pertenece"
          },
          "name": {
            "type": "string",
            "description": "Nombre del contacto"
          },
          "lastname": {
            "type": "string",
            "description": "Apellido del contacto"
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "description": "Correo electronico del contacto"
          },
          "platformId": {
            "type": "integer",
            "description": "ID del canal del contacto (1=Webchat, 2=WhatsApp, 3=Facebook, 4=Instagram, 5=Telegram, 6=Portal, 7=Code, 8=Llamada, 9=Facebook Leads, 10=Tickos, 11=TikTok)"
          },
          "stageId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de la etapa del contacto"
          },
          "internalWhatsappNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Numero interno de WhatsApp del contacto"
          },
          "blocked": {
            "type": "boolean",
            "description": "Indica si el contacto esta bloqueado"
          }
        }
      },
      "Opportunity": {
        "type": "object",
        "description": "Oportunidad de negocio asociada a un contacto",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico de la oportunidad"
          },
          "opportCode": {
            "type": "string",
            "description": "Codigo de la oportunidad"
          },
          "opportStatus": {
            "type": "integer",
            "description": "Estado de la oportunidad"
          },
          "winLossStatus": {
            "type": "integer",
            "description": "Estado de ganancia/perdida"
          },
          "winLossDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de ganancia o perdida"
          },
          "finalAmount": {
            "type": "number",
            "description": "Monto final de la oportunidad"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          },
          "creationTypeId": {
            "type": "integer",
            "description": "Tipo de creacion (1=Manual, 2=Automatica)"
          },
          "updatedDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de ultima actualizacion"
          },
          "deletionDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de eliminacion"
          },
          "userDeletion": {
            "type": [
              "string",
              "null"
            ],
            "description": "Usuario que elimino la oportunidad"
          },
          "statusId": {
            "type": "integer",
            "description": "ID del estado"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Archivos adjuntos"
          },
          "orderInCards": {
            "type": "integer",
            "description": "Orden en tarjetas"
          },
          "orderInCardsLastUpdated": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Ultima actualizacion del orden"
          },
          "activities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Actividades asociadas"
          },
          "segmentationId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de segmentacion"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "name": {
            "type": "string",
            "description": "Nombre de la oportunidad"
          },
          "description": {
            "type": "string",
            "description": "Descripcion de la oportunidad"
          },
          "amount": {
            "type": "number",
            "description": "Monto de la oportunidad"
          },
          "userCreation": {
            "type": "string",
            "description": "Usuario que creo la oportunidad"
          },
          "contactId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del contacto asociado"
          },
          "expirationDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de expiracion"
          },
          "assignedAgentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del agente asignado"
          },
          "stageId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de la etapa del proceso comercial"
          },
          "pipelineId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del proceso comercial (pipeline) al que pertenece la oportunidad"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            },
            "description": "Campos personalizados"
          }
        }
      },
      "Task": {
        "type": "object",
        "description": "Tarea del workspace",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico de la tarea"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "name": {
            "type": "string",
            "description": "Nombre de la tarea"
          },
          "description": {
            "type": "string",
            "description": "Descripcion de la tarea"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          },
          "updatedDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de ultima actualizacion"
          },
          "expirationDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de vencimiento"
          },
          "statusId": {
            "type": "integer",
            "description": "ID del estado de la tarea (1=Pendiente, 2=En progreso, 3=Completada)"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "description": "Notas adicionales de la tarea"
          },
          "asignedUsers": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Usuarios asignados a la tarea"
          },
          "projectStatusId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del estado del proyecto"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Archivos adjuntos"
          },
          "project": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Proyectos asociados"
          },
          "subTask": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Subtareas"
          },
          "orderInCards": {
            "type": "integer",
            "description": "Orden en tarjetas"
          },
          "orderInCardsLastUpdated": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Ultima actualizacion del orden"
          }
        }
      },
      "TemplateComponent": {
        "type": "object",
        "description": "Componente de una plantilla de WhatsApp (HEADER, BODY, FOOTER, BUTTONS)",
        "properties": {
          "type": {
            "type": "string",
            "description": "Tipo de componente: HEADER, BODY, FOOTER, BUTTONS"
          },
          "format": {
            "type": [
              "string",
              "null"
            ],
            "description": "Formato del componente (ej: TEXT, IMAGE, VIDEO, DOCUMENT)"
          },
          "text": {
            "type": [
              "string",
              "null"
            ],
            "description": "Texto del componente"
          },
          "buttons": {
            "type": "array",
            "description": "Botones del componente",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "description": "Tipo de boton: QUICK_REPLY, URL, PHONE_NUMBER"
                },
                "text": {
                  "type": "string",
                  "description": "Texto del boton"
                },
                "phone_number": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Numero de telefono (solo para tipo PHONE_NUMBER)"
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "URL (solo para tipo URL)"
                },
                "tagIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "IDs de etiquetas asociadas"
                },
                "segmentationIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "IDs de segmentacion"
                },
                "phaseIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "IDs de etapas"
                },
                "agentIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "IDs de agentes"
                }
              },
              "required": [
                "type",
                "text"
              ]
            }
          },
          "variables": {
            "type": "array",
            "description": "Variables del componente",
            "items": {
              "type": "object",
              "properties": {
                "variable": {
                  "type": "string",
                  "description": "Nombre de la variable"
                },
                "example": {
                  "type": "string",
                  "description": "Ejemplo del valor de la variable"
                }
              },
              "required": [
                "variable",
                "example"
              ]
            }
          }
        },
        "required": [
          "type"
        ]
      },
      "Template": {
        "type": "object",
        "description": "Plantilla de WhatsApp para envio de mensajes",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico de la plantilla"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "userId": {
            "type": "string",
            "description": "ID del usuario que creo la plantilla"
          },
          "elementName": {
            "type": "string",
            "description": "Nombre de la plantilla"
          },
          "internalWhatsappId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID interno de WhatsApp"
          },
          "languageCode": {
            "type": "string",
            "description": "Codigo de idioma (ej: es, en)"
          },
          "category": {
            "type": "string",
            "description": "Categoria de la plantilla (MARKETING, UTILITY, AUTHENTICATION)"
          },
          "reference1": {
            "type": [
              "string",
              "null"
            ],
            "description": "Referencia adicional"
          },
          "templateType": {
            "type": "string",
            "description": "Tipo de plantilla (TEXT, IMAGE, VIDEO, DOCUMENT)"
          },
          "statusId": {
            "type": "integer",
            "description": "ID del estado (1=Pendiente, 2=Aprobada, 3=Rechazada)"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          },
          "updatedDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de ultima actualizacion"
          },
          "components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TemplateComponent"
            },
            "description": "Componentes de la plantilla"
          }
        }
      },
      "Message": {
        "type": "object",
        "description": "Mensaje enviado o recibido en una conversacion",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico del mensaje"
          },
          "messageWhatsappId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del mensaje en WhatsApp"
          },
          "contactId": {
            "type": "string",
            "description": "ID del contacto asociado"
          },
          "content": {
            "type": "string",
            "description": "Contenido del mensaje"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "recipientPhone": {
            "type": [
              "string",
              "null"
            ],
            "description": "Telefono del destinatario"
          },
          "externalReferenceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de referencia externa"
          },
          "platformId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de la plataforma"
          },
          "answerAgentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del agente que respondio"
          },
          "answerType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tipo de respuesta"
          },
          "type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tipo de mensaje"
          },
          "from": {
            "type": [
              "string",
              "null"
            ],
            "description": "Remitente del mensaje"
          },
          "timestamp": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Marca de tiempo del mensaje"
          },
          "conversationId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID de la conversacion"
          },
          "platformType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tipo de plataforma"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Archivos adjuntos del mensaje"
          }
        }
      },
      "Conversation": {
        "type": "object",
        "description": "Conversacion entre un contacto y el workspace",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico de la conversacion"
          },
          "contactId": {
            "type": "string",
            "description": "ID del contacto"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "internalWhatsappNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Numero interno de WhatsApp"
          },
          "platformSenderId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del remitente en la plataforma"
          },
          "platformSenderName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nombre del remitente"
          },
          "platformSenderPhone": {
            "type": [
              "string",
              "null"
            ],
            "description": "Telefono del remitente"
          },
          "workspaceName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nombre del workspace"
          },
          "templateCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Codigo de la plantilla utilizada"
          },
          "templateType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tipo de plantilla"
          },
          "type": {
            "type": "integer",
            "description": "Tipo de envio (1=Campana, 2=Individual, 3=API)"
          },
          "campaignName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nombre de la campana"
          },
          "agentSenderId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del agente que envio"
          },
          "requestBody": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cuerpo de la solicitud"
          },
          "responseBody": {
            "type": [
              "string",
              "null"
            ],
            "description": "Cuerpo de la respuesta"
          },
          "responseStatus": {
            "type": [
              "string",
              "null"
            ],
            "description": "Estado de la respuesta"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          }
        }
      },
      "User": {
        "type": "object",
        "description": "Usuario de la plataforma",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico del usuario"
          },
          "name": {
            "type": "string",
            "description": "Nombre del usuario"
          },
          "lastName": {
            "type": "string",
            "description": "Apellido del usuario"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Correo electronico del usuario"
          },
          "avatar": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL del avatar del usuario"
          },
          "role": {
            "type": [
              "string",
              "null"
            ],
            "description": "Rol del usuario"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          },
          "company": {
            "type": [
              "string",
              "null"
            ],
            "description": "Codigo de la compania"
          }
        }
      },
      "Workspace": {
        "type": "object",
        "description": "Espacio de trabajo que agrupa contactos, conversaciones y configuraciones",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico del workspace"
          },
          "name": {
            "type": "string",
            "description": "Nombre del workspace"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Descripcion del workspace"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          },
          "updatedDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Fecha de ultima actualizacion"
          }
        }
      },
      "Agent": {
        "type": "object",
        "description": "Agente de Inteligencia Artificial configurado en el workspace",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico del agente"
          },
          "name": {
            "type": "string",
            "description": "Nombre del agente"
          },
          "model": {
            "type": [
              "string",
              "null"
            ],
            "description": "Modelo de IA utilizado"
          },
          "prompt": {
            "type": [
              "string",
              "null"
            ],
            "description": "Prompt de configuracion del agente"
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ],
            "description": "Temperatura del modelo (0-1)"
          },
          "maxTokens": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximo de tokens por respuesta"
          },
          "channelId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del canal asociado"
          },
          "platformType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tipo de plataforma"
          },
          "widgetEnabled": {
            "type": "boolean",
            "description": "Indica si el widget esta habilitado"
          },
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion"
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Archivos asociados al agente"
          }
        }
      },
      "Activity": {
        "type": "object",
        "description": "Actividad registrada en un contacto u oportunidad",
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador unico de la actividad"
          },
          "content": {
            "type": "string",
            "description": "Contenido o descripcion de la actividad"
          },
          "date": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de la actividad"
          },
          "categoryType": {
            "type": "string",
            "description": "Tipo de categoria: Calls, Meeting, Whatsapp, Email"
          },
          "userId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID del usuario que registro la actividad"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creacion del registro"
          }
        }
      },
      "PaginatedContactResponse": {
        "type": "object",
        "description": "Respuesta paginada de contactos",
        "properties": {
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "continuationToken": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token para la siguiente pagina, null si no hay mas registros"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Contact"
            },
            "description": "Lista de contactos"
          }
        },
        "required": [
          "workspaceId",
          "continuationToken",
          "data"
        ]
      },
      "PaginatedConversationResponse": {
        "type": "object",
        "description": "Respuesta paginada de conversaciones",
        "properties": {
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "newContinuationToken": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token para la siguiente pagina"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Conversation"
            },
            "description": "Lista de conversaciones"
          }
        },
        "required": [
          "workspaceId",
          "newContinuationToken",
          "data"
        ]
      },
      "PaginatedOpportunityResponse": {
        "type": "object",
        "description": "Respuesta paginada de oportunidades",
        "properties": {
          "workspaceId": {
            "type": "string",
            "description": "ID del workspace"
          },
          "continuationToken": {
            "type": [
              "string",
              "null"
            ],
            "description": "Token para la siguiente pagina"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Opportunity"
            },
            "description": "Lista de oportunidades"
          }
        },
        "required": [
          "workspaceId",
          "continuationToken",
          "data"
        ]
      }
    }
  }
}