{
  "openapi": "3.0.3",
  "info": {
    "title": "API Pública Portal",
    "version": "2.0.0",
    "description": "API pública REST para Portal"
  },
  "servers": [
    {
      "url": "https://api.flexxible.net",
      "description": "Portal API (production)"
    }
  ],
  "tags": [
    {
      "name": "Actividad digital",
      "description": "Creación de grupos de procesos core por organización"
    },
    {
      "name": "Roles",
      "description": "Endpoint de creaciÓn de roles de organización"
    },
    {
      "name": "Usuarios",
      "description": "Endpoint de creación de usuarios de organización"
    },
    {
      "name": "Grupos de workspaces",
      "description": "Endpoints de gestión de grupos de workspaces"
    },
    {
      "name": "Workspaces",
      "description": "Endpoint de eliminacion de workspaces de la organización"
    },
    {
      "name": "Aplicaciones instaladas",
      "description": "Endpoint de detalle de aplicación instalada de la organización"
    },
    {
      "name": "Autenticación",
      "description": "Endpoints de autenticación y contexto de sesión"
    },
    {
      "name": "Microservicios",
      "description": "Detalle de microservicios por organización"
    },
    {
      "name": "Operaciones",
      "description": "Consulta de detalle de operaciones por organización"
    },
    {
      "name": "Organización",
      "description": "Operaciones de organización"
    },
    {
      "name": "Objetivos de política de parches",
      "description": "Endpoints de gestión de objetivos de política de parches"
    },
    {
      "name": "Configuraciones de producto",
      "description": "Endpoints de gestión de configuraciones de producto"
    },
    {
      "name": "Grupos de reporte",
      "description": "Operaciones sobre grupos de reporte"
    },
    {
      "name": "Sesiones",
      "description": "Endpoint de detalle de sesión de la organización"
    },
    {
      "name": "Tenants",
      "description": "Endpoints de gestión de tenants"
    }
  ],
  "paths": {
    "/v2/organizations/{organization_id}/digital-activity/core-process-groups": {
      "post": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Crear grupo procesos core",
        "operationId": "createDigitalActivityCoreProcessGroup",
        "description": "Crea un grupo de procesos core en la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDigitalActivityCoreProcessGroupRequestV2"
              },
              "examples": {
                "create_with_description": {
                  "summary": "Crear grupo con descripción",
                  "value": {
                    "name": "Grupo base de productividad",
                    "description": "Grupo principal para procesos de productividad",
                    "workspace_group_id": "64f0c2a1b2d3e4f506070822"
                  }
                },
                "create_without_description": {
                  "summary": "Crear grupo sin descripción",
                  "value": {
                    "name": "Grupo de edición",
                    "workspace_group_id": "64f0c2a1b2d3e4f506070823"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Grupo de procesos core creado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDigitalActivityCoreProcessGroupResponseV2"
                },
                "examples": {
                  "created": {
                    "summary": "Recurso creado",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070811",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Grupo base de productividad",
                      "description": "Grupo principal para procesos de productividad",
                      "workspace_group_id": "64f0c2a1b2d3e4f506070822"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Solicitud inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_body": {
                    "summary": "Cuerpo de solicitud inválido",
                    "value": {
                      "error": {
                        "message": "Cuerpo de solicitud inválido",
                        "code": "bad_request",
                        "details": "name y workspace_group_id son obligatorios y deben cumplir el formato esperado."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso relacionado no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflicto de negocio para la creación del recurso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "duplicate_name": {
                    "summary": "Nombre ya registrado",
                    "value": {
                      "error": {
                        "message": "Ya existe un grupo de procesos core con ese nombre",
                        "code": "core_process_group_name_already_exists"
                      }
                    }
                  },
                  "workspace_group_already_assigned": {
                    "summary": "Grupo de workspaces ya asignado",
                    "value": {
                      "error": {
                        "message": "El grupo de workspaces ya está asignado a otro grupo de procesos core",
                        "code": "core_process_group_workspace_group_already_assigned"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Listar grupos procesos core",
        "operationId": "listDigitalActivityCoreProcessGroups",
        "description": "Devuelve una lista paginada de grupos de procesos core de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta separados por comas para cada elemento.",
            "example": "id,name,workspace_group_id"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"core\"}"
              },
              "complex-and": {
                "summary": "Filtrar por organización y grupo",
                "value": "{\"and\":[{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439011\"},{\"field\":\"workspace_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070822\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070811\"},{\"field\":\"workspace_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070823\"}]},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"group\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`).",
            "example": "organization_id:asc"
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "description": "Expresión JSON de agregación con `group_by` y `aggregates`.",
            "examples": {
              "group-by-workspace-group-count": {
                "summary": "Agrupar por grupo de workspaces y contar",
                "value": "{\"group_by\":[\"workspace_group_id\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group-by-organization-avg": {
                "summary": "Agrupar por organización y calcular promedio",
                "value": "{\"group_by\":[\"organization_id\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"},{\"field\":\"id\",\"function\":\"min\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Grupos de procesos core recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDigitalActivityCoreProcessGroupsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con resultados",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070811",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "name": "Grupo de procesos core A",
                          "description": "Grupo principal de procesos de productividad",
                          "workspace_group_id": "64f0c2a1b2d3e4f506070822"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/flows": {
      "post": {
        "tags": [
          "Flujos"
        ],
        "summary": "Crear un flujo",
        "operationId": "createFlow",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "en-EN",
                "es-ES",
                "pt-BR",
                "ca-ES",
                "eu-ES"
              ],
              "default": "es-ES"
            },
            "description": "Código de idioma para campos de texto que admiten varios idiomas. Al crear o actualizar recursos, esto especifica el idioma de los valores de texto proporcionados. Al recuperar recursos, esto determina qué variante de idioma de los campos de texto multilingües se devuelve. Valores aceptados: 'en-EN' (inglés), 'es-ES' (español), 'pt-BR' (portugués), 'ca-ES' (catalán), 'eu-ES' (euskera). El valor predeterminado es 'es-ES' si no se proporciona."
          }
        ],
        "responses": {
          "201": {
            "description": "Flujo creado correctamente. La respuesta contiene el recurso creado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowV2"
                },
                "example": {
                  "id": "507f1f77bcf86cd799439011"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios - Valores de campo inválidos - Configuración de condición inválida - Identificador de microservicio inválido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable. Causas comunes: - Microservicio referenciado no encontrado - Entidades objetivo referenciadas (workspaces, grupos de Workspace, grupos de reporte) no encontradas o no pertenecientes - Tipo de condición inválido - El flujo no puede habilitarse"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFlowV2Request"
              },
              "examples": {
                "create-workspace-flow": {
                  "summary": "Crear un flujo dirigido a workspaces específicos",
                  "value": {
                    "name": {
                      "en-EN": "Daily Backup Flow",
                      "es-ES": "Proceso de copia diaria"
                    },
                    "description": {
                      "en-EN": "Automated daily backup process",
                      "es-ES": "Proceso automatizado de copia de seguridad diaria"
                    },
                    "type": "workspace",
                    "detection_only": false,
                    "cooldown_minutes": 60,
                    "enabled": false,
                    "init_text": {
                      "en-EN": "Starting backup process...",
                      "es-ES": "Iniciando proceso de copia..."
                    },
                    "ok_text": {
                      "en-EN": "Backup completed successfully",
                      "es-ES": "Copia completada correctamente"
                    },
                    "ko_text": {
                      "en-EN": "Backup failed. Please check logs.",
                      "es-ES": "Copia fallida. Revise los registros."
                    },
                    "target": {
                      "type": "workspaces",
                      "ids": [
                        "507f1f77bcf86cd799439012",
                        "507f1f77bcf86cd799439013"
                      ]
                    },
                    "microservice_id": "507f1f77bcf86cd799439014",
                    "conditions": [
                      {
                        "condition_type_id": "507f1f77bcf86cd799439015",
                        "operator": "gt",
                        "compare_to": "80",
                        "check_every": 300
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "description": "Crea un nuevo flujo de automatización para la organización especificada. El flujo define la lógica de ejecución, las condiciones y los workspaces objetivo. Devuelve los datos del flujo creado tras una creación exitosa."
      },
      "get": {
        "tags": [
          "Flujos"
        ],
        "summary": "Listar flujos",
        "operationId": "listFlows",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo de orden opcional (:asc o :desc), p. ej., \"name\", \"name:asc\", \"cooldown_minutes:desc\". Usa orden ascendente por defecto si no se proporciona sufijo. Campos de ordenación válidos: id, name, description, type, detection_only, cooldown_minutes, enabled, init_text, ok_text, ko_text"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos que se incluirán en cada elemento de flujo. Campos seleccionables: id, name, description, type, detection_only, cooldown_minutes, enabled. El campo id siempre se incluye.",
            "example": "name,description,enabled"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120,
              "pattern": "^.*$"
            },
            "description": "Filtra flujos por uno o más criterios. Proporciona un objeto JSON con condiciones de filtro. Puedes filtrar por: id, name, description, type, detection_only, cooldown_minutes, enabled, init_text, ok_text, ko_text. Usa operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combina múltiples condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por flujos habilitados",
                "description": "Devuelve solo flujos habilitados.",
                "value": "{\"field\": \"enabled\", \"op\": \"eq\", \"value\": true}"
              },
              "complex-and": {
                "summary": "Filtrar por tipo y modo de detección",
                "description": "Devuelve flujos SESSION que no son solo de detección.",
                "value": "{\"and\": [{\"field\": \"type\", \"op\": \"eq\", \"value\": \"SESSION\"}, {\"field\": \"detection_only\", \"op\": \"eq\", \"value\": false}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con múltiples campos de texto y requiere flujos habilitados.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"name\", \"op\": \"contains\", \"value\": \"backup\"}, {\"field\": \"description\", \"op\": \"contains\", \"value\": \"backup\"}]}, {\"field\": \"enabled\", \"op\": \"eq\", \"value\": true}]}"
              }
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Número de elementos por página"
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "en-EN",
                "es-ES",
                "pt-BR",
                "ca-ES",
                "eu-ES"
              ],
              "default": "es-ES"
            },
            "description": "Código de idioma para campos de texto que admiten múltiples idiomas. Al crear o actualizar recursos, esto especifica el idioma de los valores de texto proporcionados. Al recuperar recursos, esto determina qué variante de idioma de los campos de texto multilingües se devuelve. Valores aceptados: 'en-EN' (inglés), 'es-ES' (español), 'pt-BR' (portugués), 'ca-ES' (catalán), 'eu-ES' (euskera). Usa 'es-ES' por defecto si no se proporciona."
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de flujos recuperada correctamente. La respuesta incluye metadatos de paginación y el arreglo de datos de flujos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowListItemV2ListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Parámetros de paginación no válidos - Parámetro de ordenación no válido - Parámetros de filtro no válidos"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de flujos pertenecientes a la organización especificada. Admite filtrado, ordenación y búsqueda en las propiedades de los flujos. Los resultados se devuelven en páginas con metadatos de paginación."
      }
    },
    "/v2/organizations/{organization_id}/operations": {
      "post": {
        "tags": [
          "Operaciones"
        ],
        "summary": "Crear operaciones",
        "operationId": "createOperations",
        "description": "Crea una o varias operaciones en base al alcance y objetivos enviados.\n\nTipos de operación disponibles actualmente: `execute_microservice`, `delete_workspaces`, `shutdown_workspaces` y `restart_workspaces`.\n\nDevuelve los recursos de operación creados con el mismo contrato canónico de consulta por id.\n\n**Compatibilidad de parámetros para `execute_microservice`**\n\n`payload.parameters` solo aplica a ejecuciones de microservicios PowerShell en Windows y solo está soportado en dispositivos con el nuevo agente instalado.\n\nLos valores enviados en `payload.parameters` se transmiten como texto (`string`). La interpretación de tipos depende de la definición de parámetros y del parseo implementado en el script del microservicio.\n\nPara ese contexto, tipos de datos de los parámetros recomendados:\n\n- `string`, `integer`, `double`, `decimal` y `datetime`.\n- Para `double` y `decimal`, use notación con punto decimal (`.`).\n- Para `datetime`, use formato ISO 8601 (por ejemplo: `2026-07-09T10:30:00Z`).\n- Al ejecutarse en el destino, los valores `datetime` pueden representarse en hora local.\n- La ejecución correcta también depende de la calidad y validaciones del script.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOperationV2Request"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Operaciones creadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateOperationV2Response"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      },
      "get": {
        "tags": [
          "Operaciones"
        ],
        "summary": "Listar operaciones",
        "operationId": "get_operations",
        "description": "Devuelve una lista paginada de operaciones de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta separados por comas para cada elemento.",
            "example": "id,organization_id,name,description,status,created_at"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"remote\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y descripción",
                "value": "{\"and\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"finished\"},{\"field\":\"description\",\"op\":\"contains\",\"value\":\"remote\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"microservice_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070833\"},{\"field\":\"flow_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070844\"}]},{\"field\":\"status\",\"op\":\"eq\",\"value\":\"pending\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`).",
            "example": "created_at:desc"
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "description": "Expresión JSON para agregación. Estructura: {\"group_by\":[\"field\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}. No se puede combinar con `fields`.",
            "examples": {
              "group-by-status-count": {
                "summary": "Agrupar por estado y contar",
                "value": "{\"group_by\":[\"status\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group-by-organization-count": {
                "summary": "Agrupar por organización y contar",
                "value": "{\"group_by\":[\"organization_id\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operaciones recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOperationsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con resultados",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070811",
                          "organization_id": "507f1f77bcf86cd799439022",
                          "name": "remote_assistance",
                          "description": "Remote assistance operation",
                          "status": "finished",
                          "created_at": "2026-03-10T09:11:45Z",
                          "started_at": "2026-03-10T09:12:00Z",
                          "ended_at": "2026-03-10T09:15:17Z",
                          "microservice_id": "64f0c2a1b2d3e4f506070833",
                          "flow_id": "64f0c2a1b2d3e4f506070844",
                          "remote_support": {
                            "start_date": "2026-03-10T09:12:00Z",
                            "end_date": "2026-03-10T09:15:17Z",
                            "type": "unattended"
                          }
                        }
                      ]
                    }
                  },
                  "aggregated_by_status": {
                    "summary": "Resultado agregado por estado",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "status": "finished",
                          "count": 12
                        },
                        {
                          "status": "pending",
                          "count": 5
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/reporting-groups/{reporting_group_id}/magic-links": {
      "post": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Crear un enlace mágico de descarga de agente",
        "operationId": "createReportingGroupMagicLink",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del Grupo de reporte",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReportingGroupMagicLinkRequestV2"
              },
              "examples": {
                "default-installer": {
                  "summary": "Crear enlace mágico usando valores estrictos del instalador",
                  "value": {
                    "expires_at": "2026-03-15T12:00:00.000Z",
                    "installer": {
                      "version": "latest",
                      "platform": "windows",
                      "arch": "x64",
                      "type": "fxxone"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Enlace mágico creado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateReportingGroupMagicLinkResponseV2"
                },
                "examples": {
                  "created-magic-link": {
                    "summary": "Respuesta de enlace mágico creado",
                    "value": {
                      "id": "507f1f77bcf86cd799439099",
                      "token": "2ab46558-3c40-4b72-8fce-08b7b596f624",
                      "link": "https://portal.example.com/magic-link?key=2ab46558-3c40-4b72-8fce-08b7b596f624"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta: parámetros de ruta, cuerpo de solicitud o formato de fecha-hora no válidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de reporte no encontrado"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable: la validación de negocio falló (por ejemplo, una expiración fuera del rango permitido)."
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Crea un enlace mágico para descargar el instalador del agente en un grupo de reporte. Esta funcionalidad solo está disponible para el producto FXXOne. Ponte en contacto con el equipo de Flexxible para más información."
      }
    },
    "/v2/organizations/{organization_id}/reporting-groups": {
      "post": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Crear un grupo de reporte",
        "operationId": "createReportingGroup",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "responses": {
          "201": {
            "description": "Grupo de reporte creado correctamente. La respuesta contiene el recurso creado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportingGroupByIdV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios (name, product_config_id) - Valores de campo inválidos - Formato de ID inválido para campos product_config_id, patch_policy_target_id o intermediate_device_*_id - Valor de fishing_pattern_field inválido (debe ser uno de: full_name, description, ou, current_subnet) - Valor de fishing_pattern inválido (excede maxLength: 250) - Dispositivos intermedios no definidos secuencialmente (intermediate_device_2_id requiere intermediate_device_1_id, intermediate_device_3_id requiere intermediate_device_2_id)"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable. Causas comunes: - La configuración de producto no se encontró o no pertenece a la organización - Los IDs de Workspace de dispositivos intermedios no existen o no pertenecen a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReportingGroupRequestV2"
              },
              "examples": {
                "create-reporting-group-with-minimal-fields": {
                  "summary": "Crear un grupo de reporte solo con los campos obligatorios",
                  "value": {
                    "name": "Grupo de reporte de Producción",
                    "product_config_id": "507f1f77bcf86cd799439030"
                  }
                },
                "create-reporting-group-with-all-fields": {
                  "summary": "Crear un grupo de reporte con todos los campos disponibles, incluidos dispositivos intermedios",
                  "value": {
                    "name": "Grupo de reporte de Desarrollo",
                    "product_config_id": "507f1f77bcf86cd799439030",
                    "patch_policy_target_id": "507f1f77bcf86cd799439040",
                    "fishing_pattern": "Estaciones de trabajo Windows",
                    "fishing_pattern_field": "full_name",
                    "intermediate_device_1_id": "507f1f77bcf86cd799439050",
                    "intermediate_device_2_id": "507f1f77bcf86cd799439051",
                    "intermediate_device_3_id": "507f1f77bcf86cd799439052"
                  }
                },
                "create-reporting-group-with-single-intermediate-device": {
                  "summary": "Crear un grupo de reporte solo con el primer dispositivo intermedio",
                  "value": {
                    "name": "Grupo de reporte de dispositivo único",
                    "product_config_id": "507f1f77bcf86cd799439030",
                    "intermediate_device_1_id": "507f1f77bcf86cd799439050"
                  }
                }
              }
            }
          }
        },
        "description": "Crea un nuevo grupo de reporte para la organización especificada. Los grupos de reporte se usan para organizar y gestionar configuraciones de dispositivos, ajustes de producto y políticas de parches. Puedes configurar opcionalmente dispositivos intermedios (hasta 3) proporcionando identificadores de workspace. Los dispositivos intermedios se usan para acciones Wake on LAN en redes seguras, permitiendo el encendido remoto de dispositivos a través de puertas de enlace intermedias. Los dispositivos intermedios deben definirse secuencialmente: no puedes definir intermediate_device_2_id sin intermediate_device_1_id, ni intermediate_device_3_id sin intermediate_device_2_id. Todos los IDs de Workspace de dispositivos intermedios deben existir y pertenecer a la organización. Devuelve el ID del grupo de reporte creado tras una creación satisfactoria."
      },
      "get": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Listar grupos de reporte",
        "operationId": "listReportingGroups",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo de orden opcional (:asc o :desc). Campos de ordenación válidos: name, organization_id, product_config_id, fishing_pattern, fishing_pattern_field, patch_policy_target_id, policy_reporting_group, overridden_agent_settings.*, effective_agent_settings.*, execute_flexx_analyzer_agent, can_manage_agent_versions, intermediate_device_1_id, intermediate_device_2_id, intermediate_device_3_id. Es ascendente de forma predeterminada si no se proporciona sufijo."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos para incluir en cada elemento de grupo de reporte. Campos seleccionables: id, name, organization_id, product_config_id, fishing_pattern, fishing_pattern_field, patch_policy_target_id, policy_reporting_group, overridden_agent_settings, effective_agent_settings, execute_flexx_analyzer_agent, can_manage_agent_versions, flexx_agent_portal_download, intermediate_device_1_id, intermediate_device_2_id, intermediate_device_3_id. El campo id siempre se incluye.",
            "example": "name,effective_agent_settings,execute_flexx_analyzer_agent"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120,
              "description": "Filtra grupos de reporte usando un objeto JSON. Especifica el campo a filtrar, el operador de comparación y el valor. Ejemplo: {\"field\": \"name\", \"op\": \"eq\", \"value\": \"Grupo de reporte 1\"}",
              "example": "{\"field\": \"name\", \"op\": \"eq\", \"value\": \"Grupo de reporte 1\"}"
            },
            "description": "Filtra grupos de reporte por uno o más criterios. Proporciona una cadena JSON con AST de filtros. Filtra por cualquier campo devuelto en la respuesta. Para campos anidados usa notación de punto: overridden_agent_settings.remote_support, effective_agent_settings.remote_support, effective_agent_settings.uninstall_protection, etc. Operadores: eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between. Combina con and/or. Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre del grupo de reporte",
                "description": "Devuelve grupos de reporte cuyo nombre contiene el texto proporcionado.",
                "value": "{\"field\": \"name\", \"op\": \"contains\", \"value\": \"producción\"}"
              },
              "complex-and": {
                "summary": "Filtrar por configuración anidada y bandera de ejecución",
                "description": "Devuelve grupos donde la protección de desinstalación está desactivada y la ejecución del analizador está habilitada.",
                "value": "{\"and\": [{\"field\": \"effective_agent_settings.uninstall_protection\", \"op\": \"eq\", \"value\": \"off\"}, {\"field\": \"execute_flexx_analyzer_agent\", \"op\": \"eq\", \"value\": true}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con múltiples patrones de nombre y requiere soporte remoto interactivo.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"name\", \"op\": \"contains\", \"value\": \"prod\"}, {\"field\": \"name\", \"op\": \"contains\", \"value\": \"stage\"}]}, {\"field\": \"effective_agent_settings.remote_support\", \"op\": \"eq\", \"value\": \"INTERACTIVE\"}]}"
              }
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Número de elementos por página"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de grupos de reporte recuperada correctamente. La respuesta incluye metadatos de paginación y el arreglo de datos de grupos de reporte.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportingGroupListItemV2ListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Parámetros de paginación no válidos - Parámetro de ordenación no válido - Parámetros de filtro no válidos"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de grupos de reporte que pertenecen a la organización especificada. Admite filtrado y ordenación sobre propiedades de los grupos de reporte. Los filtros se proporcionan como una cadena JSON siguiendo la estructura AST de FilterNode. Los resultados se devuelven en páginas con metadatos de paginación."
      }
    },
    "/v2/organizations/{organization_id}/roles": {
      "post": {
        "tags": [
          "Roles"
        ],
        "summary": "Crear un rol",
        "operationId": "create_role",
        "description": "Crea un rol y sus entradas de permisos en una sola solicitud.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de organización.",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRoleRequestV2"
              },
              "examples": {
                "organization_scoped_role": {
                  "summary": "Crear rol con permiso con alcance de organización",
                  "value": {
                    "name": "Operador de organización",
                    "permissions": [
                      {
                        "portal_permission": "organization_admin",
                        "workspaces_permission": "admin_read_only",
                        "analyzer_permission": "access",
                        "target_organization": "507f1f77bcf86cd799439011",
                        "target_reporting_groups": [
                          "64f0c2a1b2d3e4f5060708c1",
                          "64f0c2a1b2d3e4f5060708c2"
                        ]
                      }
                    ]
                  }
                },
                "mixed_permissions_role": {
                  "summary": "Crear rol con alcances de permisos mixtos",
                  "value": {
                    "name": "Soporte de nivel 1",
                    "permissions": [
                      {
                        "portal_permission": "l1_support_team",
                        "workspaces_permission": "l1_support_team",
                        "analyzer_permission": "no_access",
                        "target_organization": "all",
                        "target_reporting_groups": "all"
                      },
                      {
                        "portal_permission": "l1_support_team_read_only",
                        "workspaces_permission": "l1_support_team_read_only",
                        "analyzer_permission": "access",
                        "target_organization": "507f1f77bcf86cd799439011",
                        "target_reporting_groups": [
                          "64f0c2a1b2d3e4f5060708d1"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Rol de usuario creado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleV2"
                },
                "examples": {
                  "created": {
                    "summary": "Rol creado",
                    "value": {
                      "id": "64f0c2a1b2d3e4f5060708aa",
                      "name": "Operador de organización",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "created_at": "2026-03-12T10:30:00Z",
                      "created_by": "64f0c2a1b2d3e4f5060708bb",
                      "permissions": [
                        {
                          "portal_permission": "organization_admin",
                          "workspaces_permission": "admin_read_only",
                          "analyzer_permission": "access",
                          "target_organization": "507f1f77bcf86cd799439011",
                          "target_reporting_groups": [
                            "64f0c2a1b2d3e4f5060708c1",
                            "64f0c2a1b2d3e4f5060708c2"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Carga útil de solicitud no válida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_permission_payload": {
                    "summary": "La carga útil de permisos no es válida",
                    "value": {
                      "error": {
                        "message": "Cuerpo de solicitud no válido",
                        "code": "bad_request",
                        "details": "permissions[0].target_organization debe ser `all` o una cadena hexadecimal en minusculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso referenciado no encontrado dentro del alcance de organización autorizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "reporting_group_not_found": {
                    "summary": "No se encontró el Grupo de reporte referenciado",
                    "value": {
                      "error": {
                        "message": "Grupo de reporte no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "La solicitud entra en conflicto con un recurso existente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "role_name_already_exists": {
                    "summary": "El nombre del rol ya existe",
                    "value": {
                      "error": {
                        "message": "El nombre del rol ya existe",
                        "code": "conflict",
                        "details": "name ya está en uso dentro de esta organización"
                      }
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "La solicitud no puede completarse por restricciones de límite de entidades de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_entity_limit_exceeded": {
                    "summary": "Límite de roles excedido",
                    "value": {
                      "error": {
                        "message": "Entity ownership limit exceeded.",
                        "code": "unprocessable_entity"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Roles"
        ],
        "summary": "Listar roles",
        "operationId": "get_roles",
        "description": "Devuelve una lista paginada de roles disponibles dentro del ámbito de la organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos del elemento de respuesta, separados por comas, que se deben incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtros JSON sobre rutas de campos filtrables de la respuesta.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de rol",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"administrador\"}"
              },
              "complex-and": {
                "summary": "Filtrar por tokens combinados del nombre del rol",
                "value": "{\"and\":[{\"field\":\"name\",\"op\":\"contains\",\"value\":\"organización\"},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"administrador\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"name\",\"op\":\"contains\",\"value\":\"administrador\"},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"operador\"}]},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"rol\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(id|organization_id|name|created_at|created_by):(asc|desc)$"
            },
            "description": "Expresión de orden en el formato <field>:asc|desc."
          }
        ],
        "responses": {
          "200": {
            "description": "Roles recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetRolesResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con roles",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f5060708aa",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "name": "Administrador de la organización",
                          "created_at": "2026-03-12T10:30:00Z",
                          "created_by": "64f0c2a1b2d3e4f5060708bb",
                          "permissions": [
                            {
                              "portal_permission": "organization_admin",
                              "workspaces_permission": "admin",
                              "analyzer_permission": "access",
                              "target_organization": "all",
                              "target_reporting_groups": [
                                "64f0c2a1b2d3e4f5060708c1"
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron roles",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros inválido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "El recurso solicitado no se encontró dentro del ámbito de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "resource_not_found": {
                    "summary": "No se encontró el recurso solicitado",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/tenants": {
      "post": {
        "tags": [
          "Tenants"
        ],
        "summary": "Crear un tenant",
        "operationId": "createTenant",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización propietaria que creará el tenant",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "responses": {
          "201": {
            "description": "Tenant y organización asociados creados correctamente. Devuelve el recurso tenant creado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantByIdV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Cuerpo de solicitud o parámetros de ruta no válidos - Se mezclaron configuraciones excluyentes (`tenant_config` y `organization_config`) - Faltan campos obligatorios para el tipo seleccionado - Formato de id no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "No se encontró la organización propietaria"
          },
          "422": {
            "description": "Entidad no procesable - Error de validación de lógica de negocio. Causas comunes: - Product config no encontrado - La organización no es elegible para crear tenants - La organización no existe en build - La organización no tiene productos elegibles - Relación de partner no válida - La organización y la organización padre son clientes finales - Entidad referenciada no encontrada",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTenantRequestV2"
              },
              "examples": {
                "create-tenant-end-customer": {
                  "summary": "Crear tenant para organización END CUSTOMER",
                  "value": {
                    "type": "tenant",
                    "name": "Tenant de producción",
                    "tenant_config": {
                      "product_config_id": "507f1f77bcf86cd799439030",
                      "analyzer": "existing"
                    },
                    "policy_id": "507f1f77bcf86cd799439050",
                    "organization_email": "tenant@example.com",
                    "organization_language": "en",
                    "organization_country": "US",
                    "organization_industry": "Tecnología"
                  }
                },
                "create-tenant-partner-or-wholesaler": {
                  "summary": "Crear tenant para organización PARTNER o WHOLESALER",
                  "value": {
                    "type": "organization",
                    "name": "Tenant empresarial",
                    "organization_config": {
                      "product_id": "507f1f77bcf86cd799439030",
                      "region": "west-eu-01_one"
                    },
                    "policy_id": "507f1f77bcf86cd799439050",
                    "organization_email": "enterprise@example.com",
                    "organization_language": "es",
                    "organization_country": "ES",
                    "organization_industry": "Finanzas"
                  }
                }
              }
            }
          }
        },
        "description": "Crea un nuevo tenant y una organización asociada para la organización propietaria especificada. El cuerpo de solicitud usa un discriminador `type` con rutas excluyentes: `tenant` (END CUSTOMER) y `organization` (PARTNER/WHOLESALER)."
      },
      "get": {
        "tags": [
          "Tenants"
        ],
        "summary": "Listar tenants",
        "operationId": "listTenants",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Número de elementos por página"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo opcional de orden (:asc o :desc), p. ej., \"name\", \"name:asc\", \"created_at:desc\". Usa orden ascendente de forma predeterminada si no se proporciona sufijo. Campos válidos: id, created_at, name, region, product_id, policy_id"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos a incluir en cada elemento de tenant. Campos seleccionables: id, organization_id, created_at, name, region, product_id, policy_id. El campo id siempre se incluye.",
            "example": "name,region,product_id"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120,
              "description": "Filtra tenants usando un objeto JSON. Especifica el campo a filtrar, el operador de comparación y el valor. Ejemplo: {\"field\": \"name\", \"op\": \"eq\", \"value\": \"Tenant 1\"}",
              "example": "{\"field\": \"name\", \"op\": \"eq\", \"value\": \"Tenant 1\"}"
            },
            "description": "Filtra tenants por uno o más criterios. Proporciona un objeto JSON con condiciones de filtro. Puedes filtrar por cualquier campo devuelto en la respuesta. Usa operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combina varias condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtro simple",
                "description": "Filtra tenants por nombre que contiene texto.",
                "value": "{\"field\": \"name\", \"op\": \"contains\", \"value\": \"production\"}"
              },
              "complex-and": {
                "summary": "Filtro complejo con AND",
                "description": "Filtra tenants por region y producto al mismo tiempo.",
                "value": "{\"and\": [{\"field\": \"region\", \"op\": \"eq\", \"value\": \"us-east\"}, {\"field\": \"product_id\", \"op\": \"eq\", \"value\": \"507f1f77bcf86cd799439030\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con múltiples regiones y aplica una restricción de nombre.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"region\", \"op\": \"eq\", \"value\": \"us-east\"}, {\"field\": \"region\", \"op\": \"eq\", \"value\": \"eu-west\"}]}, {\"field\": \"name\", \"op\": \"contains\", \"value\": \"tenant\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de tenants recuperada correctamente. La respuesta incluye la bandera de paginación y el arreglo de datos de tenants.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantListItemV2ListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Parámetros de paginación no válidos - Parámetro de ordenación no válido - Parámetros de filtro no válidos"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de tenants que pertenecen a la organización especificada. Admite filtrado y ordenación sobre propiedades del tenant. Los filtros se proporcionan como una cadena JSON que sigue la estructura AST de FilterNode. Los resultados se devuelven en páginas con metadatos de paginación."
      }
    },
    "/v2/organizations/{organization_id}/users": {
      "post": {
        "tags": [
          "Usuarios"
        ],
        "summary": "Crear un usuario",
        "operationId": "create_user",
        "description": "Crea un nuevo usuario dentro del alcance de la organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserRequestV2"
              },
              "examples": {
                "standard_user": {
                  "summary": "Crear un usuario estandar",
                  "value": {
                    "name": "Ana",
                    "surname": "López",
                    "email": "ana.lopez@example.com",
                    "language": "en-EN",
                    "role_id": "64f0c2a1b2d3e4f5060708aa",
                    "department": "Support",
                    "email_login_enabled": false
                  }
                },
                "email_login_user": {
                  "summary": "Crear un usuario con inicio de sesión por correo electrónico habilitado",
                  "value": {
                    "name": "Diego",
                    "surname": "Santos",
                    "email": "diego.santos@example.com",
                    "language": "es-ES",
                    "role_id": "64f0c2a1b2d3e4f5060708ab",
                    "email_login_enabled": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Usuario creado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserByIdV2"
                },
                "examples": {
                  "created": {
                    "summary": "Usuario creado",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070801",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Ana",
                      "surname": "López",
                      "email": "ana.lopez@example.com",
                      "language": "en-EN",
                      "created_at": "2026-06-22T16:00:00.000Z",
                      "department": "Support",
                      "role_id": "64f0c2a1b2d3e4f5060708aa",
                      "created_by": "64f0c2a1b2d3e4f5060708bb",
                      "email_login_enabled": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Carga útil de solicitud no válida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_email": {
                    "summary": "El formato del correo electrónico no es válido",
                    "value": {
                      "error": {
                        "message": "Cuerpo de solicitud no válido",
                        "code": "bad_request",
                        "details": "email debe ser una dirección válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No se encontró el recurso referenciado dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "user_role_not_found": {
                    "summary": "No se encontró el rol de usuario",
                    "value": {
                      "error": {
                        "message": "Rol de usuario no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "La solicitud entra en conflicto con un recurso existente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "email_already_exists": {
                    "summary": "El correo electrónico ya existe",
                    "value": {
                      "error": {
                        "message": "El correo electrónico ya existe",
                        "code": "conflict",
                        "details": "email ya está registrado"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Usuarios"
        ],
        "summary": "Listar usuarios",
        "operationId": "get_users",
        "description": "Devuelve una lista paginada de usuarios disponibles dentro del alcance de la organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables. Todos los campos del contrato son filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de usuario",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"ana\"}"
              },
              "complex-and": {
                "summary": "Filtrar por departamento y método de inicio de sesión",
                "value": "{\"and\":[{\"field\":\"department\",\"op\":\"eq\",\"value\":\"support\"},{\"field\":\"email_login_enabled\",\"op\":\"eq\",\"value\":true}]}"
              },
              "complex-or-and": {
                "summary": "Combinar filtrado por organización y correo electrónico",
                "value": "{\"and\":[{\"or\":[{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439011\"},{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439012\"}]},{\"field\":\"email\",\"op\":\"contains\",\"value\":\"@example.com\"}]}"
              },
              "created-at-and-role": {
                "summary": "Filtrar por fecha de creación y rol",
                "value": "{\"and\":[{\"field\":\"created_at\",\"op\":\"gte\",\"value\":\"2025-01-01T00:00:00.000Z\"},{\"field\":\"role_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f5060708aa\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(id|name|surname|email|language|department|role_id|organization_id|created_at|created_by|email_login_enabled):(asc|desc)$"
            },
            "description": "Expresión de orden en el formato <field>:asc|desc. Todos los campos del contrato son ordenables."
          }
        ],
        "responses": {
          "200": {
            "description": "Usuarios recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetUsersResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con usuarios",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070801",
                          "name": "Ana",
                          "surname": "López",
                          "email": "ana.lopez@example.com",
                          "language": "en-EN",
                          "department": "Support",
                          "role_id": "64f0c2a1b2d3e4f5060708aa",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "created_at": "2025-12-01T10:30:00.000Z",
                          "created_by": "64f0c2a1b2d3e4f5060708bb",
                          "email_login_enabled": true
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron usuarios",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso solicitado no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "resource_not_found": {
                    "summary": "No se encontró el recurso solicitado",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspace-groups/{workspace_group_id}/schedules": {
      "post": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Crear una programación cron",
        "operationId": "createWorkspaceGroupSchedule",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "201": {
            "description": "Programación creada correctamente. La respuesta contiene el recurso de programación creado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupScheduleV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios (cron_expression, time_zone, type) - Formato de expresión cron inválido - Valor de zona horaria inválido - Tipo de programación inválido (debe ser START, STOP o RESTART) - Formato de ID de Workspace de intermediate_device inválido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: el usuario no tiene acceso a la organización o la organización no existe"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o el grupo de workspaces pertenece a una organización diferente (después de pasar la autorización)"
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "Conflicto: ya existe una programación con el mismo tipo, hora y día (después de la conversión de zona horaria)"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable. Causas comunes: - El ID de Workspace de intermediate_device no existe o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWorkspaceGroupScheduleRequestV2"
              },
              "examples": {
                "create-start-schedule": {
                  "summary": "Crear una programación START para días laborables a las 8 AM",
                  "value": {
                    "cron_expression": "0 8 * * 1-5",
                    "time_zone": "Eastern Standard Time",
                    "type": "start"
                  }
                },
                "create-start-schedule-with-intermediate-device": {
                  "summary": "Crear una programación START con dispositivo intermedio para Wake-on-LAN",
                  "value": {
                    "cron_expression": "0 8 * * 1-5",
                    "time_zone": "Eastern Standard Time",
                    "type": "start",
                    "intermediate_device": "507f1f77bcf86cd799439050"
                  }
                },
                "create-stop-schedule": {
                  "summary": "Crear una programación STOP para días laborables a las 6 PM",
                  "value": {
                    "cron_expression": "0 18 * * 1-5",
                    "time_zone": "UTC",
                    "type": "stop"
                  }
                },
                "create-restart-schedule": {
                  "summary": "Crear una programación RESTART para fines de semana a la medianoche",
                  "value": {
                    "cron_expression": "0 0 * * 0,6",
                    "time_zone": "Pacific Standard Time",
                    "type": "restart"
                  }
                }
              }
            }
          }
        },
        "description": "Crea una nueva programación cron para un grupo de workspaces. Las programaciones definen operaciones automatizadas de energía (START, STOP, RESTART) que se ejecutan en programaciones especificadas según expresiones cron y zona horaria. Las programaciones START pueden incluir opcionalmente un ID de Workspace de dispositivo intermedio para operaciones Wake on LAN en redes seguras. Si se proporciona intermediate_device, indica que se debe usar un dispositivo intermedio. El sistema valida que no exista una programación en conflicto (mismo tipo, hora y día después de la conversión de zona horaria)."
      },
      "get": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Listar programaciones cron",
        "operationId": "listWorkspaceGroupSchedules",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de programaciones recuperada correctamente. Devuelve un arreglo de objetos de programación. Arreglo vacío si no existen programaciones.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupScheduleV2ListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta: formato de ID de grupo de workspaces no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: el usuario no tiene acceso a la organización o la organización no existe"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o el grupo de workspaces pertenece a una organización diferente (después de que la autorización se valida)"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera todas las programaciones cron configuradas para un grupo de workspaces. Devuelve un arreglo de objetos de programación que contienen expresión cron, zona horaria, tipo, información del dispositivo intermedio y metadatos de auditoría. Si el grupo de workspaces no tiene programaciones, se devuelve un arreglo vacío."
      }
    },
    "/v2/organizations/{organization_id}/workspace-groups": {
      "post": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Crear un grupo de workspaces",
        "operationId": "createWorkspaceGroup",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "responses": {
          "201": {
            "description": "Grupo de workspaces creado correctamente. La respuesta contiene el recurso creado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupDetailResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios - Valores de campo no válidos - Valor de tipo no válido (solo se permite STATIC) - Estructura de ubicación no válida"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "Conflicto: ya existe un grupo de workspaces con el mismo nombre"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspacegroupsCreateRequestV2"
              },
              "examples": {
                "create-static-workspace-group": {
                  "summary": "Crear un grupo de workspaces con los campos obligatorios mínimos",
                  "value": {
                    "name": "Grupo de Workspaces de producción"
                  }
                },
                "create-workspace-group-with-description": {
                  "summary": "Crear un grupo de workspaces con descripción",
                  "value": {
                    "name": "Grupo de Workspaces de desarrollo",
                    "description": "Grupo de workspaces para entornos de desarrollo",
                    "type": "static"
                  }
                },
                "create-workspace-group-with-location": {
                  "summary": "Crear un grupo de workspaces con información de ubicación",
                  "value": {
                    "name": "Grupo de Workspaces de la oficina de Madrid",
                    "description": "Grupo de workspaces para la oficina de Madrid",
                    "type": "static",
                    "location": {
                      "latitude": 40.4168,
                      "longitude": -3.7038,
                      "address": "Madrid, España",
                      "description": "Ubicación de la oficina principal"
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Crea un nuevo grupo de workspaces para la organización especificada. Actualmente solo se admiten grupos de workspaces de tipo STATIC. Devuelve el ID del grupo de workspaces creado tras una creación exitosa."
      },
      "get": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Listar grupos de workspaces",
        "operationId": "listWorkspaceGroups",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo opcional de orden (:asc o :desc). Campos de ordenación válidos: id, name, description, created_by, created_at, type, location. El orden ascendente se usa por defecto si no se proporciona sufijo."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos para incluir en cada elemento de grupos de workspaces. Campos seleccionables: id, name, description, organization_id, created_by, created_at, type, filter, location, entra_id_source. El campo id siempre se incluye.",
            "example": "name,type,created_at"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120,
              "description": "Filtrar grupos de workspaces usando un objeto JSON. Especifica el campo a filtrar, el operador de comparación y el valor. Ejemplo: {\"field\": \"name\", \"op\": \"eq\", \"value\": \"grupos de workspaces 1\"}",
              "example": "{\"field\": \"name\", \"op\": \"eq\", \"value\": \"Grupo de Workspace 1\"}"
            },
            "description": "Filtrar grupos de workspaces por uno o más criterios. Proporciona un objeto JSON con condiciones de filtrado. Puedes filtrar por: id, name, description, created_by, created_at, type, location, entra_id_source.resource_id, entra_id_source.resource_type, entra_id_source.resource_name. Para campos anidados como location o entra_id_source, usa notación por puntos (p. ej., location.latitude, entra_id_source.resource_type). Usa operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combina múltiples condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de grupos de workspaces",
                "description": "Devuelve grupos de workspaces cuyo nombre contiene el texto proporcionado.",
                "value": "{\"field\": \"name\", \"op\": \"contains\", \"value\": \"finanzas\"}"
              },
              "complex-and": {
                "summary": "Filtrar por tipo y ubicación",
                "description": "Devuelve grupos de workspaces STATIC por encima de un umbral de latitud.",
                "value": "{\"and\": [{\"field\": \"type\", \"op\": \"eq\", \"value\": \"STATIC\"}, {\"field\": \"location.latitude\", \"op\": \"gt\", \"value\": 40}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con múltiples patrones de nombre y requiere un tipo de recurso de Entra específico.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"name\", \"op\": \"contains\", \"value\": \"Finanzas\"}, {\"field\": \"name\", \"op\": \"contains\", \"value\": \"RRHH\"}]}, {\"field\": \"entra_id_source.resource_type\", \"op\": \"eq\", \"value\": \"GROUP\"}]}"
              }
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Número de elementos por página"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de grupos de workspaces recuperada correctamente. La respuesta incluye metadatos de paginación y un arreglo de datos de grupos de workspaces.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupListItemV2ListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Parámetros de paginación no válidos - Parámetro de ordenación no válido - Parámetros de filtrado no válidos"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de grupos de workspaces que pertenecen a la organización especificada. Admite filtrado y ordenación sobre propiedades de grupos de workspaces. Los filtros se proporcionan como una cadena JSON siguiendo la estructura AST de FilterNode. Los resultados se devuelven en páginas con metadatos de paginación."
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/core-process-groups/{id}": {
      "delete": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Eliminar grupo procesos core",
        "operationId": "deleteDigitalActivityCoreProcessGroup",
        "description": "Elimina un grupo de procesos core dentro de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de procesos core.",
            "example": "64f0c2a1b2d3e4f506070811"
          }
        ],
        "responses": {
          "204": {
            "description": "Grupo de procesos core eliminado correctamente. No se devuelve contenido."
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_path_params": {
                    "summary": "Formato de identificadores inválido",
                    "value": {
                      "error": {
                        "message": "Parámetros de ruta no válidos",
                        "code": "bad_request",
                        "details": "organization_id e id deben tener 24 caracteres hexadecimales."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/flows/{flow_id}": {
      "delete": {
        "tags": [
          "Flujos"
        ],
        "summary": "Eliminar un flujo",
        "operationId": "deleteFlow",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "flow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del flujo que se va a eliminar",
            "example": "507f1f77bcf86cd799439012"
          }
        ],
        "responses": {
          "204": {
            "description": "Flujo eliminado correctamente. No se devuelve contenido."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - ID de flujo no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Flujo no encontrado"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Elimina de forma permanente un flujo de la organización. Esta acción no se puede deshacer. No devuelve contenido (204) tras una eliminación correcta."
      },
      "get": {
        "tags": [
          "Flujos"
        ],
        "summary": "Recuperar un flujo",
        "operationId": "getFlowById",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "flow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del flujo",
            "example": "507f1f77bcf86cd799439012"
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "en-EN",
                "es-ES",
                "pt-BR",
                "ca-ES",
                "eu-ES"
              ],
              "default": "es-ES"
            },
            "description": "Código de idioma para campos de texto que admiten varios idiomas. Al crear o actualizar recursos, esto especifica el idioma de los valores de texto proporcionados. Al recuperar recursos, esto determina qué variante de idioma de los campos de texto multilingües se devuelve. Valores aceptados: 'en-EN' (inglés), 'es-ES' (español), 'pt-BR' (portugués), 'ca-ES' (catalán), 'eu-ES' (euskera). El valor predeterminado es 'es-ES' si no se proporciona."
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del flujo recuperados correctamente. La respuesta incluye la configuración completa del flujo, condiciones, destinos y métricas de ejecución.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - ID de flujo no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Flujo no encontrado"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera información detallada sobre un flujo específico, incluida su configuración, lógica de ejecución, condiciones, destinos y métricas de ejecución. Devuelve los datos completos del flujo en el idioma solicitado."
      },
      "put": {
        "tags": [
          "Flujos"
        ],
        "summary": "Actualizar un flujo",
        "operationId": "updateFlow",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "flow_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del flujo a actualizar",
            "example": "507f1f77bcf86cd799439012"
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "en-EN",
                "es-ES",
                "pt-BR",
                "ca-ES",
                "eu-ES"
              ],
              "default": "es-ES"
            },
            "description": "Código de idioma para campos de texto que admiten varios idiomas. Al crear o actualizar recursos, esto especifica el idioma de los valores de texto proporcionados. Al recuperar recursos, esto determina qué variante de idioma de los campos de texto multilingües se devuelve. Valores aceptados: 'en-EN' (inglés), 'es-ES' (español), 'pt-BR' (portugués), 'ca-ES' (catalán), 'eu-ES' (euskera). El valor predeterminado es 'es-ES' si no se proporciona."
          }
        ],
        "responses": {
          "200": {
            "description": "Flujo actualizado correctamente. La respuesta contiene el recurso actualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios - Valores de campo no válidos - Configuración de condición no válida - Identificador de microservicio no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Flujo u organización no encontrados"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable. Causas comunes: - Microservicio referenciado no encontrado - Entidades objetivo referenciadas (Workspaces, Workspace groups, Grupos de reporte) no encontradas o no pertenecientes - Tipo de condición no válido - El flujo no se puede habilitar"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFlowV2Request"
              },
              "examples": {
                "update-flow-configuration": {
                  "summary": "Actualizar flujo con nueva configuracion",
                  "value": {
                    "name": {
                      "en-EN": "Flujo diario de copia actualizado",
                      "es-ES": "Proceso de copia diaria actualizado"
                    },
                    "description": {
                      "en-EN": "Proceso automatizado de copia diaria actualizado",
                      "es-ES": "Proceso automatizado de copia actualizado"
                    },
                    "detection_only": false,
                    "cooldown_minutes": 120,
                    "enabled": true,
                    "init_text": {
                      "en-EN": "Iniciando proceso de copia actualizado...",
                      "es-ES": "Iniciando proceso de copia actualizado..."
                    },
                    "ok_text": {
                      "en-EN": "Copia completada correctamente"
                    },
                    "ko_text": {
                      "en-EN": "La copia fallo. Por favor, revisa los registros."
                    },
                    "target": {
                      "type": "workspaces",
                      "ids": [
                        "507f1f77bcf86cd799439012",
                        "507f1f77bcf86cd799439013"
                      ]
                    },
                    "microservice_id": "507f1f77bcf86cd799439014",
                    "conditions": [
                      {
                        "condition_type_id": "507f1f77bcf86cd799439015",
                        "operator": "gte",
                        "compare_to": "90",
                        "period": null,
                        "check_every": 600
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "description": "Actualiza la configuración de un flujo existente, incluyendo nombre, descripción, lógica de ejecución, condiciones y configuración de destino. Devuelve el recurso actualizado (200) tras una actualización correcta."
      }
    },
    "/v2/organizations/{organization_id}/reporting-groups/{reporting_group_id}": {
      "delete": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Eliminar un grupo de reporte",
        "operationId": "deleteReportingGroup",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de reporte que se va a eliminar",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "204": {
            "description": "Grupo de reporte eliminado correctamente. No se devuelve contenido."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Parámetros de ruta no válidos - Formato de ID no válido para organization_id o reporting_group_id"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de reporte no encontrado o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Elimina un grupo de reporte existente de la organización. El grupo de reporte no debe tener Workspaces asignados y debe ser directamente editable. No devuelve contenido (204) tras una eliminación exitosa."
      },
      "get": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Recuperar un grupo de reporte",
        "operationId": "getReportingGroupById",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de reporte",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del grupo de reporte recuperados correctamente. La respuesta incluye la configuración del grupo de reporte y los ajustes del agente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportingGroupByIdV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - formato de ID de grupo de reporte no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de reporte no encontrado o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera información detallada sobre un grupo de reporte específico, incluida su configuración y los ajustes del agente. Devuelve datos del grupo de reporte que coinciden con la estructura del endpoint de listado."
      },
      "put": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Actualizar un grupo de reporte",
        "operationId": "updateReportingGroup",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de reporte a actualizar",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Grupo de reporte actualizado correctamente. La respuesta contiene el recurso actualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportingGroupByIdV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios (name) - Valores de campo no válidos - Valor de fishing_pattern_field no válido (debe ser uno de: full_name, description, ou, current_subnet) - Valor de fishing_pattern no válido (supera maxLength: 250) - Formato de ID no válido para los campos patch_policy_target_id o intermediate_device_*_id - Dispositivos intermedios no definidos secuencialmente (intermediate_device_2_id requiere intermediate_device_1_id, intermediate_device_3_id requiere intermediate_device_2_id)"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "No encontrado. Causas comunes: - Grupo de reporte no encontrado o que no pertenece a la organización - Destino de política de parches no encontrado"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable. Causas comunes: - Los IDs de Workspace de dispositivos intermedios no existen o no pertenecen a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReportingGroupRequestV2"
              },
              "examples": {
                "update-reporting-group-full-replacement": {
                  "summary": "Actualizar grupo de reporte con todos los campos actualizables, incluidos los dispositivos intermedios",
                  "value": {
                    "name": "Grupo de reporte de producción actualizado",
                    "description": "Grupo de reporte actualizado para entornos de producción",
                    "patch_policy_target_id": "507f1f77bcf86cd799439040",
                    "fishing_pattern": "Estaciones de trabajo Windows",
                    "fishing_pattern_field": "full_name",
                    "intermediate_device_1_id": "507f1f77bcf86cd799439050",
                    "intermediate_device_2_id": "507f1f77bcf86cd799439051",
                    "intermediate_device_3_id": "507f1f77bcf86cd799439052"
                  }
                },
                "update-reporting-group-minimal-fields": {
                  "summary": "Actualizar grupo de reporte solo con los campos obligatorios (limpia todos los campos opcionales)",
                  "value": {
                    "name": "Nombre actualizado del grupo de reporte"
                  },
                  "description": "Este ejemplo muestra la actualización solo del nombre. Todos los campos opcionales (description, patch_policy_target_id, fishing_pattern, fishing_pattern_field y dispositivos intermedios) se limpiarán."
                },
                "update-reporting-group-with-single-intermediate-device": {
                  "summary": "Actualizar grupo de reporte solo con el primer dispositivo intermedio",
                  "value": {
                    "name": "Nombre actualizado del grupo de reporte",
                    "description": "Configuración de un solo dispositivo intermedio",
                    "intermediate_device_1_id": "507f1f77bcf86cd799439050"
                  },
                  "description": "Este ejemplo establece solo intermediate_device_1_id. intermediate_device_2_id e intermediate_device_3_id se limpiarán si estaban establecidos previamente."
                },
                "update-reporting-group-clear-intermediate-devices": {
                  "summary": "Actualizar grupo de reporte y limpiar todos los dispositivos intermedios",
                  "value": {
                    "name": "Nombre actualizado del grupo de reporte",
                    "description": "Sin dispositivos intermedios"
                  },
                  "description": "Al omitir todos los campos intermediate_device_*_id, todos se limpiarán (comportamiento idempotente)."
                }
              }
            }
          }
        },
        "description": "Actualiza la configuración de un grupo de reporte existente, incluyendo nombre, descripción, destino de política de parches, patrón de búsqueda y dispositivos intermedios. Este endpoint implementa semántica de reemplazo completo: todos los campos actualizables deben incluirse en la solicitud. Omitir campos opcionales los limpiará (comportamiento idempotente). Puede configurar opcionalmente dispositivos intermedios (hasta 3) proporcionando identificadores de Workspace. Los dispositivos intermedios se usan para acciones Wake-on-LAN en redes seguras, permitiendo el encendido remoto de dispositivos a través de puertas de enlace intermedias. Los dispositivos intermedios deben definirse secuencialmente: no puede definir intermediate_device_2_id sin intermediate_device_1_id, ni intermediate_device_3_id sin intermediate_device_2_id. Todos los IDs de Workspace de dispositivos intermedios deben existir y pertenecer a la organización. Devuelve el recurso actualizado (200) tras una actualización exitosa."
      }
    },
    "/v2/organizations/{organization_id}/roles/{role_id}": {
      "delete": {
        "tags": [
          "Roles"
        ],
        "summary": "Eliminar un rol",
        "operationId": "delete_role",
        "description": "Elimina el rol especificado dentro del alcance de una organización. No devuelve contenido cuando la eliminación se realiza correctamente.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "role_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del rol.",
            "example": "64f0c2a1b2d3e4f5060708aa"
          }
        ],
        "responses": {
          "204": {
            "description": "Rol de usuario eliminado correctamente."
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_role_id": {
                    "summary": "Formato de identificador de rol no válido",
                    "value": {
                      "error": {
                        "message": "Formato de role_id no válido",
                        "code": "bad_request",
                        "details": "role_id debe ser una cadena hexadecimal en minúsculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Rol no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "role_not_found": {
                    "summary": "No se encontró el rol solicitado",
                    "value": {
                      "error": {
                        "message": "Rol no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "La solicitud no se puede procesar porque el rol todavía tiene usuarios asignados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "role_has_assigned_users": {
                    "summary": "El rol todavía tiene usuarios asignados",
                    "value": {
                      "error": {
                        "message": "El rol tiene usuarios asignados",
                        "code": "unprocessable_entity",
                        "details": "Elimina las asignaciones del rol de los usuarios antes de eliminar este rol"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Roles"
        ],
        "summary": "Recuperar un rol",
        "operationId": "get_role_by_id",
        "description": "Devuelve detalles del rol solicitado dentro del alcance de una organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "role_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del rol.",
            "example": "64f0c2a1b2d3e4f5060708aa"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del rol de usuario recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleV2"
                },
                "examples": {
                  "role_details": {
                    "summary": "Respuesta de detalle del rol",
                    "value": {
                      "id": "64f0c2a1b2d3e4f5060708aa",
                      "name": "Administrador de la organización",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "created_at": "2026-03-12T10:30:00Z",
                      "created_by": "64f0c2a1b2d3e4f5060708bb",
                      "permissions": [
                        {
                          "portal_permission": "organization_admin",
                          "workspaces_permission": "admin",
                          "analyzer_permission": "access",
                          "target_organization": "all",
                          "target_reporting_groups": [
                            "64f0c2a1b2d3e4f5060708c1",
                            "64f0c2a1b2d3e4f5060708c2"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_role_id": {
                    "summary": "Formato de identificador de rol no válido",
                    "value": {
                      "error": {
                        "message": "Formato de role_id no válido",
                        "code": "bad_request",
                        "details": "role_id debe ser una cadena hexadecimal en minúsculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Rol no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "role_not_found": {
                    "summary": "No se encontró el rol solicitado",
                    "value": {
                      "error": {
                        "message": "Rol no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Roles"
        ],
        "summary": "Actualizar un rol",
        "operationId": "update_role_by_id",
        "description": "Realiza una actualización de reemplazo completo de los campos mutables del rol en una sola solicitud, incluido el conjunto completo de permisos.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "role_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de rol.",
            "example": "64f0c2a1b2d3e4f5060708aa"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRoleRequestV2"
              },
              "examples": {
                "full_update_organization_scoped": {
                  "summary": "Actualizar rol con permisos de alcance de organización",
                  "value": {
                    "name": "Operador de organización",
                    "permissions": [
                      {
                        "target_organization": "507f1f77bcf86cd799439011",
                        "portal_permission": "organization_admin",
                        "workspaces_permission": "admin_read_only",
                        "analyzer_permission": "access",
                        "target_reporting_groups": [
                          "64f0c2a1b2d3e4f5060708c1",
                          "64f0c2a1b2d3e4f5060708c2"
                        ]
                      }
                    ]
                  }
                },
                "full_update_mixed_scopes": {
                  "summary": "Actualizar rol con permisos de alcance mixto",
                  "value": {
                    "name": "Soporte de plataforma",
                    "permissions": [
                      {
                        "target_organization": "all",
                        "portal_permission": "platform",
                        "workspaces_permission": "admin",
                        "analyzer_permission": "admin",
                        "target_reporting_groups": "all"
                      },
                      {
                        "target_organization": "507f1f77bcf86cd799439011",
                        "portal_permission": "l2_support_team",
                        "workspaces_permission": "l2_support_team",
                        "analyzer_permission": "access",
                        "target_reporting_groups": [
                          "64f0c2a1b2d3e4f5060708d1"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rol actualizado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleV2"
                }
              }
            }
          },
          "400": {
            "description": "Parámetro de ruta inválido o contrato del cuerpo de solicitud inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_request_body": {
                    "summary": "Carga útil de actualización malformada",
                    "value": {
                      "error": {
                        "message": "Cuerpo de solicitud inválido",
                        "code": "bad_request",
                        "details": "permissions[0].target_organization debe ser una cadena hexadecimal en minusculas de 24 caracteres o el valor all"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No se encontró el rol dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "role_not_found": {
                    "summary": "No se encontró el rol solicitado",
                    "value": {
                      "error": {
                        "message": "Rol no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "La solicitud entra en conflicto con el estado existente del rol.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "role_name_conflict": {
                    "summary": "El nombre del rol ya existe",
                    "value": {
                      "error": {
                        "message": "El nombre del rol ya existe",
                        "code": "conflict",
                        "details": "name ya está en uso dentro de esta organización"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/tenants/{tenant_id}": {
      "delete": {
        "tags": [
          "Tenants"
        ],
        "summary": "Eliminar un tenant",
        "operationId": "deleteTenant",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización propietaria del tenant",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "tenant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del tenant que se va a eliminar",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "204": {
            "description": "Tenant eliminado correctamente. La organización relacionada ha sido desactivada. No se devuelve contenido en el cuerpo de la respuesta."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Parámetros de ruta no válidos - Formato de ID de tenant no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: se requiere autenticación o el usuario no tiene permisos para eliminar el tenant. También se devuelve al intentar eliminar un tenant de la propia organización del usuario."
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Tenant no encontrado"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable: error de validación de lógica de negocio. Causas comunes: - No se puede eliminar un tenant con sub-tenants (la organización tiene más de un tenant) - No se puede eliminar un tenant de la propia organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Elimina un tenant existente y desactiva la organización relacionada. No se puede eliminar un tenant de la propia organización del usuario. No se puede eliminar un tenant si la organización tiene más de un tenant."
      },
      "get": {
        "tags": [
          "Tenants"
        ],
        "summary": "Recuperar un tenant",
        "operationId": "getTenantById",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "tenant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del tenant",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del tenant recuperados correctamente. La respuesta incluye información completa del tenant, incluidas las asignaciones de producto y política.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantByIdV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - formato de ID de tenant inválido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Tenant no encontrado"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera información detallada sobre un tenant específico, incluida su configuración, asignación de producto, asignación de política y metadatos. Devuelve datos completos del tenant para la organización especificada."
      },
      "put": {
        "tags": [
          "Tenants"
        ],
        "summary": "Actualizar un tenant",
        "operationId": "updateTenant",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización propietaria del tenant",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "tenant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del tenant a actualizar",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Nombre del tenant actualizado correctamente. El nombre de la organización relacionada también se ha actualizado. La respuesta contiene el recurso actualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantByIdV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Cuerpo de solicitud o parámetros de ruta no válidos - Falta el campo obligatorio (name) - Tipos de campo no válidos"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: se requiere autenticación o el usuario no tiene permiso para actualizar el tenant"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Tenant no encontrado"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTenantRequestV2"
              },
              "examples": {
                "update-tenant-name": {
                  "summary": "Actualizar el nombre de un tenant existente",
                  "value": {
                    "name": "Tenant de Produccion Actualizado"
                  }
                }
              }
            }
          }
        },
        "description": "Actualiza el nombre de un tenant existente. La actualización del nombre del tenant también actualiza el nombre de la organización relacionada."
      }
    },
    "/v2/organizations/{organization_id}/users/{user_id}": {
      "delete": {
        "tags": [
          "Usuarios"
        ],
        "summary": "Eliminar un usuario",
        "operationId": "delete_user_by_id",
        "description": "Elimina el usuario especificado dentro del alcance de una organización. ",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del usuario.",
            "example": "64f0c2a1b2d3e4f506070801"
          }
        ],
        "responses": {
          "204": {
            "description": "Usuario eliminado correctamente."
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_user_id": {
                    "summary": "Formato de identificador de usuario no válido",
                    "value": {
                      "error": {
                        "message": "Formato de user_id no válido",
                        "code": "bad_request",
                        "details": "user_id debe ser una cadena hexadecimal en minúsculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Usuario no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "user_not_found": {
                    "summary": "No se encontró el usuario solicitado",
                    "value": {
                      "error": {
                        "message": "Usuario no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Usuarios"
        ],
        "summary": "Recuperar un usuario",
        "operationId": "get_user_by_id",
        "description": "Devuelve los detalles del usuario solicitado dentro del alcance de una organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del usuario.",
            "example": "64f0c2a1b2d3e4f506070801"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del usuario recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserByIdV2"
                },
                "examples": {
                  "user_details": {
                    "summary": "Respuesta de detalle de usuario",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070801",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Ana",
                      "surname": "López",
                      "email": "ana.lopez@example.com",
                      "language": "en-EN",
                      "created_at": "2025-12-01T10:30:00.000Z",
                      "department": "Soporte",
                      "role_id": "64f0c2a1b2d3e4f5060708aa",
                      "created_by": "64f0c2a1b2d3e4f5060708bb",
                      "email_login_enabled": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_user_id": {
                    "summary": "Formato de identificador de usuario no válido",
                    "value": {
                      "error": {
                        "message": "Formato de user_id no válido",
                        "code": "bad_request",
                        "details": "user_id debe ser una cadena hexadecimal en minusculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Usuario no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "user_not_found": {
                    "summary": "El usuario solicitado no fue encontrado",
                    "value": {
                      "error": {
                        "message": "Usuario no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Usuarios"
        ],
        "summary": "Actualizar un usuario",
        "operationId": "update_user",
        "description": "Actualiza por completo los datos editables del usuario en la organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del usuario a actualizar.",
            "example": "64f0c2a1b2d3e4f506070801"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserRequestV2"
              },
              "examples": {
                "full_update": {
                  "summary": "Carga útil completa de actualización de usuario",
                  "value": {
                    "name": "Ana",
                    "surname": "López",
                    "email": "ana.lopez@example.com",
                    "department": "Support",
                    "role_id": "64f0c2a1b2d3e4f5060708aa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Usuario actualizado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserByIdV2"
                },
                "examples": {
                  "updated": {
                    "summary": "Usuario actualizado",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070801",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Ana",
                      "surname": "López",
                      "email": "ana.lopez@example.com",
                      "language": "en-EN",
                      "created_at": "2026-06-22T16:00:00.000Z",
                      "department": "Support",
                      "role_id": "64f0c2a1b2d3e4f5060708aa",
                      "created_by": "64f0c2a1b2d3e4f5060708bb",
                      "email_login_enabled": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetro de ruta inválido o contrato del cuerpo de la solicitud inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_request_body": {
                    "summary": "Carga de actualización malformada",
                    "value": {
                      "error": {
                        "message": "Cuerpo de solicitud inválido",
                        "code": "bad_request",
                        "details": "el parámetro de ruta user_id debe ser una cadena hexadecimal en minúsculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No se encontró el recurso objetivo dentro del alcance de organización autorizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "user_not_found": {
                    "summary": "No se encontró el usuario objetivo",
                    "value": {
                      "error": {
                        "message": "Usuario no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "La solicitud entra en conflicto con un estado de recurso existente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "email_conflict": {
                    "summary": "El correo electrónico ya existe",
                    "value": {
                      "error": {
                        "message": "El correo electrónico ya existe",
                        "code": "conflict",
                        "details": "el correo electrónico ya está registrado para otro usuario"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}": {
      "delete": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Eliminar un workspace",
        "operationId": "delete_workspace_by_id",
        "description": "Acepta la solicitud de eliminacion del workspace dentro del alcance de una organización autorizada e inicia un flujo asincrono. La respuesta devuelve la operación creada, que puede consultarse despues en los endpoints de operaciones.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del workspace.",
            "example": "64f0c2a1b2d3e4f506070801"
          }
        ],
        "responses": {
          "202": {
            "description": "Solicitud aceptada. Se devuelve la operación para seguimiento en endpoints de operaciones.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOperationByIdResponseV2"
                },
                "examples": {
                  "operation_created": {
                    "summary": "Operación creada para la eliminación asincrónica",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070811",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "delete_workspace",
                      "description": "Operación de eliminación de workspace",
                      "status": "pending",
                      "created_at": "2026-06-05T14:12:00Z",
                      "started_at": null,
                      "ended_at": null,
                      "microservice_id": null,
                      "flow_id": null,
                      "remote_support": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_workspace_id": {
                    "summary": "Formato de workspace_id no válido",
                    "value": {
                      "error": {
                        "message": "Formato de workspace_id no válido",
                        "code": "bad_request",
                        "details": "workspace_id debe ser una cadena hexadecimal en minusculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "No se encontró el workspace solicitado",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Recuperar un workspace",
        "operationId": "getWorkspaceById",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del Workspace",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del Workspace recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspacePublicV2"
                },
                "examples": {
                  "workspace-details": {
                    "summary": "Información detallada del Workspace",
                    "value": {
                      "id": "22f5381aa25e89b73785ca34",
                      "organization_id": "155f78b81155f8ab327ef274",
                      "name": "SDI04-001.org.terravex.net",
                      "related_environment": "1437d381972ce53252aabe72f053af7c",
                      "operating_system": "Microsoft Windows Server 2022 Standard 21H2",
                      "serial_number": "40a70e53327456131ae3321135531ae87f655cbeab27f01134c7ef366a7f2402",
                      "ip_address": "172.30.113.115",
                      "os_update_num_pending": 5,
                      "reporting_group_id": "65f83219942714fc24f01435",
                      "flxmid": "50a70e53327456131ae5921135531ae87f639cbe5b27f09034c7ef366a7f2402",
                      "os_update_num_days_since_last": 183,
                      "total_ram": 8191,
                      "altitude": 0,
                      "antivirus": "Windows Defender",
                      "antivirus_status": "installed_working",
                      "bios_manufacturer": "VMware, Inc.",
                      "bios_mode": "UEFI",
                      "bios_version": "P79 Ver. 6.00",
                      "bios_smbversion": "2.7",
                      "bios_serialnumber": "VMware-42 06 fd 7c 3a f4 af 1c-97 07 56 e2 07 67 d7 23",
                      "base_board_manufacturer": "Intel Corporation",
                      "base_board_product": "440BX Desktop Reference Platform",
                      "base_board_version": "A30",
                      "broker": "citrix_on-premises",
                      "public_ip_city": "Barcelona",
                      "flexxagent_version": "25.9.1.0",
                      "compliance_result": "not_evaluated",
                      "compliance_last_execution": "2025-06-12T06:13:17.17Z",
                      "domain_name": "org.terravex.net",
                      "public_ip_country": "ES",
                      "cores_count": "4",
                      "edr_active_detections": false,
                      "edr_host_id": "11bbcc1e6e2c440aa8b7522a78a292ad",
                      "edr_status": "installed_working",
                      "edr_version": "7.05.17706.0",
                      "current_subnet": "172.30.213.0/24",
                      "default_gateway": "172.30.213.1",
                      "device_kind": "virtual",
                      "edr": "CrowdStrike",
                      "ema_agent_version": "",
                      "ema_endpoint_id": "",
                      "embedded_controller_version": "255.255",
                      "os_fast_startup": false,
                      "flexxanalyzer_config": "configured",
                      "flexxanalyzer_version": "3.0.2",
                      "hypervisor": "vmware_vsphere",
                      "ip_version": "IPv4",
                      "public_ip_isp": "Cloudflare, Inc.",
                      "iot_hub_config_sync_status": "synced",
                      "is_amt_supported": false,
                      "is_laptop": false,
                      "is_physical": false,
                      "last_boot_duration": 20,
                      "last_restart_time": null,
                      "last_time": "2025-06-12T06:13:17.17Z",
                      "last_windows_update": "2025-09-18T00:00:00.00Z",
                      "last_autorepair": "2025-06-10T10:00:00.00Z",
                      "latitude": 0,
                      "locale": "English (United States)",
                      "longitude": 0,
                      "mac_address": "10-52-56-36-21-42",
                      "network_interface_type": "unknown",
                      "os_build_number": "6.3.20348.4171",
                      "os_manufacturer": "Microsoft Corporation",
                      "os_version": "10.0.20348.20348",
                      "ou": "OU=NonPersistent,OU=Workstations,OU=OPS914,DC=ops914,DC=terravex,DC=net",
                      "os_page_file": "C:\\pagefile.sys",
                      "os_page_file_space": 512,
                      "platform_role": "Desktop",
                      "platform_type": "windows",
                      "processor": "Intel(R) Xeon(R) Gold 6348 CPU @ 2.60GHz, 4 Core(s), 4 Logical Processors",
                      "public_ip": "19.27.129.141",
                      "os_reboot_pending": false,
                      "secure_boot_state": "On",
                      "system_model": "VMware7,1",
                      "system_type": "x64-based PC",
                      "os_time_zone": "Romance Standard Time",
                      "user_name": "Domain\\user001",
                      "vm_type": "workspace",
                      "windows_type": "server",
                      "created_at": "2023-12-18T11:26:11.11Z",
                      "last_deregistration_time": "2026-01-19T12:26:25.25Z",
                      "delete_scheduled_at": "2026-07-15T00:00:00.000Z",
                      "encrypted_harddisks": "partial",
                      "custom_field_01": "testVal1",
                      "custom_field_02": "testVal2",
                      "custom_field_03": "4",
                      "custom_field_04": "",
                      "custom_field_05": "",
                      "custom_field_06": "",
                      "custom_field_07": "",
                      "custom_field_08": "",
                      "custom_field_09": "",
                      "custom_field_10": "",
                      "flexxagent_type": "unified",
                      "antivirus_version_number": "4.18.2104.5",
                      "related_location": "C08D2228-E80A-4ADA-A75F-03E33E71D119",
                      "area": "Development",
                      "custom_field_11": "",
                      "custom_field_12": "",
                      "custom_field_13": "",
                      "custom_field_14": "",
                      "custom_field_15": "",
                      "custom_field_16": "",
                      "custom_field_17": "",
                      "custom_field_18": "",
                      "custom_field_19": "",
                      "custom_field_20": "",
                      "department": "Department",
                      "office": "Office",
                      "last_custom_fields_update": "2025-12-24T11:24:51.51Z",
                      "workspace_id": "6676aa0c1e9c850250a70e53327456131ae59211aa531ae87f639cbe5b27f09034c7e3366a7f2402",
                      "flexxanalyzer_proxy_uri": "",
                      "iot_hub_name": "idIot0e33d84fe5761e",
                      "flexxagent_status": "stopped",
                      "boot_hard_disk_used_percentage": 34,
                      "last_connection_time": "2025-06-12T06:13:17.17Z",
                      "network_signal": 0,
                      "num_alerts": 0,
                      "percent_cpu": 17,
                      "percent_ram": 0,
                      "power_state": "off",
                      "sessions_count": 0,
                      "used_system_disk_c": 34,
                      "wake_on_lan_mac": "10-50-56-56-51-12",
                      "wake_on_lan_subnet": "172.30.213.0/24",
                      "broker_status": "disconnected",
                      "status": "online"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta: el formato del ID de Workspace no es válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Workspace no encontrado"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera información detallada sobre un Workspace específico."
      }
    },
    "/v2/organizations/{organization_id}/workspace-groups/{workspace_group_id}/schedules/{schedule_id}": {
      "delete": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Eliminar una programación cron",
        "operationId": "deleteWorkspaceGroupSchedule",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          },
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la programación a eliminar",
            "example": "507f1f77bcf86cd799439060"
          }
        ],
        "responses": {
          "204": {
            "description": "Programación eliminada correctamente. No se devuelve contenido."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - formato de ID de programación no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - el usuario no tiene acceso a la organización, o la organización no existe"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "No se encontró el grupo de workspaces o la programación, o el grupo de workspaces pertenece a una organización diferente (después de que la autorización se valide)"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Elimina una programación cron de un grupo de workspaces. Una vez eliminada, la operación de energía automatizada definida por esta programación ya no se ejecutará. La programación debe pertenecer al grupo de workspaces y a la organización especificados."
      },
      "get": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Recuperar una programación cron",
        "operationId": "getWorkspaceGroupScheduleById",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          },
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la programación",
            "example": "507f1f77bcf86cd799439060"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles de programación recuperados correctamente. La respuesta incluye expresión cron, zona horaria, tipo, información del dispositivo intermedio y metadatos de auditoría.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupScheduleV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - formato de ID de programación no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - el usuario no tiene acceso a la organización, o la organización no existe"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "No se encontró el grupo de workspaces o la programación, o el grupo de workspaces pertenece a una organización diferente (después de que la autorización se válida)"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera información detallada sobre programación cron específica para un grupo de workspaces. Devuelve la configuración de la programación, incluida la expresión cron, la zona horaria, el tipo de operación, la configuración del dispositivo intermedio y los metadatos de auditoría (creado por, actualizado por, actualizado en)."
      },
      "put": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Actualizar una programación cron",
        "operationId": "updateWorkspaceGroupSchedule",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          },
          {
            "name": "schedule_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la programación a actualizar",
            "example": "507f1f77bcf86cd799439060"
          }
        ],
        "responses": {
          "200": {
            "description": "Programación actualizada correctamente. La respuesta contiene el recurso actualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupScheduleV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos obligatorios (cron_expression, time_zone, type) - Formato de expresión cron no válido - Valor de zona horaria no válido - Tipo de programación no válido (debe ser START, STOP o RESTART) - Formato de ID de Workspace intermediate_device no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces o programación no encontrada, o no pertenece a la organización"
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "Conflicto - Ya existe una programación con el mismo tipo, hora y día (después de la conversión de zona horaria), excluyendo la programación actual que se está actualizando"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable. Causas comunes: - El ID de Workspace intermediate_device no existe o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWorkspaceGroupScheduleRequestV2"
              },
              "examples": {
                "update-schedule-time": {
                  "summary": "Actualizar programación para ejecutar a una hora diferente",
                  "value": {
                    "cron_expression": "0 9 * * 1-5",
                    "time_zone": "Eastern Standard Time",
                    "type": "start"
                  }
                },
                "add-intermediate-device": {
                  "summary": "Agregar dispositivo intermedio a una programación START existente",
                  "value": {
                    "cron_expression": "0 8 * * 1-5",
                    "time_zone": "Eastern Standard Time",
                    "type": "start",
                    "intermediate_device": "507f1f77bcf86cd799439050"
                  }
                },
                "remove-intermediate-device": {
                  "summary": "Eliminar dispositivo intermedio de la programación START",
                  "value": {
                    "cron_expression": "0 8 * * 1-5",
                    "time_zone": "Eastern Standard Time",
                    "type": "start"
                  }
                },
                "change-schedule-type": {
                  "summary": "Cambiar el tipo de programación de START a STOP",
                  "value": {
                    "cron_expression": "0 18 * * 1-5",
                    "time_zone": "UTC",
                    "type": "stop"
                  }
                }
              }
            }
          }
        },
        "description": "Actualiza una programación cron existente para un grupo de workspaces. Se deben proporcionar todos los campos de la programación, ya que este endpoint implementa semántica de reemplazo completo. El sistema valida que no exista una programación en conflicto (mismo tipo, hora y día después de la conversión de zona horaria), excluyendo la programación actual que se está actualizando. Para eliminar un dispositivo intermedio de una programación START, omita el campo intermediate_device."
      }
    },
    "/v2/organizations/{organization_id}/workspace-groups/{workspace_group_id}": {
      "delete": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Eliminar un grupo de workspaces",
        "operationId": "deleteWorkspaceGroup",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces que se eliminará",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "204": {
            "description": "Grupo de workspaces eliminado correctamente. No se devuelve contenido."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - formato de ID de grupo de workspaces no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Elimina permanentemente un grupo de workspaces de la organización. Esta acción no se puede deshacer. No devuelve contenido (204) tras una eliminación exitosa."
      },
      "get": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Recuperar un grupo de workspaces",
        "operationId": "getWorkspaceGroupById",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles del grupo de workspaces recuperados correctamente. La respuesta incluye la configuración, el tipo y la ubicación del grupo de workspaces.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupDetailResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - formato de ID de grupo de workspaces no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera información detallada sobre un grupo de workspaces específico, incluida su configuración, tipo y ubicación. Devuelve datos del grupo de workspaces que coinciden con la estructura del endpoint de listado."
      },
      "put": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Actualizar un grupo de workspaces",
        "operationId": "updateWorkspaceGroup",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces que se actualizará",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Grupo de workspaces actualizado correctamente. La respuesta contiene el recurso actualizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupDetailResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Faltan campos requeridos (name, description, location) - Valores de campo no válidos - Estructura de location no válida - Faltan campos requeridos de location (latitude, longitude, address)"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o no pertenece a la organización"
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "Conflicto - ya existe un grupo de workspaces con el mismo nombre"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity",
            "description": "Entidad no procesable - violación de regla de negocio (p. ej., no se puede establecer filter en un grupo de workspaces de Entra ID)"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceGroupUpdateRequestV2"
              },
              "examples": {
                "update-workspace-group-(full-replacement)": {
                  "summary": "Actualizar grupo de workspaces con todos los campos requeridos",
                  "value": {
                    "name": "Grupo de Workspace de Produccion Actualizado",
                    "description": "Grupo de workspaces actualizado para entornos de producción",
                    "location": {
                      "latitude": 40.4168,
                      "longitude": -3.7038,
                      "address": "Madrid, Espana",
                      "description": "Ubicación de oficina actualizada"
                    }
                  }
                },
                "update-workspace-group-without-location-description": {
                  "summary": "Actualizar grupo de workspaces con campos requeridos; la descripcion de location es opcional",
                  "value": {
                    "name": "Grupo de Workspace de Produccion Actualizado",
                    "description": "Grupo de workspaces actualizado para entornos de producción",
                    "location": {
                      "latitude": 40.4168,
                      "longitude": -3.7038,
                      "address": "Madrid, Espana"
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Actualiza la configuración de un grupo de workspaces existente, incluyendo name, description y location. Esta es una solicitud PUT que implementa reemplazo completo: todos los campos actualizables son obligatorios. Devuelve el recurso actualizado (200) tras una actualización exitosa."
      }
    },
    "/v2/organizations/{organization_id}/audits": {
      "get": {
        "tags": [
          "Auditoría"
        ],
        "operationId": "get_audits",
        "summary": "Listar auditorías",
        "description": "Devuelve los eventos de auditoría de la organización indicada para consultar qué acción se realizó, sobre qué entidad, cuándo ocurrió y quién la desencadenó. Cuando `trigger_type` es `user`, `trigger_id` corresponde al identificador del usuario y puede consultarse mediante el endpoint de usuarios. Cuando `trigger_type` es `api`, `trigger_id` corresponde al identificador de la API key; por ahora las API keys no son consultables desde esta API pública.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "description": "Identificador de la organización.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Número de página a consultar.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Cantidad de elementos por página.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 100
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Lista separada por comas con los campos de respuesta a incluir.",
            "schema": {
              "type": "string",
              "example": "id,audited_at,action,entity_type,entity_id,trigger_type,trigger_id,trigger_name"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`).",
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            }
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "description": "Expresión JSON de filtrado sobre campos filtrables de la respuesta.",
            "schema": {
              "type": "string"
            },
            "examples": {
              "simple": {
                "summary": "Filtro simple por tipo de entidad",
                "value": "{\"field\":\"entity_type\",\"op\":\"eq\",\"value\":\"workspace\"}"
              },
              "complex-and": {
                "summary": "Combinación AND por acción y tipo de entidad",
                "value": "{\"and\":[{\"field\":\"action\",\"op\":\"eq\",\"value\":\"update\"},{\"field\":\"entity_type\",\"op\":\"eq\",\"value\":\"workspace\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinación OR dentro de AND con actor y acción",
                "value": "{\"and\":[{\"or\":[{\"field\":\"trigger_id\",\"op\":\"eq\",\"value\":\"8c1a7e2b9f4d3c6e0a5b1d2f\"},{\"field\":\"trigger_id\",\"op\":\"eq\",\"value\":\"f0b9c3d7a1e5f8b2c4d6e9a0\"}]},{\"field\":\"action\",\"op\":\"eq\",\"value\":\"delete\"}]}"
              }
            }
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "description": "Expresión JSON para agregación. Estructura: {\"group_by\":[\"field\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}. No se puede combinar con `fields`.",
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "examples": {
              "group-by-action-count": {
                "summary": "Agrupar por acción y contar",
                "value": "{\"group_by\":[\"action\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group-by-entity-type-count": {
                "summary": "Agrupar por tipo de entidad y contar",
                "value": "{\"group_by\":[\"entity_type\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Listado de auditorías obtenido correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetAuditsResponseV2"
                },
                "examples": {
                  "list-mode": {
                    "summary": "Respuesta en modo listado",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "b7e4c2a9d1f6038e5a2c9b4d",
                          "audited_at": "2026-06-30T11:45:12.000Z",
                          "organization_id": "a9d3f1b7c4e8026d5f0a3c8e",
                          "action": "update",
                          "entity_type": "workspace",
                          "entity_id": "c2f8a1d4b9e3067f5c0d2a8e",
                          "trigger_type": "api",
                          "trigger_id": "8c1a7e2b9f4d3c6e0a5b1d2f",
                          "trigger_name": "Api Key"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid request data",
                    "details": "fields and aggregate cannot be combined."
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado para acceder a la organización solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": "unauthorized",
                    "message": "No autorizado para acceder a la organización solicitada."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "El recurso solicitado no existe en la organización indicada."
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": "internal_error",
                    "message": "Se ha producido un error interno."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/flows/condition-types": {
      "get": {
        "tags": [
          "Flujos"
        ],
        "summary": "Listar tipos de condición",
        "operationId": "listConditionTypes",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Elementos por página (predeterminado: 100, máx.: 100)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo de orden opcional (:asc o :desc). Usa nombres de propiedades de la respuesta. Campos válidos: id, name, description, type, value_type, value_placeholder, period. Ejemplo: \"name:asc\" o \"type:desc\""
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista de campos separada por comas para incluir en cada elemento de tipo de condición. Campos seleccionables: id, name, description, type, frequency_values, value_type, value_placeholder, op_values, period. El campo id siempre se incluye.",
            "example": "name,type,op_values"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Filtra tipos de condición por uno o más criterios. Proporciona un objeto JSON con condiciones de filtro. Puedes filtrar por cualquier campo devuelto en la respuesta. Usa operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combina múltiples condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por tipo de condición",
                "description": "Devuelve tipos de condición que coinciden con un identificador de tipo específico.",
                "value": "{\"field\": \"type\", \"op\": \"eq\", \"value\": \"osVersion\"}"
              },
              "complex-and": {
                "summary": "Filtrar por tipo de valor y soporte periódico",
                "description": "Devuelve tipos de condición basados en cadenas que no son periódicos.",
                "value": "{\"and\": [{\"field\": \"value_type\", \"op\": \"eq\", \"value\": \"string\"}, {\"field\": \"period\", \"op\": \"eq\", \"value\": false}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide por texto de nombre o descripción y restringe por tipo de condición.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"name\", \"op\": \"contains\", \"value\": \"os\"}, {\"field\": \"description\", \"op\": \"contains\", \"value\": \"version\"}]}, {\"field\": \"type\", \"op\": \"eq\", \"value\": \"osVersion\"}]}"
              }
            }
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "en-EN",
                "es-ES",
                "pt-BR",
                "ca-ES",
                "eu-ES"
              ],
              "default": "es-ES"
            },
            "description": "Código de idioma para campos de texto que admiten múltiples idiomas. Al crear o actualizar recursos, esto especifica el idioma de los valores de texto proporcionados. Al recuperar recursos, esto determina qué variante de idioma de los campos de texto multilingües se devuelve. Valores aceptados: 'en-EN' (inglés), 'es-ES' (español), 'pt-BR' (portugués), 'ca-ES' (catalán), 'eu-ES' (euskera). Si no se proporciona, el valor predeterminado es 'es-ES'."
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de tipos de condición recuperada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConditionTypeV2ListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta - ID de organización inválido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de tipos de condición disponibles que pueden usarse en condiciones de flujo. Admite paginación, ordenación, filtrado y selección de campos."
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/core-process-groups/{core_process_group_id}/core-processes": {
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Listar procesos core del grupo",
        "operationId": "listDigitalActivityCoreProcessGroupCoreProcesses",
        "description": "Devuelve la lista completa actual de procesos core del grupo dentro de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "core_process_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de procesos core.",
            "example": "64f0c2a1b2d3e4f506070811"
          }
        ],
        "responses": {
          "200": {
            "description": "Procesos core recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDigitalActivityCoreProcessGroupCoreProcessesResponseV2"
                },
                "examples": {
                  "core_processes_list": {
                    "summary": "Lista completa de procesos core del grupo",
                    "value": {
                      "data": [
                        {
                          "name": "Microsoft Word",
                          "process_name": "WINWORD.EXE"
                        },
                        {
                          "name": "Microsoft Excel",
                          "process_name": "EXCEL.EXE"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_path_params": {
                    "summary": "Formato de identificadores inválido",
                    "value": {
                      "error": {
                        "message": "Parámetros de ruta no válidos",
                        "code": "bad_request",
                        "details": "organization_id y core_process_group_id deben tener 24 caracteres hexadecimales."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Grupo de procesos core no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Reemplazar procesos core del grupo",
        "operationId": "replaceDigitalActivityCoreProcessGroupCoreProcesses",
        "description": "Reemplaza el conjunto completo de procesos core de un grupo dentro de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "core_process_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de procesos core.",
            "example": "64f0c2a1b2d3e4f506070811"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceDigitalActivityCoreProcessGroupCoreProcessesRequestV2"
              },
              "examples": {
                "full_replace_two_items": {
                  "summary": "Reemplazo completo con dos procesos",
                  "value": {
                    "core_processes": [
                      {
                        "name": "Excel",
                        "process_name": "excel.exe"
                      },
                      {
                        "name": "Adobe Acrobat",
                        "process_name": "acrobat.exe"
                      }
                    ]
                  }
                },
                "full_replace_empty_list": {
                  "summary": "Reemplazo completo para vaciar la lista",
                  "value": {
                    "core_processes": []
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Procesos core reemplazados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCoreProcessGroupCoreProcessesResponseV2"
                },
                "examples": {
                  "full_replace_response": {
                    "summary": "Estado final de procesos core tras el reemplazo",
                    "value": {
                      "data": [
                        {
                          "name": "Microsoft Word",
                          "process_name": "WINWORD.EXE"
                        },
                        {
                          "name": "Microsoft Excel",
                          "process_name": "EXCEL.EXE"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros o cuerpo de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_request": {
                    "summary": "Solicitud inválida",
                    "value": {
                      "error": {
                        "message": "Parámetros o cuerpo de solicitud no válidos",
                        "code": "bad_request",
                        "details": "organization_id y core_process_group_id deben tener 24 caracteres hexadecimales y cada elemento de core_processes debe incluir name y process_name."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Grupo de procesos core no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflicto de negocio para el reemplazo del recurso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "duplicate_process_name": {
                    "summary": "Proceso duplicado en la colección",
                    "value": {
                      "error": {
                        "message": "La colección incluye procesos duplicados",
                        "code": "core_process_already_exists",
                        "details": "Cada process_name debe ser único dentro de core_processes."
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/core-process-groups/{core_process_group_id}": {
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Recuperar grupo procesos core",
        "operationId": "getDigitalActivityCoreProcessGroup",
        "description": "Devuelve el detalle de un grupo de procesos core de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "core_process_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de procesos core.",
            "example": "64f0c2a1b2d3e4f506070811"
          }
        ],
        "responses": {
          "200": {
            "description": "Grupo de procesos core recuperado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDigitalActivityCoreProcessGroupResponseV2"
                },
                "examples": {
                  "core_process_group_detail": {
                    "summary": "Detalle del grupo de procesos core",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070811",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Grupo de procesos core A",
                      "description": "Grupo principal de procesos de productividad",
                      "workspace_group_id": "64f0c2a1b2d3e4f506070822"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_path_params": {
                    "summary": "Formato de identificadores inválido",
                    "value": {
                      "error": {
                        "message": "Parámetros de ruta no válidos",
                        "code": "bad_request",
                        "details": "organization_id y core_process_group_id deben tener 24 caracteres hexadecimales."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Actualizar grupo procesos core",
        "operationId": "updateDigitalActivityCoreProcessGroup",
        "description": "Actualiza completamente un grupo de procesos core en la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "core_process_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de procesos core.",
            "example": "64f0c2a1b2d3e4f506070811"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDigitalActivityCoreProcessGroupRequestV2"
              },
              "examples": {
                "full_update_with_description": {
                  "summary": "Actualización completa con descripción",
                  "value": {
                    "name": "Grupo base de productividad",
                    "description": "Grupo principal para procesos de productividad",
                    "workspace_group_id": "64f0c2a1b2d3e4f506070822"
                  }
                },
                "full_update_without_description": {
                  "summary": "Actualización completa sin descripción",
                  "value": {
                    "name": "Grupo base de productividad",
                    "description": null,
                    "workspace_group_id": "64f0c2a1b2d3e4f506070823"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Grupo de procesos core actualizado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDigitalActivityCoreProcessGroupResponseV2"
                },
                "examples": {
                  "updated": {
                    "summary": "Recurso actualizado",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070811",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Grupo base de productividad",
                      "description": "Grupo principal para procesos de productividad",
                      "workspace_group_id": "64f0c2a1b2d3e4f506070822"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Solicitud inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_body": {
                    "summary": "Cuerpo de solicitud inválido",
                    "value": {
                      "error": {
                        "message": "Cuerpo de solicitud inválido",
                        "code": "bad_request",
                        "details": "name, description y workspace_group_id son obligatorios y deben cumplir el formato esperado."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflicto de negocio para la actualización del recurso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "duplicate_name": {
                    "summary": "Nombre ya registrado",
                    "value": {
                      "error": {
                        "message": "Ya existe un grupo de procesos core con ese nombre",
                        "code": "core_process_group_name_already_exists"
                      }
                    }
                  },
                  "workspace_group_already_assigned": {
                    "summary": "Grupo de workspaces ya asignado",
                    "value": {
                      "error": {
                        "message": "El grupo de workspaces ya está asignado a otro grupo de procesos core",
                        "code": "core_process_group_workspace_group_already_assigned"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/core-process-metrics": {
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Listar métricas procesos core",
        "operationId": "listDigitalActivityCoreProcessMetrics",
        "description": "Devuelve una lista paginada de métricas de actividad digital por procesos core de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta separados por comas para cada elemento.",
            "example": "workspace_id,core_process_group_id,reporting_time_hours,month,year"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtrar por identificador de workspace",
                "value": "{\"field\":\"workspace_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070811\"}"
              },
              "complex-and": {
                "summary": "Filtrar por año y umbral de actividad",
                "value": "{\"and\":[{\"field\":\"year\",\"op\":\"eq\",\"value\":2025},{\"field\":\"core_activity_time_hours\",\"op\":\"lte\",\"value\":120}]}"
              },
              "complex-or-and": {
                "summary": "Combinar grupos de procesos con mes objetivo",
                "value": "{\"and\":[{\"or\":[{\"field\":\"core_process_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070822\"},{\"field\":\"reporting_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070823\"}]},{\"field\":\"month\",\"op\":\"eq\",\"value\":3}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre campos escalares ordenables de la respuesta.",
            "example": "reporting_time_hours:desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Métricas de actividad digital por procesos core recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDigitalActivityCoreProcessMetricsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con resultados",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "workspace_id": "64f0c2a1b2d3e4f506070811",
                          "core_process_group_id": "64f0c2a1b2d3e4f506070822",
                          "reporting_group_id": "64f0c2a1b2d3e4f506070823",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "core_activity_time_hours": 42.5,
                          "reporting_time_hours": 120.5,
                          "opened_session_time_hours": 150.75,
                          "user_active_time_hours": 98.2,
                          "month": 3,
                          "year": 2025,
                          "deleted_date": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/hybrid-work-metrics": {
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Listar métricas trabajo híbrido",
        "operationId": "listDigitalActivityHybridWorkMetrics",
        "description": "Devuelve una lista paginada de métricas híbridas de actividad digital de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "include_deleted_workspaces",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Controla la inclusión de workspaces eliminados. Si es false se excluyen; si se omite o es true se incluyen."
          },
          {
            "name": "include_virtual_workspaces",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Controla la inclusión de workspaces virtuales. Si es false se excluyen; si se omite o es true se incluyen."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta separados por comas para cada elemento.",
            "example": "user_name,total_active_time_hours,month,year,organization_id"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtrar por usuario",
                "value": "{\"field\":\"user_name\",\"op\":\"contains\",\"value\":\"ana\"}"
              },
              "complex-and": {
                "summary": "Filtrar por año y actividad total mínima",
                "value": "{\"and\":[{\"field\":\"year\",\"op\":\"eq\",\"value\":2025},{\"field\":\"total_active_time_hours\",\"op\":\"gte\",\"value\":40}]}"
              },
              "complex-or-and": {
                "summary": "Combinar organización y actividad remota",
                "value": "{\"and\":[{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439011\"},{\"field\":\"remote_active_time_hours\",\"op\":\"gte\",\"value\":10}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre campos escalares ordenables de la respuesta.",
            "example": "total_active_time_hours:desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Métricas híbridas de actividad digital recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDigitalActivityHybridWorkMetricsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con resultados",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "user_name": "ana.lopez",
                          "office_active_time_hours": 18.25,
                          "remote_active_time_hours": 22.5,
                          "ambiguous_active_time_hours": 1,
                          "total_active_time_hours": 41.75,
                          "month": 3,
                          "year": 2025,
                          "organization_id": "507f1f77bcf86cd799439011"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/user-metrics": {
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Listar métricas usuario",
        "operationId": "listDigitalActivityUserMetrics",
        "description": "Devuelve una lista paginada de métricas de actividad digital por usuario de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta separados por comas para cada elemento.",
            "example": "workspace_id,user_name,user_active_time_hours,month,year"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtrar por usuario",
                "value": "{\"field\":\"user_name\",\"op\":\"contains\",\"value\":\"ana\"}"
              },
              "complex-and": {
                "summary": "Filtrar por año y actividad máxima",
                "value": "{\"and\":[{\"field\":\"year\",\"op\":\"eq\",\"value\":2025},{\"field\":\"user_active_time_hours\",\"op\":\"lte\",\"value\":120}]}"
              },
              "complex-or-and": {
                "summary": "Combinar organización y grupo de reporting",
                "value": "{\"and\":[{\"or\":[{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439011\"},{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439012\"}]},{\"field\":\"reporting_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070822\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre campos escalares ordenables de la respuesta.",
            "example": "user_active_time_hours:desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Métricas de actividad digital por usuario recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDigitalActivityUserMetricsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con resultados",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "workspace_id": "64f0c2a1b2d3e4f506070811",
                          "user_name": "ana.lopez",
                          "reporting_group_id": "64f0c2a1b2d3e4f506070822",
                          "reporting_time_hours": 120.5,
                          "opened_session_time_hours": 150.75,
                          "user_active_time_hours": 98.2,
                          "month": 3,
                          "year": 2025,
                          "deleted_date": null,
                          "organization_id": "507f1f77bcf86cd799439011"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/digital-activity/workspace-metrics": {
      "get": {
        "tags": [
          "Actividad digital"
        ],
        "summary": "Listar métricas workspace",
        "operationId": "listDigitalActivityWorkspaceMetrics",
        "description": "Devuelve una lista paginada de métricas de actividad digital por workspace de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta separados por comas para cada elemento.",
            "example": "workspace_id,reporting_time_hours,month,year"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtrar por identificador de workspace",
                "value": "{\"field\":\"workspace_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070811\"}"
              },
              "complex-and": {
                "summary": "Filtrar por año y umbral de sesión abierta",
                "value": "{\"and\":[{\"field\":\"year\",\"op\":\"eq\",\"value\":2025},{\"field\":\"opened_session_time_hours\",\"op\":\"lte\",\"value\":150.75}]}"
              },
              "complex-or-and": {
                "summary": "Combinar grupo de reporting con actividad de usuario",
                "value": "{\"and\":[{\"or\":[{\"field\":\"reporting_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070822\"},{\"field\":\"reporting_group_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f506070823\"}]},{\"field\":\"user_active_time_hours\",\"op\":\"gte\",\"value\":80}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre campos escalares ordenables de la respuesta.",
            "example": "reporting_time_hours:desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Métricas de actividad digital por workspace recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDigitalActivityWorkspaceMetricsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con resultados",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "workspace_id": "64f0c2a1b2d3e4f506070811",
                          "reporting_group_id": "64f0c2a1b2d3e4f506070822",
                          "reporting_time_hours": 120.5,
                          "opened_session_time_hours": 150.75,
                          "user_active_time_hours": 98.2,
                          "core_activity_time_hours": 45,
                          "month": 3,
                          "year": 2025,
                          "deleted_date": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "La actividad digital no está habilitada para la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "digital_activity_not_enabled": {
                    "summary": "Actividad digital no habilitada",
                    "value": {
                      "error": {
                        "message": "Digital Activity is not enabled for organization",
                        "code": "forbidden"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Recurso inexistente",
                    "value": {
                      "error": {
                        "message": "Recurso no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de solicitudes excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "too_many_requests": {
                    "summary": "Demasiadas solicitudes",
                    "value": {
                      "error": {
                        "message": "Demasiadas solicitudes",
                        "code": "too_many_requests"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/installed-apps/{installed_app_id}": {
      "get": {
        "tags": [
          "Aplicaciones instaladas"
        ],
        "summary": "Recuperar una aplicación instalada",
        "operationId": "get_installed_app_by_id",
        "description": "Devuelve los detalles de la aplicación instalada solicitada dentro del alcance de una organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "installed_app_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la aplicación instalada.",
            "example": "64f0c2a1b2d3e4f5060709aa"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles de la aplicación instalada recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInstalledAppByIdResponseV2"
                },
                "examples": {
                  "installed_app_details": {
                    "summary": "Respuesta de detalle de la aplicación instalada",
                    "value": {
                      "id": "64f0c2a1b2d3e4f5060709aa",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "Google Chrome",
                      "publisher": "Google LLC",
                      "operating_system": "windows",
                      "notes": "Administrada mediante catálogo de software",
                      "discovered_at": "2026-02-15T09:30:00.000Z",
                      "reported_at": "2026-04-01T07:45:00.000Z",
                      "installations": 4
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_installed_app_id": {
                    "summary": "Formato de identificador de aplicación instalada no válido",
                    "value": {
                      "error": {
                        "message": "Formato de installed_app_id no válido",
                        "code": "bad_request",
                        "details": "installed_app_id debe ser una cadena hexadecimal en minúsculas de 24 caracteres"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o organización no accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Aplicación instalada no encontrada dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "installed_app_not_found": {
                    "summary": "No se encontró la aplicación instalada solicitada",
                    "value": {
                      "error": {
                        "message": "Aplicación instalada no encontrada",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/installed-apps/{installed_app_id}/versions": {
      "get": {
        "tags": [
          "Aplicaciones instaladas"
        ],
        "summary": "Listar versiones observadas para una aplicación instalada",
        "description": "Devuelve una lista paginada de versiones observadas para la aplicación instalada dentro del alcance de la organización.",
        "operationId": "get_installed_app_versions",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "installed_app_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la aplicación instalada.",
            "example": "64f0c2a1b2d3e4f5060708c1"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de los elementos de respuesta, separados por comas, que se deben incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos filtrables de la respuesta.",
            "examples": {
              "simple": {
                "summary": "Filtrar por versión exacta",
                "value": "{\"field\":\"version\",\"op\":\"eq\",\"value\":\"117.0.5938.149\"}"
              },
              "complex-and": {
                "summary": "Filtrar por una versión exacta dentro de una expresión and",
                "value": "{\"and\":[{\"field\":\"version\",\"op\":\"eq\",\"value\":\"117.0.5938.149\"},{\"field\":\"version\",\"op\":\"eq\",\"value\":\"117.0.5938.149\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar alternativas de versión en lógica anidada",
                "value": "{\"and\":[{\"or\":[{\"field\":\"version\",\"op\":\"eq\",\"value\":\"117.0.5938.149\"},{\"field\":\"version\",\"op\":\"eq\",\"value\":\"118.0.5993.70\"}]},{\"field\":\"version\",\"op\":\"eq\",\"value\":\"118.0.5993.70\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(version|discovered_at|reported_at):(asc|desc)$"
            },
            "description": "Expresión de ordenación en el formato <field>:asc|desc."
          }
        ],
        "responses": {
          "200": {
            "description": "Versiones de aplicaciones instaladas recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInstalledAppVersionsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con filas de versiones",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "version": "118.0.5993.90",
                          "reported_at": "2026-04-05T10:12:00Z",
                          "discovered_at": "2026-02-01T08:30:00Z"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron versiones",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser un JSON válido"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Error de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "El recurso solicitado no se encontró dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "installed_app_not_found": {
                    "summary": "No se encontró la aplicación instalada",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/installed-apps/{installed_app_id}/workspaces": {
      "get": {
        "tags": [
          "Aplicaciones instaladas"
        ],
        "summary": "Listar workspaces para una app instalada",
        "description": "Devuelve una lista paginada de observaciones a nivel de Workspace para la app instalada seleccionada en el alcance de la organización.",
        "operationId": "get_installed_app_workspaces",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "installed_app_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de app instalada.",
            "example": "64f0c2a1b2d3e4f5060709aa"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por workspace_id",
                "value": "{\"field\":\"workspace_id\",\"op\":\"eq\",\"value\":\"64f0c2a1b2d3e4f5060708f1\"}"
              },
              "complex-and": {
                "summary": "Filtrar por install_location y version",
                "value": "{\"and\":[{\"field\":\"install_location\",\"op\":\"contains\",\"value\":\"Program Files\"},{\"field\":\"version\",\"op\":\"contains\",\"value\":\"124\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar alternativas de installed_at con una condición de organización",
                "value": "{\"and\":[{\"or\":[{\"field\":\"installed_at\",\"op\":\"eq\",\"value\":\"2025-12-01T08:00:00.000Z\"},{\"field\":\"installed_at\",\"op\":\"eq\",\"value\":\"2025-11-15T09:30:00.000Z\"}]},{\"field\":\"organization_id\",\"op\":\"eq\",\"value\":\"507f1f77bcf86cd799439011\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(workspace_id|organization_id|version|reported_at|install_location|installed_at):(asc|desc)$"
            },
            "description": "Expresión de ordenamiento con el formato <field>:asc|desc."
          }
        ],
        "responses": {
          "200": {
            "description": "Observaciones de Workspace de app instalada obtenidas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInstalledAppWorkspacesResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Observaciones de Workspace paginadas",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "workspace_id": "64f0c2a1b2d3e4f5060708f1",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "version": "124.0.2478.97",
                          "reported_at": "2026-01-15T10:20:30.000Z",
                          "install_location": "C:\\Program Files\\ExampleApp",
                          "installed_at": "2025-12-01T08:00:00.000Z"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron observaciones de Workspace",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filters inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filters inválido",
                        "code": "bad_request",
                        "details": "filters debe ser una expresión de filtro JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No se encontró la app instalada dentro del alcance de organización autorizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "installed_app_not_found": {
                    "summary": "No se encontró la app instalada solicitada",
                    "value": {
                      "error": {
                        "message": "No se encontró la app instalada",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/installed-apps": {
      "get": {
        "tags": [
          "Aplicaciones instaladas"
        ],
        "summary": "Listar aplicaciones instaladas",
        "description": "Devuelve una lista paginada de aplicaciones instaladas disponibles en el alcance de la organización.",
        "operationId": "get_installed_apps",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos del elemento de respuesta separados por comas que se incluirán."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre los campos de filtro admitidos.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de aplicación",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"chrome\"}"
              },
              "complex-and": {
                "summary": "Filtrar por sistema operativo y presencia de instalación",
                "value": "{\"and\":[{\"field\":\"operating_system\",\"op\":\"eq\",\"value\":\"Windows\"},{\"field\":\"has_installations\",\"op\":\"eq\",\"value\":true}]}"
              },
              "complex-or-and": {
                "summary": "Combinar alternativas de publicador con presencia de instalación",
                "value": "{\"and\":[{\"or\":[{\"field\":\"publisher\",\"op\":\"contains\",\"value\":\"microsoft\"},{\"field\":\"publisher\",\"op\":\"contains\",\"value\":\"google\"}]},{\"field\":\"has_installations\",\"op\":\"eq\",\"value\":true}]}"
              }
            }
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "description": "Expresión de agregación JSON con `group_by` y `aggregates`. No se puede combinar con `fields`.",
            "examples": {
              "group_by_operating_system": {
                "summary": "Agrupar por sistema operativo y contar",
                "value": "{\"group_by\":[\"operating_system\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group_by_publisher_avg_installations": {
                "summary": "Agrupar por publicador y calcular promedio de instalaciones",
                "value": "{\"group_by\":[\"publisher\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"},{\"field\":\"installations\",\"function\":\"avg\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`)."
          }
        ],
        "responses": {
          "200": {
            "description": "Aplicaciones instaladas recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInstalledAppsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con aplicaciones instaladas",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f5060708c1",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "name": "Microsoft Edge",
                          "discovered_at": "2026-03-10T09:00:00Z",
                          "reported_at": "2026-03-15T09:45:11Z",
                          "operating_system": "windows",
                          "publisher": "Microsoft Corporation",
                          "installations": 4
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron aplicaciones instaladas",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser un JSON válido"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "El recurso solicitado no se encontró dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "resource_not_found": {
                    "summary": "No se encontró el recurso solicitado",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/me": {
      "get": {
        "tags": [
          "Autenticación"
        ],
        "summary": "Validar token y obtener contexto actual",
        "description": "Valida el token y devuelve el contexto autenticado.",
        "operationId": "get_me",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Contexto autenticado recuperado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMeResponseV2"
                },
                "examples": {
                  "authenticated_context": {
                    "summary": "Contexto de organización y token",
                    "value": {
                      "organization_id": "507f1f77bcf86cd799439011",
                      "token_id": "507f1f77bcf86cd799439022",
                      "token_name": "api-key-admin",
                      "token_created_at": "2026-03-01T10:15:00Z",
                      "token_expires_at": "2027-03-01T10:15:00Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Token inválido, expirado o ausente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_token": {
                    "summary": "Error de autenticación",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/microservices/{microservice_id}": {
      "get": {
        "tags": [
          "Microservicios"
        ],
        "summary": "Obtener microservicio por identificador",
        "operationId": "get_microservice_by_id",
        "description": "Devuelve un microservicio visible para la organización objetivo (designer o marketplace), con estado de habilitacion y configuracion habilitada cuando exista.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización sobre la que se consulta el microservicio.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "microservice_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del microservicio a recuperar.",
            "example": "65f0d9f2b3c4d5e6f7080911"
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "default": "es-ES",
              "maxLength": 10
            },
            "description": "Idioma para resolver campos multilenguaje a un unico valor por campo.",
            "example": "es-ES"
          }
        ],
        "responses": {
          "200": {
            "description": "Microservicio recuperado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMicroserviceByIdResponseV2"
                },
                "examples": {
                  "microservicio_habilitado": {
                    "summary": "Microservicio encontrado con configuracion habilitada",
                    "value": {
                      "data": {
                        "id": "65f0d9f2b3c4d5e6f7080911",
                        "organization_id": "507f1f77bcf86cd799439011",
                        "name": "Antivirus Scan",
                        "description": "Escaneo programado de antivirus",
                        "category": "security",
                        "created_at": "2026-05-15T10:00:00Z",
                        "archived_at": null,
                        "type": "standard",
                        "context": "organization",
                        "is_ai_enhanced": false,
                        "enabled": true,
                        "enabled_configuration": {
                          "enabled_at": "2026-05-15T10:30:00Z",
                          "efficiency": 95,
                          "workspace_group_execution": "l1",
                          "individual_execution": "l3",
                          "end_user_execution_workspace_group_ids": [
                            "65f0d9f2b3c4d5e6f7080931",
                            "65f0d9f2b3c4d5e6f7080932"
                          ]
                        }
                      }
                    }
                  },
                  "microservicio_no_habilitado": {
                    "summary": "Microservicio encontrado sin configuracion habilitada",
                    "value": {
                      "data": {
                        "id": "65f0d9f2b3c4d5e6f7080912",
                        "organization_id": "507f1f77bcf86cd799439011",
                        "name": "Patch Baseline",
                        "description": "Control de parches pendientes",
                        "category": "maintenance",
                        "created_at": "2026-05-16T12:00:00Z",
                        "archived_at": null,
                        "type": "standard",
                        "context": "organization",
                        "is_ai_enhanced": true,
                        "enabled": false,
                        "enabled_configuration": null
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "id_invalido": {
                    "summary": "Identificador de microservicio inválido",
                    "value": {
                      "error": {
                        "message": "Parámetro microservice_id inválido",
                        "code": "bad_request"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Acceso a organización no autorizado",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Microservicio no encontrado en el alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "microservice_not_found": {
                    "summary": "Microservicio no encontrado",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/microservices": {
      "get": {
        "tags": [
          "Microservicios"
        ],
        "summary": "Listar microservicios de una organización",
        "operationId": "get_microservices",
        "description": "Devuelve un listado paginado de microservicios visibles para la organización objetivo (propia o delegada según permisos del llamador), enriquecido con el estado de habilitación y su configuración asociada cuando exista. La resolución de habilitación se realiza estrictamente con el organization_id enviado en el path.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización objetivo sobre la que se consulta el catálogo; la habilitación se verifica contra este mismo identificador.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "Accept-Language",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "default": "es-ES",
              "maxLength": 10
            },
            "description": "Idioma para resolver los campos multilenguaje de la respuesta a un único valor por campo.",
            "example": "es-ES"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Cantidad de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta a incluir, separados por comas."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión JSON de filtros sobre campos filtrables del recurso.",
            "examples": {
              "simple": {
                "summary": "Filtro simple por nombre",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"backup\"}"
              },
              "complex-and": {
                "summary": "Filtro compuesto con AND",
                "value": "{\"and\":[{\"field\":\"type\",\"op\":\"eq\",\"value\":\"standard\"},{\"field\":\"context\",\"op\":\"eq\",\"value\":\"organization\"}]}"
              },
              "complex-or-and": {
                "summary": "Filtro compuesto con OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"category\",\"op\":\"eq\",\"value\":\"security\"},{\"field\":\"category\",\"op\":\"eq\",\"value\":\"automation\"}]},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"agent\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Microservicios recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMicroservicesResponseV2"
                },
                "examples": {
                  "resultado_con_datos": {
                    "summary": "Listado con resultados",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "id": "65f0d9f2b3c4d5e6f7080911",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "name": "Antivirus Scan",
                          "description": "Escaneo programado de antivirus",
                          "category": "security",
                          "created_at": "2026-05-15T10:00:00Z",
                          "archived_at": null,
                          "type": "standard",
                          "context": "organization",
                          "is_ai_enhanced": false,
                          "enabled": true,
                          "enabled_configuration": {
                            "enabled_at": "2026-05-15T10:30:00Z",
                            "efficiency": 95,
                            "workspace_group_execution": "l1",
                            "individual_execution": "l3",
                            "end_user_execution_workspace_group_ids": [
                              "65f0d9f2b3c4d5e6f7080931",
                              "65f0d9f2b3c4d5e6f7080932"
                            ]
                          }
                        },
                        {
                          "id": "65f0d9f2b3c4d5e6f7080912",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "name": "Patch Baseline",
                          "description": "Control de parches pendientes",
                          "category": "maintenance",
                          "created_at": "2026-05-16T12:00:00Z",
                          "archived_at": null,
                          "type": "standard",
                          "context": "organization",
                          "is_ai_enhanced": true,
                          "enabled": false,
                          "enabled_configuration": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "filters_invalido": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros inválido",
                        "code": "bad_request",
                        "details": "El parámetro filters debe ser una cadena JSON válida."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Acceso a organización no autorizado",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No se encontró el recurso solicitado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "resource_not_found": {
                    "summary": "Recurso no encontrado",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/operations/{operation_id}": {
      "get": {
        "tags": [
          "Operaciones"
        ],
        "summary": "Obtener detalle de una operación",
        "operationId": "get_operation_by_id",
        "description": "Devuelve el detalle público de una operación existente en la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "operation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la operación.",
            "example": "64f0c2a1b2d3e4f506070811"
          }
        ],
        "responses": {
          "200": {
            "description": "Operación recuperada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOperationByIdResponseV2"
                },
                "examples": {
                  "operation_detail": {
                    "summary": "Detalle de operación",
                    "value": {
                      "id": "64f0c2a1b2d3e4f506070811",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "name": "remote_assistance",
                      "description": "Operación de asistencia remota",
                      "status": "finished",
                      "created_at": "2026-03-10T09:11:45Z",
                      "started_at": "2026-03-10T09:12:00Z",
                      "ended_at": "2026-03-10T09:15:17Z",
                      "microservice_id": "64f0c2a1b2d3e4f506070833",
                      "flow_id": "64f0c2a1b2d3e4f506070844",
                      "remote_support": {
                        "start_date": "2026-03-10T09:12:00Z",
                        "end_date": "2026-03-10T09:15:17Z",
                        "type": "unattended"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de ruta no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_identifier": {
                    "summary": "Identificador con formato inválido",
                    "value": {
                      "error": {
                        "message": "El identificador de operación no es válido",
                        "code": "bad_request",
                        "details": "operation_id debe tener 24 caracteres hexadecimales en minúscula."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Operación no encontrada en la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Operación inexistente",
                    "value": {
                      "error": {
                        "message": "Operación no encontrada",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/operations/{operation_id}/results": {
      "get": {
        "tags": [
          "Operaciones"
        ],
        "summary": "Obtener resultados de una operación",
        "operationId": "get_operation_results",
        "description": "Devuelve resultados paginados de ejecución para una operación dentro de la organización autorizada.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "operation_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la operación.",
            "example": "64f0c2a1b2d3e4f506070811"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "description": "Página a consultar."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Lista separada por comas con campos de respuesta a incluir.",
            "example": "id,workspace_id,status,name,start_date,end_date"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`).",
            "example": "start_date:desc"
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "description": "Expresión JSON para agregación. Estructura: {\"group_by\":[\"field\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}. No se puede combinar con `fields`.",
            "examples": {
              "group-by-status-count": {
                "summary": "Agrupar por estado y contar",
                "value": "{\"group_by\":[\"status\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group-by-status-avg-script-duration": {
                "summary": "Agrupar por estado y calcular promedio",
                "value": "{\"group_by\":[\"status\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"},{\"field\":\"script_duration\",\"function\":\"avg\"}]}"
              }
            }
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión JSON de filtros sobre campos permitidos.",
            "examples": {
              "simple": {
                "summary": "Filtro simple por nombre de máquina",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"srv\"}"
              },
              "complex-and": {
                "summary": "Filtro compuesto con condiciones AND",
                "value": "{\"and\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"completed\"},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"win\"}]}"
              },
              "complex-or-and": {
                "summary": "Filtro compuesto con OR anidado y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"error\"},{\"field\":\"status\",\"op\":\"eq\",\"value\":\"timeout\"}]},{\"field\":\"name\",\"op\":\"contains\",\"value\":\"desk\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Resultados recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOperationResultsResponseV2"
                },
                "examples": {
                  "results_page": {
                    "summary": "Página de resultados de la operación",
                    "value": {
                      "data": [
                        {
                          "id": "66b5f6d2f8d5a4d8a7f1c101",
                          "operation_id": "64f0c2a1b2d3e4f506070811",
                          "workspace_id": "66b5f6d2f8d5a4d8a7f1c301",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "status": "completed",
                          "name": "ws-001",
                          "start_date": "2026-05-10T10:15:30Z",
                          "end_date": "2026-05-10T10:16:41Z",
                          "script_detail": "Script ejecutado correctamente",
                          "script_duration": 71,
                          "script_response": [
                            {
                              "timestamp": "2026-05-10T10:15:35.100Z",
                              "line": "Linea inicial\nDetalle multilinea"
                            },
                            {
                              "timestamp": "2026-05-10T10:15:37.100Z",
                              "line": "Segundo bloque OUT"
                            }
                          ]
                        }
                      ],
                      "has_next": true
                    }
                  },
                  "aggregated_by_status": {
                    "summary": "Resultado agregado por estado",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "status": "completed",
                          "count": 120,
                          "avg_script_duration": 17.4
                        },
                        {
                          "status": "error",
                          "count": 45,
                          "avg_script_duration": 3.1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de consulta inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_parameters": {
                    "summary": "Error de validación de parámetros",
                    "value": {
                      "error": {
                        "message": "Parámetros de consulta inválidos",
                        "code": "BAD_REQUEST"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Fallo de autorización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Operación no encontrada en la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Operación inexistente",
                    "value": {
                      "error": {
                        "message": "Operación no encontrada",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Error inesperado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/entity-limits": {
      "get": {
        "tags": [
          "Organización"
        ],
        "summary": "Ver límites de entidades",
        "operationId": "get_organization_entity_limits",
        "description": "Devuelve los límites de creación por tipo de entidad para la organización solicitada. Estos valores indican cuántos recursos de cada tipo puede crear la organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización objetivo.",
            "example": "507f1f77bcf86cd799439011"
          }
        ],
        "responses": {
          "200": {
            "description": "Límites de entidades recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOrganizationEntityLimitsResponseV2"
                },
                "examples": {
                  "ok_response": {
                    "summary": "Límites efectivos por tipo de entidad",
                    "value": {
                      "organization_id": "507f1f77bcf86cd799439011",
                      "limits": {
                        "tenants": 100,
                        "reporting_groups": 500,
                        "workspace_groups": 1000,
                        "workspace_group_schedules_per_group": 10,
                        "flows": 100,
                        "microservices": 500,
                        "reports": 500,
                        "webapps": 100,
                        "webhooks": 100,
                        "licenses": 500,
                        "alert_settings": 100,
                        "roles": 100,
                        "users": 1500,
                        "patching_policies": 50,
                        "patching_targets": 50,
                        "policies": 50,
                        "microservice_categories": 100,
                        "domains": 5,
                        "sso_integrations": 5,
                        "product_configs": 15,
                        "modules": 50,
                        "api_keys": 15
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o sin acceso a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Organización no encontrada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/patch-policy-targets": {
      "get": {
        "tags": [
          "Objetivos de política de parches"
        ],
        "summary": "Listar objetivos de política de parches",
        "operationId": "listPatchPolicyTargets",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Elementos por página (predeterminado: 100, máx.: 100)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo de orden opcional (:asc o :desc). Use los nombres de las propiedades de la respuesta. Campos válidos: id, name, created_at, timezone, should_restart, wake_on_lan, force_patching_configuration, is_in_maintenance, patch_policy_target_type. Ejemplo: \"name:asc\" o \"created_at:desc\""
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista de campos separada por comas para incluir en cada elemento de objetivo de política de parches. Campos seleccionables: id, name, created_by, created_at, timezone, should_restart, wake_on_lan, force_patching_configuration, is_in_maintenance, weeks, schedule, patch_policy_target_type, patch_policy_id. El campo id siempre se incluye.",
            "example": "name,timezone,patch_policy_id"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Filtre objetivos de política de parches por uno o más criterios. Proporcione un objeto JSON con condiciones de filtro. Puede filtrar por cualquier campo devuelto en la respuesta. Use operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combine múltiples condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre del objetivo",
                "description": "Devuelve objetivos de política de parches cuyo nombre contiene el texto proporcionado.",
                "value": "{\"field\": \"name\", \"op\": \"contains\", \"value\": \"Base\"}"
              },
              "complex-and": {
                "summary": "Filtrar por tipo de objetivo y comportamiento de reinicio",
                "description": "Devuelve objetivos de Windows que requieren reinicio después del parcheo.",
                "value": "{\"and\": [{\"field\": \"patch_policy_target_type\", \"op\": \"eq\", \"value\": \"windows\"}, {\"field\": \"should_restart\", \"op\": \"eq\", \"value\": true}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con múltiples zonas horarias y excluye objetivos en mantenimiento.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"timezone\", \"op\": \"eq\", \"value\": \"UTC\"}, {\"field\": \"timezone\", \"op\": \"eq\", \"value\": \"America/New_York\"}]}, {\"field\": \"is_in_maintenance\", \"op\": \"eq\", \"value\": false}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de objetivos de política de parches recuperada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PatchPolicyTargetV2ListResponseV2"
                },
                "examples": {
                  "single-target": {
                    "summary": "Objetivo de política de parches único",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "id": "66ab6cf4d4d2e709bafd404c",
                          "name": "Base",
                          "created_by": "6439606652fc0c0051f1787b",
                          "created_at": "2024-08-01T11:09:40.719Z",
                          "timezone": "UTC",
                          "should_restart": true,
                          "wake_on_lan": true,
                          "force_patching_configuration": false,
                          "is_in_maintenance": false,
                          "weeks": [
                            1,
                            2
                          ],
                          "schedule": {
                            "MONDAY": {},
                            "TUESDAY": {},
                            "WEDNESDAY": {},
                            "THURSDAY": {
                              "9": [
                                15,
                                30,
                                45
                              ],
                              "10": [
                                0,
                                15,
                                30,
                                45
                              ],
                              "11": [
                                0,
                                15,
                                30,
                                45
                              ],
                              "12": [
                                0,
                                15,
                                30,
                                45
                              ],
                              "13": [
                                0,
                                15,
                                30,
                                45
                              ],
                              "14": [
                                0,
                                15,
                                30,
                                45
                              ],
                              "15": [
                                0
                              ]
                            },
                            "FRIDAY": {},
                            "SATURDAY": {},
                            "SUNDAY": {}
                          },
                          "patch_policy_target_type": "windows",
                          "patch_policy_id": "507f1f77bcf86cd799439011"
                        }
                      ]
                    }
                  },
                  "multiple-targets": {
                    "summary": "Múltiples objetivos de política de parches",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "66ab6cf4d4d2e709bafd404c",
                          "name": "Base",
                          "created_by": "6439606652fc0c0051f1787b",
                          "created_at": "2024-08-01T11:09:40.719Z",
                          "timezone": "UTC",
                          "should_restart": true,
                          "wake_on_lan": true,
                          "force_patching_configuration": false,
                          "is_in_maintenance": false,
                          "weeks": [
                            1,
                            2
                          ],
                          "schedule": {
                            "MONDAY": {},
                            "TUESDAY": {},
                            "WEDNESDAY": {},
                            "THURSDAY": {
                              "9": [
                                15,
                                30,
                                45
                              ],
                              "10": [
                                0,
                                15,
                                30,
                                45
                              ]
                            },
                            "FRIDAY": {},
                            "SATURDAY": {},
                            "SUNDAY": {}
                          },
                          "patch_policy_target_type": "windows",
                          "patch_policy_id": "507f1f77bcf86cd799439011"
                        },
                        {
                          "id": "66ab6cf4d4d2e709bafd404d",
                          "name": "Linux Base",
                          "created_by": "6439606652fc0c0051f1787b",
                          "created_at": "2024-08-02T10:00:00.000Z",
                          "timezone": "America/New_York",
                          "should_restart": false,
                          "wake_on_lan": false,
                          "force_patching_configuration": true,
                          "is_in_maintenance": false,
                          "weeks": [
                            1
                          ],
                          "schedule": {
                            "MONDAY": {
                              "8": [
                                0,
                                30
                              ]
                            },
                            "TUESDAY": {},
                            "WEDNESDAY": {},
                            "THURSDAY": {},
                            "FRIDAY": {},
                            "SATURDAY": {},
                            "SUNDAY": {}
                          },
                          "patch_policy_target_type": "linux",
                          "patch_policy_id": "507f1f77bcf86cd799439012"
                        }
                      ]
                    }
                  },
                  "empty-list": {
                    "summary": "Lista vacía cuando no existen objetivos",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  },
                  "no-patch-policy": {
                    "summary": "Objetivo sin política de parches asignada",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "id": "66ab6cf4d4d2e709bafd404c",
                          "name": "Base",
                          "created_by": "6439606652fc0c0051f1787b",
                          "created_at": "2024-08-01T11:09:40.719Z",
                          "timezone": "UTC",
                          "should_restart": true,
                          "wake_on_lan": true,
                          "force_patching_configuration": false,
                          "is_in_maintenance": false,
                          "weeks": [
                            1,
                            2
                          ],
                          "schedule": {
                            "MONDAY": {},
                            "TUESDAY": {},
                            "WEDNESDAY": {},
                            "THURSDAY": {},
                            "FRIDAY": {},
                            "SATURDAY": {},
                            "SUNDAY": {}
                          },
                          "patch_policy_target_type": null,
                          "patch_policy_id": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Paginación, ordenación o filtros no válidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: el usuario no tiene acceso a la organización, o la organización no existe"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de objetivos de política de parches para una organización. Admite paginación, ordenación y filtrado mediante una cadena de filtros JSON. Los objetivos de política de parches definen cuándo y cómo se aplican los parches a los Workspaces."
      }
    },
    "/v2/organizations/{organization_id}/product-configs": {
      "get": {
        "tags": [
          "Configuraciones de producto"
        ],
        "summary": "Listar configuraciones de producto",
        "operationId": "listProductConfigs",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Elementos por página (predeterminado: 100, máximo: 100)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo de orden opcional (:asc o :desc). Usa los nombres de propiedades de la respuesta. Campos válidos: id, environment, created_at, active, product_id, region. Ejemplo: \"product_id:asc\" o \"created_at:desc\""
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos para incluir en cada elemento de configuración de producto. Campos seleccionables: id, environment, created_at, active, product_id, region. El campo id siempre se incluye.",
            "example": "environment,active,region"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Filtra configuraciones de producto por uno o más criterios. Proporciona un objeto JSON con condiciones de filtro. Puedes filtrar por cualquier campo devuelto en la respuesta. Usa operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combina múltiples condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por entorno",
                "description": "Devuelve configuraciones de producto para un único entorno.",
                "value": "{\"field\": \"environment\", \"op\": \"eq\", \"value\": \"PRODUCTION\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y región",
                "description": "Devuelve configuraciones de producto activas en una región específica.",
                "value": "{\"and\": [{\"field\": \"active\", \"op\": \"eq\", \"value\": true}, {\"field\": \"region\", \"op\": \"eq\", \"value\": \"us-east\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con múltiples entornos y restringe por producto.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"environment\", \"op\": \"eq\", \"value\": \"PRODUCTION\"}, {\"field\": \"environment\", \"op\": \"eq\", \"value\": \"STAGING\"}]}, {\"field\": \"product_id\", \"op\": \"eq\", \"value\": \"507f1f77bcf86cd799439001\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de configuraciones de producto recuperada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductConfigV2ListResponseV2"
                },
                "examples": {
                  "single-config": {
                    "summary": "Configuración de producto única",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "id": "507f1f77bcf86cd799439011",
                          "environment": "PRODUCTION",
                          "created_at": "2024-01-15T10:30:00.000Z",
                          "active": true,
                          "product_id": "507f1f77bcf86cd799439001",
                          "region": "us-east"
                        }
                      ]
                    }
                  },
                  "multiple-configs": {
                    "summary": "Múltiples configuraciones de producto",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "507f1f77bcf86cd799439011",
                          "environment": "PRODUCTION",
                          "created_at": "2024-01-15T10:30:00.000Z",
                          "active": true,
                          "product_id": "507f1f77bcf86cd799439001",
                          "region": "us-east"
                        },
                        {
                          "id": "507f1f77bcf86cd799439012",
                          "environment": "STAGING",
                          "created_at": "2024-01-20T14:45:00.000Z",
                          "active": false,
                          "product_id": "507f1f77bcf86cd799439001",
                          "region": null
                        }
                      ]
                    }
                  },
                  "empty-list": {
                    "summary": "Lista vacía cuando no existen configuraciones",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Paginación, ordenamiento o filtros inválidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: el usuario no tiene acceso a la organización o la organización no existe"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de configuraciones de producto para la organización especificada. Devuelve un arreglo de objetos de configuración de producto que contiene detalles de configuración, incluidos entorno, estado, información del producto y región. Admite paginación, ordenamiento y filtrado mediante una cadena de filtro JSON."
      }
    },
    "/v2/organizations/{organization_id}/reporting-groups/{reporting_group_id}/agent-versions/catalog": {
      "get": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Obtener catálogo de versiones de agente",
        "operationId": "get_reporting_group_agent_versions_catalog",
        "description": "Devuelve el catálogo de versiones permitidas de agente para el grupo de reporte seleccionado.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización objetivo.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de reporte objetivo.",
            "example": "507f1f77bcf86cd799439022"
          }
        ],
        "responses": {
          "200": {
            "description": "Catálogo de versiones recuperado correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetReportingGroupAgentVersionsCatalogResponseV2"
                },
                "examples": {
                  "ok_response": {
                    "summary": "Catálogo por plataformas",
                    "value": {
                      "windows_cp": [
                        "2.30.4"
                      ],
                      "windows": [
                        "2.31.1",
                        "2.30.4"
                      ],
                      "macos": [
                        "1.10.0"
                      ],
                      "linux": [
                        "1.12.0"
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Parámetros inválidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado."
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de reporte no encontrado."
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "El grupo no permite autogestión de versiones de agente."
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/reporting-groups/{reporting_group_id}/agent-versions": {
      "get": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Obtener configuración de versiones de agente",
        "operationId": "get_reporting_group_agent_versions",
        "description": "Devuelve la configuración efectiva de versiones de agente para el grupo de reporte solicitado. Este endpoint solo está disponible cuando el grupo de reporte tiene asignada una configuración de producto con autogestión de versiones habilitada; en caso contrario devuelve 409. La habilitación de esta capacidad es una configuración de plataforma gestionada fuera del cliente API. El listado de reporting groups informa esta capacidad mediante el campo \"can_manage_agent_versions\". Para lectura con API key se requiere el permiso \"Equipo de L3 de ingeniería\" o el rol \"Administrador de organización\".",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización objetivo.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de reporte objetivo.",
            "example": "507f1f77bcf86cd799439022"
          }
        ],
        "responses": {
          "200": {
            "description": "Versiones de agente recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetReportingGroupAgentVersionsResponseV2"
                },
                "examples": {
                  "ok_response": {
                    "summary": "Versiones efectivas del grupo",
                    "value": {
                      "agent_auto_update": true,
                      "versions": {
                        "windows_cp": {
                          "early": "latest",
                          "production": "latest"
                        },
                        "windows": {
                          "early": "2.20.0",
                          "production": "2.19.3"
                        },
                        "macos": {
                          "early": "latest",
                          "production": "1.9.2"
                        },
                        "linux": {
                          "early": "latest",
                          "production": "1.11.0"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Parámetros de ruta inválidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado."
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de reporte no encontrado."
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "El grupo no permite autogestión de versiones de agente."
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      },
      "put": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Actualizar configuración de versiones de agente",
        "operationId": "update_reporting_group_agent_versions",
        "description": "Actualiza por reemplazo completo la configuración de versiones de agente para el grupo de reporte solicitado. Este endpoint solo está disponible cuando el grupo de reporte tiene asignada una configuración de producto con autogestión de versiones habilitada; en caso contrario devuelve 409. La habilitación de esta capacidad es una configuración de plataforma gestionada fuera del cliente API. El listado de reporting groups informa esta capacidad mediante el campo \"can_manage_agent_versions\". Para actualización con API key se requiere el rol \"Administrador de organización\".",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización objetivo.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de reporte objetivo.",
            "example": "507f1f77bcf86cd799439022"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReportingGroupAgentVersionsRequestV2"
              },
              "examples": {
                "full_replacement": {
                  "summary": "Actualización completa",
                  "value": {
                    "agent_auto_update": false,
                    "versions": {
                      "windows_cp": {
                        "early": "latest",
                        "production": "latest"
                      },
                      "windows": {
                        "early": "2.31.0",
                        "production": "2.30.4"
                      },
                      "macos": {
                        "early": "latest",
                        "production": "1.10.0"
                      },
                      "linux": {
                        "early": "latest",
                        "production": "1.12.0"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Versiones de agente actualizadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetReportingGroupAgentVersionsResponseV2"
                },
                "examples": {
                  "ok_response": {
                    "summary": "Versiones actualizadas del grupo",
                    "value": {
                      "agent_auto_update": false,
                      "versions": {
                        "windows_cp": {
                          "early": "latest",
                          "production": "latest"
                        },
                        "windows": {
                          "early": "2.31.0",
                          "production": "2.30.4"
                        },
                        "macos": {
                          "early": "latest",
                          "production": "1.10.0"
                        },
                        "linux": {
                          "early": "latest",
                          "production": "1.12.0"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Parámetros de ruta o cuerpo inválidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado."
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de reporte no encontrado."
          },
          "409": {
            "$ref": "#/components/responses/Conflict",
            "description": "El grupo no permite autogestión de versiones de agente."
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/reporting-groups/{reporting_group_id}/monthly-report/{period}": {
      "get": {
        "tags": [
          "Grupos de reporte"
        ],
        "summary": "Obtener reporte mensual de un grupo de reporte",
        "description": "Devuelve el reporte mensual de soporte para el grupo de reporte y periodo solicitado, junto con metricas actuales del grupo.",
        "operationId": "get_reportinggroup_monthly_report",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "reporting_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del grupo de reporte.",
            "example": "507f1f77bcf86cd799439020"
          },
          {
            "name": "period",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}(0[1-9]|1[0-2])$",
              "minLength": 6,
              "maxLength": 6
            },
            "description": "Periodo mensual solicitado en formato yyyymm.",
            "example": "202606"
          }
        ],
        "responses": {
          "200": {
            "description": "Reporte mensual obtenido correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetReportingGroupMonthlyReportResponseV2"
                },
                "examples": {
                  "ok": {
                    "summary": "Respuesta correcta",
                    "value": {
                      "reporting_group_id": "507f1f77bcf86cd799439020",
                      "organization_id": "507f1f77bcf86cd799439011",
                      "period_year": 2026,
                      "period_month": 6,
                      "applied_patches": 58,
                      "critical_patches": 6,
                      "security_patches": 17,
                      "other_patches": 35,
                      "total_used_apps": 42,
                      "top_apps": [
                        {
                          "app_name": "Google Chrome",
                          "usage_days": 21
                        },
                        {
                          "app_name": "Microsoft Teams",
                          "usage_days": 19
                        }
                      ],
                      "automatic_remediations": {
                        "microservices": 4,
                        "flows": 11
                      },
                      "current_reporting_group_name": "Madrid - Finance",
                      "current_total_workspaces": 132,
                      "current_total_workspace_users": 247,
                      "current_workspace_antivirus_statistics": {
                        "workspaces_without_antivirus": 9,
                        "workspaces_with_antivirus": {
                          "total": 123,
                          "by_status": {
                            "unknown": 5,
                            "not_installed": 7,
                            "installed_stopped": 3,
                            "installed_working": 108
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Solicitud inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "period_invalid": {
                    "summary": "Periodo inválido",
                    "value": {
                      "error": {
                        "message": "El parámetro period debe tener formato yyyymm.",
                        "code": "invalid_request",
                        "details": "Use seis digitos con mes válido entre 01 y 12."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado para esta organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "No autorizado",
                    "value": {
                      "error": {
                        "message": "No autorizado.",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Reporte mensual no encontrado para el grupo de reporte y periodo indicados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "No encontrado",
                    "value": {
                      "error": {
                        "message": "No se encontró el reporte mensual solicitado.",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_error": {
                    "summary": "Error interno",
                    "value": {
                      "error": {
                        "message": "Se produjo un error interno.",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/sessions/{session_id}": {
      "get": {
        "tags": [
          "Sesiones"
        ],
        "summary": "Recuperar una sesión",
        "operationId": "get_session_by_id",
        "description": "Devuelve detalles centrados en la sesión solicitada dentro del alcance de una organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "session_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "pattern": "^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",
              "minLength": 36,
              "maxLength": 36
            },
            "description": "Identificador de la sesión.",
            "example": "550E8400-E29B-41D4-A716-446655440000"
          }
        ],
        "responses": {
          "200": {
            "description": "Detalles de la sesión recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSessionByIdResponseV2"
                },
                "examples": {
                  "session_details": {
                    "summary": "Respuesta de detalle de la sesión",
                    "value": {
                      "id": "550E8400-E29B-41D4-A716-446655440000",
                      "user_name": "contoso\\jdoe",
                      "session_type": "vdi_desktop",
                      "windows_session_id": 7,
                      "connection_state": "active",
                      "start_date": "2026-03-15T08:30:00Z",
                      "session_status": "active_notifications",
                      "platform_type": "windows",
                      "connected": true,
                      "current_session_id": 41,
                      "current_dc_name": "dc-eu-01",
                      "last_connection_time": "2026-03-15T09:45:11Z",
                      "log_on_duration": 35,
                      "session_key": "6BA7B810-9DAD-11D1-80B4-00C04FD430C8",
                      "flexx_analyzer_executed": true,
                      "cpu_usage": 34.2,
                      "ram_usage_gb": 3.8,
                      "rtt_usage": 18.1,
                      "current_uid_usage": 2.4,
                      "ram_usage": 3891,
                      "ram_percentage": 47,
                      "number_alerts_user": 0,
                      "number_alerts_vm": 1,
                      "workspace_id": "64f0c2a1b2d3e4f5060708aa"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_session_id": {
                    "summary": "Formato de identificador de sesión no válido",
                    "value": {
                      "error": {
                        "message": "Formato de session_id no válido",
                        "code": "bad_request",
                        "details": "session_id debe ser un UUID en mayusculas con formato 8-4-4-4-12"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "sesión no encontrada dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "session_not_found": {
                    "summary": "La sesión solicitada no fue encontrada",
                    "value": {
                      "error": {
                        "message": "sesión no encontrada",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/sessions": {
      "get": {
        "tags": [
          "Sesiones"
        ],
        "summary": "Listar sesiones",
        "operationId": "get_sessions",
        "description": "Devuelve una lista paginada de sesiones de la organización.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de usuario",
                "value": "{\"field\":\"user_name\",\"op\":\"contains\",\"value\":\"jdoe\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y estado de conexión",
                "value": "{\"and\":[{\"field\":\"session_status\",\"op\":\"eq\",\"value\":\"active\"},{\"field\":\"connection_state\",\"op\":\"eq\",\"value\":\"active\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"connection_state\",\"op\":\"eq\",\"value\":\"active\"},{\"field\":\"connection_state\",\"op\":\"eq\",\"value\":\"disconnected\"}]},{\"field\":\"current_dc_name\",\"op\":\"contains\",\"value\":\"dc-eu\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`)."
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "description": "Expresión JSON para agregación. Estructura: {\"group_by\":[\"field\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}. No se puede combinar con `fields`.",
            "examples": {
              "group-by-connection-state-count": {
                "summary": "Agrupar por estado de conexión y contar",
                "value": "{\"group_by\":[\"connection_state\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group-by-platform-avg-cpu": {
                "summary": "Agrupar por plataforma y calcular promedio",
                "value": "{\"group_by\":[\"platform_type\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"},{\"field\":\"cpu_usage\",\"function\":\"avg\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sesiones recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSessionsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con sesiones",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "550E8400-E29B-41D4-A716-446655440000",
                          "user_name": "contoso\\jdoe",
                          "session_type": "vdi_desktop",
                          "windows_session_id": 7,
                          "connection_state": "active",
                          "start_date": "2026-03-15T08:30:00Z",
                          "cpu_usage": 34.2,
                          "ram_usage_gb": 3.8,
                          "rtt_usage": 18.1,
                          "session_status": "active",
                          "platform_type": "windows",
                          "connected": true,
                          "current_session_id": 41,
                          "current_dc_name": "dc-eu-01",
                          "current_uid_usage": 2.4,
                          "flexx_analyzer_executed": false,
                          "last_connection_time": "2026-03-15T09:45:11Z",
                          "log_on_duration": 35,
                          "number_alerts_user": 0,
                          "number_alerts_vm": 1,
                          "ram_usage": 3891,
                          "ram_percentage": 47,
                          "session_key": "6BA7B810-9DAD-11D1-80B4-00C04FD430C8",
                          "workspace_id": "64f0c2a1b2d3e4f5060708aa",
                          "organization_id": "507f1f77bcf86cd799439011"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron sesiones",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  },
                  "aggregated_by_connection_state": {
                    "summary": "Resultado agregado por estado de conexión",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "connection_state": "active",
                          "count": 120,
                          "avg_cpu_usage": 17.4
                        },
                        {
                          "connection_state": "disconnected",
                          "count": 45,
                          "avg_cpu_usage": 3.1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros inválido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No se encontró el recurso solicitado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "resource_not_found": {
                    "summary": "No se encontró el recurso solicitado",
                    "value": {
                      "error": {
                        "message": "No encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspace-groups/{workspace_group_id}/workspaces": {
      "get": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Workspaces asignados",
        "operationId": "listWorkspaceGroupsWorkspaces",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Elementos por página (predeterminado: 100, máx.: 100)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Campo de ordenación con sufijo de orden opcional (:asc o :desc). Usa nombres de propiedades de la respuesta: id, organization_id, name, related_environment, operating_system, ip_address, type, last_user, total_ram."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos para incluir en cada elemento Workspace. Campos seleccionables: id, organization_id, name, related_environment, operating_system, ip_address, type, last_user, total_ram. El campo id siempre se incluye.",
            "example": "name,operating_system,total_ram"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120,
              "description": "Cadena JSON con condiciones de filtro. Usa nombres de propiedades de la respuesta para los campos. Operadores: eq, ne, in, nin, gt, gte, lt, lte, contains, startsWith, endsWith, between. Combina con and/or."
            },
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de Workspace",
                "description": "Devuelve Workspaces cuyo nombre contiene el texto proporcionado.",
                "value": "{\"field\": \"name\", \"op\": \"contains\", \"value\": \"desktop\"}"
              },
              "complex-and": {
                "summary": "Filtrar por sistema operativo y RAM",
                "description": "Devuelve Workspaces con Windows y al menos 8 GB de RAM.",
                "value": "{\"and\": [{\"field\": \"operating_system\", \"op\": \"contains\", \"value\": \"Windows\"}, {\"field\": \"total_ram\", \"op\": \"gte\", \"value\": 8192}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con dos prefijos de subred y aplica un umbral de memoria.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"ip_address\", \"op\": \"startsWith\", \"value\": \"172.\"}, {\"field\": \"ip_address\", \"op\": \"startsWith\", \"value\": \"10.\"}]}, {\"field\": \"total_ram\", \"op\": \"gt\", \"value\": 4096}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de Workspaces del grupo de workspaces recuperada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceGroupWorkspaceListResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Paginación, ordenación o filtros no válidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o no pertenece a la organización"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de Workspaces que pertenecen al grupo de workspaces especificado. Admite paginación, ordenación y filtrado mediante una cadena de filtros JSON. La respuesta incluye un conjunto reducido de campos de Workspace."
      },
      "put": {
        "tags": [
          "Grupos de workspaces"
        ],
        "summary": "Establecer o actualizar workspaces",
        "operationId": "updateWorkspaceGroupsWorkspace",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único del grupo de workspaces",
            "example": "507f1f77bcf86cd799439020"
          }
        ],
        "responses": {
          "200": {
            "description": "Workspaces actualizados correctamente en el grupo de workspaces. Devuelve un resumen del resultado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateWorkspaceGroupWorkspacesResponseV2"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Causas comunes: - Estructura del cuerpo de la solicitud no válida - Formato de ID de Workspace no válido"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado: autenticación requerida"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Grupo de workspaces no encontrado o no perteneciente a la organización"
          },
          "422": {
            "description": "Entidad no procesable. Causas comunes: - Los IDs de Workspace no existen - Los Workspaces no pertenecen a la organización - IDs de Workspace no válidos",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspacesUpdateRequestV2"
              },
              "examples": {
                "set-workspaces-in-group": {
                  "summary": "Establecer multiples Workspaces en un grupo de workspaces",
                  "value": {
                    "workspace_ids": [
                      "507f1f77bcf86cd799439030",
                      "507f1f77bcf86cd799439031"
                    ]
                  }
                },
                "remove-all-workspaces": {
                  "summary": "Eliminar todos los Workspaces del grupo de workspaces proporcionando un arreglo vacio",
                  "value": {
                    "workspace_ids": []
                  }
                },
                "set-single-workspace": {
                  "summary": "Establecer un solo Workspace en un grupo de workspaces",
                  "value": {
                    "workspace_ids": [
                      "507f1f77bcf86cd799439030"
                    ]
                  }
                }
              }
            }
          }
        },
        "description": "Establece o reemplaza todos los Workspaces en el grupo de workspaces especificado con la lista proporcionada. Esta es una operación de reemplazo, no una actualización incremental: todos los Workspaces existentes se reemplazan. Devuelve un resumen con el total de Workspaces en el grupo tras la actualización."
      }
    },
    "/v2/organizations/{organization_id}/workspaces": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar workspaces",
        "operationId": "listWorkspaces",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "El identificador único de la organización",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            },
            "description": "Número de página (predeterminado: 1)"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 100,
              "minimum": 1
            },
            "description": "Elementos por página (predeterminado: 100, max.: 100)"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc. En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`)."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Lista separada por comas de campos de respuesta a incluir.",
            "example": "name,user_name,operating_system"
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 1024
            },
            "description": "Agrupa y calcula agregaciones sobre Workspaces. Debe enviarse como cadena JSON con `group_by` (array de campos de contrato) y `aggregates` (array de objetos `{ field, function }`). `field` puede ser `\"*\"` solo cuando `function` es `\"count\"`. Valores permitidos para `function`: `count`, `sum`, `avg`, `min`, `max`. El parámetro `aggregate` no puede combinarse con `fields`. En modo agregado, `sort` solo puede ordenar por campos de `group_by` o por salidas agregadas (`count`, `function_campo`).",
            "examples": {
              "simple": {
                "summary": "Agrupar por estado y contar",
                "value": "{\"group_by\":[\"status\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "with-average": {
                "summary": "Agrupar por plataforma y calcular promedio",
                "value": "{\"group_by\":[\"platform_type\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"},{\"field\":\"percent_cpu\",\"function\":\"avg\"}]}"
              }
            }
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Filtre Workspaces por uno o más criterios. Proporcione un objeto JSON con condiciones de filtro. Puede filtrar por cualquier campo devuelto en la respuesta; use los mismos nombres de campo y las mismas formas de valor que en la respuesta. Use operadores de comparación (eq, ne, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, between) y combine múltiples condiciones con operadores lógicos (and, or). Longitud máxima: 5120 caracteres.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de Workspace",
                "description": "Devuelve Workspaces cuyo nombre contiene el texto proporcionado.",
                "value": "{\"field\": \"name\", \"op\": \"contains\", \"value\": \"sdi\"}"
              },
              "complex-and": {
                "summary": "Filtrar por plataforma y estado de energia",
                "description": "Devuelve solo Workspaces que coinciden con ambas condiciones.",
                "value": "{\"and\": [{\"field\": \"platform_type\", \"op\": \"eq\", \"value\": \"windows\"}, {\"field\": \"power_state\", \"op\": \"eq\", \"value\": \"on\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "description": "Coincide con alternativas de broker y requiere un estado de EDR saludable.",
                "value": "{\"and\": [{\"or\": [{\"field\": \"broker\", \"op\": \"eq\", \"value\": \"citrix_on-premises\"}, {\"field\": \"broker\", \"op\": \"eq\", \"value\": \"azure_virtual_desktop\"}]}, {\"field\": \"edr_status\", \"op\": \"eq\", \"value\": \"installed_working\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista paginada de Workspaces recuperada correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceListResponseV2"
                },
                "examples": {
                  "workspace-list": {
                    "summary": "Lista paginada con un Workspace",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "id": "22f5381aa25e89b73785ca34",
                          "organization_id": "155f78b81155f8ab327ef274",
                          "name": "SDI04-001.org.terravex.net",
                          "related_environment": "1437d381972ce53252aabe72f053af7c",
                          "operating_system": "Microsoft Windows Server 2022 Standard 21H2",
                          "serial_number": "40a70e53327456131ae3321135531ae87f655cbeab27f01134c7ef366a7f2402",
                          "ip_address": "172.30.113.115",
                          "os_update_num_pending": 5,
                          "reporting_group_id": "65f83219942714fc24f01435",
                          "flxmid": "50a70e53327456131ae5921135531ae87f639cbe5b27f09034c7ef366a7f2402",
                          "os_update_num_days_since_last": 183,
                          "total_ram": 8191,
                          "altitude": 0,
                          "antivirus": "Windows Defender",
                          "antivirus_status": "installed_working",
                          "bios_manufacturer": "VMware, Inc.",
                          "bios_mode": "UEFI",
                          "bios_version": "P79 Ver. 6.00",
                          "bios_smbversion": "2.7",
                          "bios_serialnumber": "VMware-42 06 fd 7c 3a f4 af 1c-97 07 56 e2 07 67 d7 23",
                          "base_board_manufacturer": "Intel Corporation",
                          "base_board_product": "440BX Desktop Reference Platform",
                          "base_board_version": "A30",
                          "broker": "citrix_on-premises",
                          "public_ip_city": "Barcelona",
                          "flexxagent_version": "25.9.1.0",
                          "compliance_result": "not_evaluated",
                          "compliance_last_execution": "2025-06-12T06:13:17.17Z",
                          "domain_name": "org.terravex.net",
                          "public_ip_country": "ES",
                          "cores_count": "4",
                          "edr_active_detections": false,
                          "edr_host_id": "11bbcc1e6e2c440aa8b7522a78a292ad",
                          "edr_status": "installed_working",
                          "edr_version": "7.05.17706.0",
                          "current_subnet": "172.30.213.0/24",
                          "default_gateway": "172.30.213.1",
                          "device_kind": "virtual",
                          "edr": "CrowdStrike",
                          "ema_agent_version": "",
                          "ema_endpoint_id": "",
                          "embedded_controller_version": "255.255",
                          "os_fast_startup": false,
                          "flexxanalyzer_config": "configured",
                          "flexxanalyzer_version": "3.0.2",
                          "hypervisor": "vmware_vsphere",
                          "ip_version": "IPv4",
                          "public_ip_isp": "Cloudflare, Inc.",
                          "iot_hub_config_sync_status": "synced",
                          "is_amt_supported": false,
                          "is_laptop": false,
                          "is_physical": false,
                          "last_boot_duration": 20,
                          "last_restart_time": null,
                          "last_time": "2025-06-12T06:13:17.17Z",
                          "last_windows_update": "2025-09-18T00:00:00.00Z",
                          "last_autorepair": "2025-06-10T10:00:00.00Z",
                          "latitude": 0,
                          "locale": "English (United States)",
                          "longitude": 0,
                          "mac_address": "10-52-56-36-21-42",
                          "network_interface_type": "unknown",
                          "os_build_number": "6.3.20348.4171",
                          "os_manufacturer": "Microsoft Corporation",
                          "os_version": "10.0.20348.20348",
                          "ou": "OU=NonPersistent,OU=Workstations,OU=OPS914,DC=ops914,DC=terravex,DC=net",
                          "os_page_file": "C:\\pagefile.sys",
                          "os_page_file_space": 512,
                          "platform_role": "Desktop",
                          "platform_type": "windows",
                          "processor": "Intel(R) Xeon(R) Gold 6348 CPU @ 2.60GHz, 4 Core(s), 4 Logical Processors",
                          "public_ip": "19.27.129.141",
                          "os_reboot_pending": false,
                          "secure_boot_state": "On",
                          "system_model": "VMware7,1",
                          "system_type": "x64-based PC",
                          "os_time_zone": "Romance Standard Time",
                          "user_name": "Domain\\user001",
                          "vm_type": "workspace",
                          "windows_type": "server",
                          "created_at": "2023-12-18T11:26:11.11Z",
                          "last_deregistration_time": "2026-01-19T12:26:25.25Z",
                          "delete_scheduled_at": "2026-07-15T00:00:00.000Z",
                          "encrypted_harddisks": "partial",
                          "custom_field_01": "testVal1",
                          "custom_field_02": "testVal2",
                          "custom_field_03": "4",
                          "custom_field_04": "",
                          "custom_field_05": "",
                          "custom_field_06": "",
                          "custom_field_07": "",
                          "custom_field_08": "",
                          "custom_field_09": "",
                          "custom_field_10": "",
                          "flexxagent_type": "unified",
                          "antivirus_version_number": "4.18.2104.5",
                          "related_location": "C08D2228-E80A-4ADA-A75F-03E33E71D119",
                          "area": "Development",
                          "custom_field_11": "",
                          "custom_field_12": "",
                          "custom_field_13": "",
                          "custom_field_14": "",
                          "custom_field_15": "",
                          "custom_field_16": "",
                          "custom_field_17": "",
                          "custom_field_18": "",
                          "custom_field_19": "",
                          "custom_field_20": "",
                          "department": "Department",
                          "office": "Office",
                          "last_custom_fields_update": "2025-12-24T11:24:51.51Z",
                          "workspace_id": "6676aa0c1e9c850250a70e53327456131ae59211aa531ae87f639cbe5b27f09034c7e3366a7f2402",
                          "flexxanalyzer_proxy_uri": "",
                          "iot_hub_name": "idIot0e33d84fe5761e",
                          "flexxagent_status": "stopped",
                          "boot_hard_disk_used_percentage": 34,
                          "last_connection_time": "2025-06-12T06:13:17.17Z",
                          "network_signal": 0,
                          "num_alerts": 0,
                          "percent_cpu": 17,
                          "percent_ram": 0,
                          "power_state": "off",
                          "sessions_count": 0,
                          "used_system_disk_c": 34,
                          "wake_on_lan_mac": "10-50-56-56-51-12",
                          "wake_on_lan_subnet": "172.30.213.0/24",
                          "broker_status": "disconnected",
                          "status": "offline"
                        }
                      ]
                    }
                  },
                  "workspace-aggregate": {
                    "summary": "Resultado agregado por estado",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "status": "online",
                          "count": 120,
                          "avg_percent_cpu": 17.4
                        },
                        {
                          "status": "offline",
                          "count": 45,
                          "avg_percent_cpu": 3.1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest",
            "description": "Solicitud incorrecta. Paginación, ordenación o filtros no válidos."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized",
            "description": "No autorizado - se requiere autenticación"
          },
          "404": {
            "$ref": "#/components/responses/NotFound",
            "description": "Organización no encontrada"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "description": "Recupera una lista paginada de Workspaces. Admite paginación, ordenación y filtrado mediante una cadena de filtro JSON."
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/agent-versions": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar versiones de agente del workspace",
        "description": "Devuelve el historial paginado de versiones del agente para un workspace dentro de una organización, exponiendo solo discovered_at y version.",
        "operationId": "workspaces_agent_versions",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "description": "Identificador de la organización.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "example": "64b7f1a2c3d4e5f60718293a"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "description": "Identificador del workspace.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "example": "64b7f1a2c3d4e5f60718293b"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Número de página a consultar.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Cantidad de elementos por página.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 100
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos de respuesta a incluir, separados por comas.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Expresión de ordenación con el formato <field>:asc|desc.",
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            }
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "description": "Expresión JSON de filtros sobre campos filtrables de la respuesta.",
            "schema": {
              "type": "string"
            },
            "examples": {
              "simple": {
                "summary": "Filtro simple por versión",
                "value": "{\"field\":\"version\",\"op\":\"contains\",\"value\":\"5.2\"}"
              },
              "complex_and": {
                "summary": "Filtro compuesto con and",
                "value": "{\"and\":[{\"field\":\"version\",\"op\":\"contains\",\"value\":\"5.\"},{\"field\":\"discovered_at\",\"op\":\"contains\",\"value\":\"2026-06\"}]}"
              },
              "complex_or_and": {
                "summary": "Filtro compuesto con or y and",
                "value": "{\"and\":[{\"or\":[{\"field\":\"version\",\"op\":\"eq\",\"value\":\"5.2.0\"},{\"field\":\"version\",\"op\":\"eq\",\"value\":\"5.2.1\"}]},{\"field\":\"discovered_at\",\"op\":\"contains\",\"value\":\"2026-06\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Listado paginado de versiones del agente del workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceAgentVersionsResponseV2"
                },
                "examples": {
                  "success": {
                    "summary": "Respuesta paginada correcta",
                    "value": {
                      "data": [
                        {
                          "discovered_at": "2026-06-18T10:20:30.000Z",
                          "version": "5.2.1"
                        },
                        {
                          "discovered_at": "2026-05-10T08:00:00.000Z",
                          "version": "5.1.9"
                        }
                      ],
                      "has_next": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Could not process filters",
                        "code": "BAD_REQUEST",
                        "details": "Operator \"contains\" is not allowed for field \"discovered_at\"."
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado para acceder a la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unauthorized": {
                    "summary": "Credenciales invalidas o sin acceso",
                    "value": {
                      "error": {
                        "code": "unauthorized",
                        "message": "No autorizado para acceder a este recurso."
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado dentro del alcance autorizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "not_found": {
                    "summary": "Workspace sin historial disponible",
                    "value": {
                      "error": {
                        "code": "not_found",
                        "message": "No se encontró el recurso solicitado."
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_error": {
                    "summary": "Fallo inesperado",
                    "value": {
                      "error": {
                        "code": "internal_error",
                        "message": "Se ha producido un error interno."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/alerts": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar alertas activas",
        "operationId": "workspaces_alerts",
        "description": "Devuelve una lista paginada de alertas activas para el Workspace seleccionado.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elemento de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de alerta",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"disk\"}"
              },
              "complex-and": {
                "summary": "Filtrar por severidad e información",
                "value": "{\"and\":[{\"field\":\"severity\",\"op\":\"eq\",\"value\":\"critical\"},{\"field\":\"information\",\"op\":\"contains\",\"value\":\"cpu\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"name\",\"op\":\"contains\",\"value\":\"memory\"},{\"field\":\"description\",\"op\":\"contains\",\"value\":\"memory\"}]},{\"field\":\"severity\",\"op\":\"eq\",\"value\":\"warning\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre rutas de campos escalares ordenables de la respuesta."
          }
        ],
        "responses": {
          "200": {
            "description": "Alertas de Workspace recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceAlertsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con alertas",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070811",
                          "name": "Uso alto de CPU",
                          "description": "El uso de CPU superó el umbral",
                          "severity": "critical",
                          "started_at": "2026-03-15T08:00:00Z",
                          "authorized_minutes": 30,
                          "notified_at": "2026-03-15T08:05:00Z",
                          "information": "El uso actual es 96%",
                          "threshold_unit_name": "percent",
                          "threshold_value": 90,
                          "element": "cpu",
                          "category": "performance"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron alertas",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros inválido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance de organización autorizado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/disks": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar discos",
        "operationId": "workspaces_disks",
        "description": "Devuelve una lista paginada de discos de Workspace para el Workspace seleccionado.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Cantidad de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos filtrables de la respuesta.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de disco",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"system\"}"
              },
              "complex-and": {
                "summary": "Filtrar por tipo de medio y estado de cifrado",
                "value": "{\"and\":[{\"field\":\"media_type\",\"op\":\"eq\",\"value\":\"SSD\"},{\"field\":\"encrypted\",\"op\":\"eq\",\"value\":\"encrypted\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar alternativas de ubicación con condición de unidad del SO",
                "value": "{\"and\":[{\"or\":[{\"field\":\"location\",\"op\":\"contains\",\"value\":\"C:\"},{\"field\":\"location\",\"op\":\"contains\",\"value\":\"D:\"}]},{\"field\":\"os_drive\",\"op\":\"eq\",\"value\":true}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión de ordenación en la forma <field>:asc|desc sobre rutas de campos escalares ordenables de la respuesta."
          }
        ],
        "responses": {
          "200": {
            "description": "Discos del Workspace recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceDisksResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con registros de discos",
                    "value": {
                      "has_next": false,
                      "data": [
                        {
                          "id": "cd607b6eb7d74f3990e62f0f",
                          "name": "D:",
                          "device_id": "\\\\.\\PHYSICALDRIVE1",
                          "encrypted": "not_encrypted",
                          "encryption_method": "None",
                          "location": "Integrated : Bus 0 : Device 14 : Function 0 : Adapter 0 : Port 3 : Target 2 : LUN 0",
                          "media_type": "NTFS",
                          "os_drive": false,
                          "partition": "Disk #1, Partition #0",
                          "physical_disk_size": 953869,
                          "total_size": 953866,
                          "used_size": 953333,
                          "volume_label": "Data"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron discos",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filters no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filters no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "El Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/installed-apps": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar aplicaciones instaladas",
        "description": "Devuelve una lista paginada de aplicaciones instaladas para el Workspace seleccionado.",
        "operationId": "workspaces_installed_apps",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre del producto",
                "value": "{\"field\":\"product_name\",\"op\":\"contains\",\"value\":\"chrome\"}"
              },
              "complex-and": {
                "summary": "Filtrar por publicador y versión",
                "value": "{\"and\":[{\"field\":\"publisher\",\"op\":\"contains\",\"value\":\"microsoft\"},{\"field\":\"version\",\"op\":\"contains\",\"value\":\"2026\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"product_name\",\"op\":\"contains\",\"value\":\"edge\"},{\"field\":\"product_name\",\"op\":\"contains\",\"value\":\"chrome\"}]},{\"field\":\"last_reported_at\",\"op\":\"eq\",\"value\":\"2026-03-15T09:45:11Z\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión de orden en la forma <field>:asc|desc sobre rutas de campos escalares de respuesta ordenables."
          }
        ],
        "responses": {
          "200": {
            "description": "Aplicaciones instaladas del Workspace recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceInstalledAppsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con aplicaciones instaladas",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070815",
                          "product_name": "Microsoft Edge",
                          "publisher": "Microsoft Corporation",
                          "version": "124.0.2478.97",
                          "installed_at": "2026-03-12T14:10:20Z",
                          "install_location": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application",
                          "last_reported_at": "2026-03-15T09:45:11Z"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron aplicaciones instaladas",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud inválidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros inválido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros inválido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "El Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/operations": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar operaciones",
        "operationId": "workspaces_operations",
        "description": "Devuelve una lista paginada de operaciones para el Workspace seleccionado.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos filtrables del contrato de operación.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de operación",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"remote\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y rango de inicio",
                "value": "{\"and\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"finished\"},{\"field\":\"started_at\",\"op\":\"gte\",\"value\":\"2026-03-10T00:00:00.000Z\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"name\",\"op\":\"contains\",\"value\":\"remote\"},{\"field\":\"description\",\"op\":\"contains\",\"value\":\"remote\"}]},{\"field\":\"created_at\",\"op\":\"gte\",\"value\":\"2026-03-01T00:00:00.000Z\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión de ordenación con la forma <field>:asc|desc sobre rutas de campos escalares de respuesta ordenables."
          }
        ],
        "responses": {
          "200": {
            "description": "Operaciones de Workspace recuperadas correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceOperationsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con elementos",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070811",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "name": "remote_assistance",
                          "description": "Iniciar sesión de asistencia remota desatendida",
                          "status": "finished",
                          "started_at": "2026-03-10T09:12:00Z",
                          "ended_at": "2026-03-10T09:15:17Z",
                          "created_at": "2026-03-10T09:11:45Z",
                          "microservice_id": null,
                          "flow_id": null,
                          "remote_support": {
                            "start_date": "2026-03-10T09:12:00Z",
                            "end_date": "2026-03-10T09:15:17Z",
                            "type": "unattended"
                          }
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron operaciones",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "El Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/patches": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar parches de un Workspace",
        "operationId": "workspaces_patches",
        "description": "Devuelve una lista paginada de parches para el workspace seleccionado. Solo aplica a workspaces con platform_type `windows`.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Campos de respuesta a incluir, separados por comas."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre campos del item de respuesta (incluye `id`).",
            "examples": {
              "simple": {
                "summary": "Filtrar por título",
                "value": "{\"field\":\"title\",\"op\":\"contains\",\"value\":\"security update\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y severidad",
                "value": "{\"and\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"pending\"},{\"field\":\"severity\",\"op\":\"contains\",\"value\":\"critical\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"product\",\"op\":\"contains\",\"value\":\"windows 10\"},{\"field\":\"product\",\"op\":\"contains\",\"value\":\"windows 11\"}]},{\"field\":\"kb\",\"op\":\"contains\",\"value\":\"kb503\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre campos escalares del item (incluye `id`). En modo agregado, solo acepta campos de `group_by` o aliases agregados (`count`, `<function>_<field>`)."
          },
          {
            "name": "aggregate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 4096
            },
            "description": "Expresión JSON de agregacion con `group_by` y `aggregates` sobre campos escalares de primer nivel.",
            "examples": {
              "group_status_count": {
                "summary": "Agrupar por estado y contar",
                "value": "{\"group_by\":[\"status\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"}]}"
              },
              "group_product_avg": {
                "summary": "Agrupar por producto y calcular promedio",
                "value": "{\"group_by\":[\"product\"],\"aggregates\":[{\"field\":\"*\",\"function\":\"count\"},{\"field\":\"installed_at\",\"function\":\"max\"}]}"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Parches de Workspace recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspacePatchesResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Resultado paginado con registros de parches",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070812",
                          "kb": "KB5034123",
                          "title": "Actualización acumulativa de seguridad",
                          "status": "pending",
                          "product": "windows 11",
                          "severity": "critical",
                          "arrived_at": "2026-03-15",
                          "category": "security_updates",
                          "installed_at": null,
                          "additional_information_url": "https://support.microsoft.com/help/kb5034123"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron parches",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  },
                  "invalid_platform_type": {
                    "summary": "Workspace con plataforma no compatible",
                    "value": {
                      "error": {
                        "message": "Workspace no compatible para consulta de parches",
                        "code": "bad_request",
                        "details": "Este endpoint solo admite workspaces con platform_type windows"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado u organización no accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/pnp-errors": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar errores Plug and Play",
        "operationId": "workspaces_pnp_errors",
        "description": "Devuelve una lista paginada de errores Plug and Play para el Workspace seleccionado.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta, separados por comas, que se incluirán."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre de error",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"usb\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y clase",
                "value": "{\"and\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"error\"},{\"field\":\"class\",\"op\":\"contains\",\"value\":\"usb\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"error_code\",\"op\":\"eq\",\"value\":\"CM_PROB_FAILED_START\"},{\"field\":\"error_code\",\"op\":\"eq\",\"value\":\"CM_PROB_DISABLED\"}]},{\"field\":\"device_id\",\"op\":\"contains\",\"value\":\"ven_8086\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión de ordenación con el formato <field>:asc|desc sobre rutas de campos escalares de respuesta ordenables."
          }
        ],
        "responses": {
          "200": {
            "description": "Errores Plug and Play de Workspace recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspacePnpErrorsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Resultado paginado con errores Plug and Play",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070811",
                          "name": "Dispositivo compuesto USB",
                          "status": "Error",
                          "class": "USB",
                          "device_id": "USB\\VID_046D&PID_C534",
                          "error_description": "El controlador no pudo iniciarse",
                          "error_code": "CM_PROB_FAILED_START",
                          "properties": "driver_version=10.0.22621.1",
                          "last_updated_at": "2026-03-31T20:05:57Z"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron errores Plug and Play",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance autorizado de la organización.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "El Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/pnp-events": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar eventos Plug and Play",
        "operationId": "workspaces_pnp_events",
        "description": "Devuelve una lista paginada de eventos Plug and Play para el Workspace seleccionado.",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de la organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador del Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por accion",
                "value": "{\"field\":\"action\",\"op\":\"contains\",\"value\":\"install\"}"
              },
              "complex-and": {
                "summary": "Filtrar por fecha y usuario",
                "value": "{\"and\":[{\"field\":\"created_at\",\"op\":\"contains\",\"value\":\"2026-03-31\"},{\"field\":\"user_name\",\"op\":\"contains\",\"value\":\"system\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"caption\",\"op\":\"contains\",\"value\":\"usb\"},{\"field\":\"caption\",\"op\":\"contains\",\"value\":\"driver\"}]},{\"field\":\"device_id\",\"op\":\"contains\",\"value\":\"ven_8086\"}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Expresión de ordenación en la forma <field>:asc|desc sobre rutas de campos escalares de respuesta ordenables."
          }
        ],
        "responses": {
          "200": {
            "description": "Eventos Plug and Play de Workspace recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspacePnpEventsResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Resultado paginado con registros de eventos",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070810",
                          "action": "Install",
                          "created_at": "2026-03-31T20:05:57Z",
                          "user_name": "SYSTEM",
                          "caption": "USB device installed",
                          "device_id": "PCI\\VEN_8086&DEV_9A13"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron eventos",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filtros no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filtros no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado u organización no accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/organizations/{organization_id}/workspaces/{workspace_id}/services": {
      "get": {
        "tags": [
          "Workspaces"
        ],
        "summary": "Listar servicios",
        "operationId": "workspaces_services",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de organización.",
            "example": "507f1f77bcf86cd799439011"
          },
          {
            "name": "workspace_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$",
              "minLength": 24,
              "maxLength": 24
            },
            "description": "Identificador de Workspace.",
            "example": "507f1f77bcf86cd799439099"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Número de página."
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Número de elementos por página."
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 2048
            },
            "description": "Nombres de campos de elementos de respuesta separados por comas para incluir."
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 5120
            },
            "description": "Expresión de filtro JSON sobre rutas de campos de respuesta filtrables.",
            "examples": {
              "simple": {
                "summary": "Filtrar por nombre del servicio",
                "value": "{\"field\":\"name\",\"op\":\"contains\",\"value\":\"print\"}"
              },
              "complex-and": {
                "summary": "Filtrar por estado y tipo de inicio",
                "value": "{\"and\":[{\"field\":\"status\",\"op\":\"eq\",\"value\":\"Running\"},{\"field\":\"startup_type\",\"op\":\"eq\",\"value\":\"Manual\"}]}"
              },
              "complex-or-and": {
                "summary": "Combinar condiciones OR y AND",
                "value": "{\"and\":[{\"or\":[{\"field\":\"display_name\",\"op\":\"contains\",\"value\":\"agent\"},{\"field\":\"description\",\"op\":\"contains\",\"value\":\"agent\"}]},{\"field\":\"accept_stop\",\"op\":\"eq\",\"value\":true}]}"
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^([a-z_]+):(asc|desc)$"
            },
            "description": "Expresión de ordenación con formato <field>:asc|desc sobre rutas de campos escalares de respuesta ordenables."
          }
        ],
        "responses": {
          "200": {
            "description": "Servicios de Workspace recuperados correctamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWorkspaceServicesResponseV2"
                },
                "examples": {
                  "paginated_result": {
                    "summary": "Lista paginada con servicios",
                    "value": {
                      "has_next": true,
                      "data": [
                        {
                          "id": "64f0c2a1b2d3e4f506070810",
                          "name": "Spooler",
                          "description": "Carga archivos en memoria para el procesamiento de impresión.",
                          "status": "Running",
                          "accept_stop": true,
                          "display_name": "Print Spooler",
                          "log_on_as": "LocalSystem",
                          "path": "C:\\Windows\\System32\\spoolsv.exe",
                          "organization_id": "507f1f77bcf86cd799439011",
                          "reporting_group_id": "507f1f77bcf86cd799439077",
                          "startup_type": "Automatic",
                          "last_updated_at": "2026-03-15T09:45:11Z",
                          "workspace_id": "507f1f77bcf86cd799439099"
                        }
                      ]
                    }
                  },
                  "empty_result": {
                    "summary": "No se encontraron servicios",
                    "value": {
                      "has_next": false,
                      "data": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parámetros de solicitud no válidos, incluyendo filtros/sort inválidos o Workspace no Windows.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "invalid_filters": {
                    "summary": "Formato de filters no válido",
                    "value": {
                      "error": {
                        "message": "Formato de filters no válido",
                        "code": "bad_request",
                        "details": "filters debe ser una cadena JSON válida"
                      }
                    }
                  },
                  "workspace_platform_not_supported": {
                    "summary": "Workspace no soportado por plataforma",
                    "value": {
                      "error": {
                        "message": "This endpoint supports only windows workspaces (platform_type=windows)",
                        "code": "bad_request"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "No autorizado o la organización no es accesible.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "organization_not_authorized": {
                    "summary": "Fallo de acceso a la organización",
                    "value": {
                      "error": {
                        "message": "No autorizado",
                        "code": "unauthorized"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Workspace no encontrado dentro del alcance de la organización autorizada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "workspace_not_found": {
                    "summary": "Workspace no existe en el alcance",
                    "value": {
                      "error": {
                        "message": "Workspace no encontrado",
                        "code": "not_found"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "unexpected_error": {
                    "summary": "Fallo no controlado",
                    "value": {
                      "error": {
                        "message": "Error interno del servidor",
                        "code": "internal_error"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Devuelve una lista paginada de servicios para el Workspace seleccionado. Solo aplica para Workspaces Windows (platform_type=windows)."
      }
    }
  },
  "components": {
    "schemas": {
      "CreateDigitalActivityCoreProcessGroupRequestV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Nombre del grupo de procesos core."
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción opcional del grupo de procesos core."
          },
          "workspace_group_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del grupo de workspaces asociado."
          }
        },
        "required": [
          "name",
          "workspace_group_id"
        ],
        "description": "Cuerpo de creación del grupo de procesos core."
      },
      "GetDigitalActivityCoreProcessGroupResponseV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del grupo de procesos core."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización."
          },
          "name": {
            "type": "string",
            "description": "Nombre del grupo de procesos core."
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción del grupo de procesos core."
          },
          "workspace_group_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del grupo de workspaces asociado."
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "workspace_group_id"
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "message": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "details": {
                "type": "string"
              }
            },
            "required": [
              "message",
              "code"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "FlowV2": {
        "type": "object",
        "description": "Detalle del flujo tal como lo devuelve GET flow by id. La organización está implícita por la ruta `/v2/organizations/{organization_id}/flows/{flow_id}`. Los workspaces/grupos de destino se normalizan en target.ids (cadenas hexadecimales de ObjectId de MongoDB).",
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string",
            "description": "Resuelto para Accept-Language cuando es multilingüe"
          },
          "description": {
            "type": "string",
            "description": "Resuelto para Accept-Language cuando es multilingüe"
          },
          "type": {
            "type": "string",
            "enum": [
              "session",
              "workspace"
            ]
          },
          "version": {
            "type": "number"
          },
          "detection_only": {
            "type": "boolean"
          },
          "cooldown_minutes": {
            "type": "number",
            "description": "Tiempo de espera en minutos"
          },
          "enabled": {
            "type": "boolean"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FlowConditionV2"
            },
            "description": "Omitido o vacío cuando el flujo no tiene condiciones"
          },
          "trigger": {
            "type": "string",
            "nullable": true
          },
          "target": {
            "$ref": "#/components/schemas/FlowTargetSelectorV2",
            "description": "Destino de ejecución: type selecciona el alcance; ids enumera valores de _id de Workspace, _id de grupo de Workspace o _id de Grupo de reporte (vacío cuando type es ALL_WORKSPACES)"
          },
          "microservice_id": {
            "type": "string",
            "nullable": true,
            "description": "ID del microservicio vinculado cuando está presente"
          },
          "init_text": {
            "type": "string",
            "nullable": true,
            "description": "Resuelto para Accept-Language cuando es multilingüe"
          },
          "ok_text": {
            "type": "string",
            "nullable": true,
            "description": "Resuelto para Accept-Language cuando es multilingüe"
          },
          "ko_text": {
            "type": "string",
            "nullable": true,
            "description": "Resuelto para Accept-Language cuando es multilingüe"
          },
          "execution_metrics": {
            "$ref": "#/components/schemas/FlowExecutionMetricsV2",
            "nullable": true,
            "description": "Presente cuando se calcularon métricas para este flujo"
          }
        },
        "required": [
          "id",
          "created_at",
          "name",
          "description",
          "type",
          "version",
          "detection_only",
          "cooldown_minutes",
          "enabled",
          "target"
        ]
      },
      "FlowConditionV2": {
        "type": "object",
        "properties": {
          "condition_type_id": {
            "type": "string"
          },
          "metric": {
            "type": "string"
          },
          "operator": {
            "type": "string"
          },
          "compare_to": {
            "type": "string"
          },
          "period": {
            "type": "number",
            "nullable": true
          },
          "check_every": {
            "type": "number"
          }
        },
        "required": [
          "condition_type_id",
          "metric",
          "operator",
          "compare_to",
          "check_every"
        ]
      },
      "FlowTargetSelectorV2": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "all_workspaces",
              "workspaces",
              "workspace_groups",
              "reporting_groups"
            ],
            "description": "ALL_WORKSPACES: ids siempre es []. WORKSPACES: ids son _id de documentos de Workspace (24 hex). WORKSPACE_GROUPS / REPORTING_GROUPS: ids son valores de _id de grupo."
          },
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            }
          }
        },
        "required": [
          "type",
          "ids"
        ]
      },
      "FlowExecutionMetricsV2": {
        "type": "object",
        "properties": {
          "targeted_workspaces": {
            "type": "number"
          },
          "evaluations_per_day": {
            "type": "number"
          },
          "possible_executions_per_day": {
            "type": "number"
          },
          "total_possible_executions_per_day": {
            "type": "number"
          }
        },
        "required": [
          "targeted_workspaces",
          "evaluations_per_day",
          "possible_executions_per_day",
          "total_possible_executions_per_day"
        ]
      },
      "MultilangField": {
        "type": "object",
        "description": "Campo multilenguaje. Las claves son códigos de idioma (en-EN, es-ES, pt-BR, eu-ES, ca-ES). Debe haber al menos una clave. Cada valor debe tener entre 1 y 512 caracteres.",
        "properties": {
          "en-EN": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "es-ES": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "pt-BR": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "eu-ES": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "ca-ES": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          }
        },
        "additionalProperties": false
      },
      "CreateFlowV2Request": {
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Nombre del flujo. Se requiere al menos una clave de idioma; cada valor debe tener entre 1 y 512 caracteres."
          },
          "description": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Descripción del flujo. Se requiere al menos una clave de idioma; cada valor debe tener entre 1 y 512 caracteres."
          },
          "type": {
            "type": "string",
            "enum": [
              "session",
              "workspace"
            ]
          },
          "detection_only": {
            "type": "boolean"
          },
          "cooldown_minutes": {
            "type": "number",
            "minimum": 10,
            "maximum": 1440,
            "description": "Tiempo de espera en minutos. Debe estar entre 10 y 1440."
          },
          "enabled": {
            "type": "boolean",
            "default": false,
            "description": "Si es true, el flujo queda habilitado tras su creación (requiere condiciones, microservicio y objetivo válidos). Si se omite o es false, se crea un flujo deshabilitado."
          },
          "init_text": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Mensaje de texto inicial. Se omite si no es necesario. Cuando se proporciona, se requiere al menos una clave de idioma; cada valor debe tener entre 1 y 512 caracteres."
          },
          "ok_text": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Mensaje de texto de éxito. Se omite si no es necesario. Cuando se proporciona, se requiere al menos una clave de idioma; cada valor debe tener entre 1 y 512 caracteres."
          },
          "ko_text": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Mensaje de texto de error. Se omite si no es necesario. Cuando se proporciona, se requiere al menos una clave de idioma; cada valor debe tener entre 1 y 512 caracteres."
          },
          "target": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "all_workspaces",
                  "workspaces",
                  "workspace_groups",
                  "reporting_groups"
                ]
              },
              "ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 512
                }
              }
            },
            "required": [
              "type"
            ]
          },
          "microservice_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FlowConditionInputV2"
            }
          }
        },
        "required": [
          "name",
          "description",
          "type",
          "detection_only",
          "cooldown_minutes",
          "target",
          "microservice_id",
          "conditions"
        ]
      },
      "FlowConditionInputV2": {
        "type": "object",
        "properties": {
          "condition_type_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "operator": {
            "type": "string",
            "enum": [
              "eq",
              "gt",
              "lt",
              "gte",
              "lte",
              "startsWith",
              "endsWith",
              "contains",
              "at"
            ]
          },
          "compare_to": {
            "type": "string",
            "maxLength": 512
          },
          "period": {
            "type": "number",
            "nullable": true
          },
          "check_every": {
            "type": "number"
          }
        },
        "required": [
          "condition_type_id",
          "operator",
          "compare_to",
          "check_every"
        ]
      },
      "CreateOperationV2Request": {
        "type": "object",
        "required": [
          "type",
          "target"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "execute_microservice",
              "delete_workspaces",
              "shutdown_workspaces",
              "restart_workspaces",
              "suspend_workspaces"
            ]
          },
          "target": {
            "type": "object",
            "required": [
              "type",
              "ids"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "workspaces",
                  "sessions"
                ]
              },
              "ids": {
                "type": "array",
                "minItems": 1,
                "maxItems": 20000,
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 64
                }
              }
            },
            "additionalProperties": false
          },
          "expiration_in_seconds": {
            "type": "integer",
            "maximum": 84600,
            "minimum": 600
          },
          "payload": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false
      },
      "CreateOperationV2Response": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/GetOperationByIdResponseV1"
            }
          }
        }
      },
      "GetOperationByIdResponseV1": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la ejecución de operación."
          },
          "name": {
            "type": "string",
            "description": "Nombre de la operación."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización propietaria de la operación."
          },
          "description": {
            "type": "string",
            "description": "Descripción de la operación. Se devuelve cadena vacía cuando no existe en origen."
          },
          "status": {
            "type": "string",
            "enum": [
              "finished",
              "unknown",
              "error",
              "pending",
              "in-progress",
              "timeout",
              "cancelled",
              "scheduled"
            ],
            "description": "Estado actual de la operación."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca temporal de creación."
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de inicio."
          },
          "ended_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de finalización."
          },
          "microservice_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del microservicio relacionado, cuando exista."
          },
          "flow_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del flujo relacionado, cuando exista."
          },
          "remote_support": {
            "$ref": "#/components/schemas/GetOperationByIdRemoteSupportV1"
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "description",
          "status",
          "created_at"
        ]
      },
      "GetOperationByIdRemoteSupportV1": {
        "type": "object",
        "nullable": true,
        "properties": {
          "start_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha de inicio del soporte remoto."
          },
          "end_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha de fin del soporte remoto."
          },
          "type": {
            "type": "string",
            "nullable": true,
            "description": "Tipo de sesión de soporte remoto."
          }
        }
      },
      "CreateReportingGroupMagicLinkRequestV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha y hora de expiración en UTC (ISO 8601, por ejemplo, con sufijo Z). Debe estar en el futuro y no más de 91 días por delante.",
            "example": "2026-03-15T12:00:00.000Z"
          },
          "installer": {
            "$ref": "#/components/schemas/ReportingGroupMagicLinkInstallerV2"
          }
        },
        "required": [
          "expires_at",
          "installer"
        ],
        "description": "Cuerpo de solicitud para crear un enlace mágico de Grupo de reporte."
      },
      "ReportingGroupMagicLinkInstallerV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "version": {
            "type": "string",
            "enum": [
              "latest"
            ],
            "description": "Versión del instalador.",
            "example": "latest"
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows"
            ],
            "description": "Plataforma del instalador.",
            "example": "windows"
          },
          "arch": {
            "type": "string",
            "enum": [
              "x64"
            ],
            "description": "Arquitectura del instalador.",
            "example": "x64"
          },
          "type": {
            "type": "string",
            "enum": [
              "fxxone"
            ],
            "description": "Tipo de instalador.",
            "example": "fxxone"
          }
        },
        "required": [
          "version",
          "platform",
          "arch",
          "type"
        ],
        "description": "Selección de instalador para el enlace mágico."
      },
      "CreateReportingGroupMagicLinkResponseV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador del enlace mágico",
            "example": "507f1f77bcf86cd799439099"
          },
          "token": {
            "type": "string",
            "description": "Token asociado con el enlace mágico.",
            "example": "2ab46558-3c40-4b72-8fce-08b7b596f624"
          },
          "link": {
            "type": "string",
            "description": "URL del enlace mágico.",
            "example": "https://portal.example.com/magic-link?key=2ab46558-3c40-4b72-8fce-08b7b596f624"
          }
        },
        "required": [
          "id",
          "token",
          "link"
        ]
      },
      "CreateReportingGroupRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 512,
            "description": "El nombre del grupo de reporte. Debe ser único dentro de la organización.",
            "example": "Grupo de reporte de Producción"
          },
          "product_config_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "El identificador único de la configuración de producto que se asociará con este grupo de reporte. La configuración de producto debe existir y pertenecer a la organización.",
            "example": "507f1f77bcf86cd799439030"
          },
          "patch_policy_target_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del destino de política de parches que se asociará con este grupo de reporte.",
            "example": "507f1f77bcf86cd799439040"
          },
          "fishing_pattern": {
            "type": "string",
            "maxLength": 250,
            "description": "Opcional. Un patrón de expresión regular usado para hacer coincidir dispositivos. Debe ser un patrón regex válido. Si se proporciona, también se debe especificar fishing_pattern_field.",
            "example": "Estaciones de trabajo Windows"
          },
          "fishing_pattern_field": {
            "type": "string",
            "enum": [
              "full_name",
              "description",
              "ou",
              "current_subnet"
            ],
            "description": "Opcional. Campo sobre el que se aplica fishing_pattern. Obligatorio si se proporciona fishing_pattern. Valores válidos: full_name (nombre completo del dispositivo), description (descripción del dispositivo), ou (unidad organizativa), current_subnet (subred actual).",
            "example": "full_name"
          },
          "intermediate_device_1_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del primer Workspace de dispositivo intermedio. Los dispositivos intermedios se usan para acciones Wake on LAN en redes seguras, permitiendo el encendido remoto de dispositivos objetivo a través de puertas de enlace intermedias. Los dispositivos intermedios deben definirse secuencialmente sin huecos. Si se proporcionan intermediate_device_2_id o intermediate_device_3_id, este campo es obligatorio.",
            "example": "507f1f77bcf86cd799439050"
          },
          "intermediate_device_2_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del segundo Workspace de dispositivo intermedio. Se usa para acciones Wake on LAN en redes seguras. Requiere que se proporcione intermediate_device_1_id. Si se proporciona intermediate_device_3_id, este campo es obligatorio.",
            "example": "507f1f77bcf86cd799439051"
          },
          "intermediate_device_3_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del tercer Workspace de dispositivo intermedio. Se usa para acciones Wake on LAN en redes seguras. Requiere que se proporcionen intermediate_device_1_id e intermediate_device_2_id.",
            "example": "507f1f77bcf86cd799439052"
          }
        },
        "required": [
          "name",
          "product_config_id"
        ],
        "description": "Cuerpo de solicitud para crear un nuevo grupo de reporte. Los grupos de reporte organizan dispositivos y gestionan configuraciones, políticas de parches y enrutamiento de dispositivos intermedios."
      },
      "ReportingGroupByIdV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID del grupo de reporte"
          },
          "name": {
            "type": "string",
            "description": "Nombre del grupo de reporte"
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de la organización"
          },
          "product_config_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de la configuración del producto"
          },
          "fishing_pattern": {
            "type": "string",
            "nullable": true,
            "description": "Nombre del fishing pattern"
          },
          "fishing_pattern_field": {
            "type": "string",
            "enum": [
              "full_name",
              "description",
              "ou",
              "current_subnet"
            ],
            "nullable": true,
            "description": "Campo sobre el que se aplica fishing_pattern. Valores posibles: full_name, description, ou, current_subnet."
          },
          "patch_policy_target_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador del destino de política de parches"
          },
          "policy_reporting_group": {
            "type": "string",
            "nullable": true,
            "description": "Identificador del grupo de reporte de política"
          },
          "overridden_agent_settings": {
            "$ref": "#/components/schemas/ReportingGroupAgentSettingsV2",
            "nullable": true,
            "description": "Ajustes del agente sobrescritos a nivel de grupo de reporte"
          },
          "effective_agent_settings": {
            "$ref": "#/components/schemas/ReportingGroupEffectiveAgentSettingsV2",
            "nullable": true,
            "description": "Ajustes efectivos del agente (combinados desde la configuración del producto y sobrescrituras)"
          },
          "execute_flexx_analyzer_agent": {
            "type": "boolean",
            "description": "Si la ejecución del agente Flexx Analyzer está habilitada"
          },
          "intermediate_device_1_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de Workspace del primer dispositivo intermedio (buscado por sysId)"
          },
          "intermediate_device_2_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de Workspace del segundo dispositivo intermedio (buscado por sysId)"
          },
          "intermediate_device_3_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de Workspace del tercer dispositivo intermedio (buscado por sysId)"
          }
        },
        "required": [
          "id",
          "name",
          "execute_flexx_analyzer_agent"
        ]
      },
      "ReportingGroupAgentSettingsV2": {
        "type": "object",
        "properties": {
          "remote_support": {
            "type": "string",
            "nullable": true,
            "description": "Configuración de soporte remoto"
          },
          "collect_device_location": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la recopilación de ubicación del dispositivo está habilitada"
          },
          "auto_update_agents": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la actualización automática de agentes está habilitada"
          },
          "collect_event_logs": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la recopilación de registros de eventos está habilitada"
          },
          "event_log_ids": {
            "type": "string",
            "nullable": true,
            "description": "IDs de registros de eventos"
          },
          "event_logs_recurrence": {
            "type": "number",
            "nullable": true,
            "description": "Recurrencia de registros de eventos"
          },
          "collect_disks": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la recopilación de discos está habilitada"
          },
          "collect_services": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la recopilación de servicios está habilitada"
          },
          "collect_pnp_events": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la recopilación de eventos PnP está habilitada"
          },
          "collect_public_ip": {
            "type": "boolean",
            "nullable": true,
            "description": "Si la recopilación de IP pública está habilitada"
          },
          "fra_system_actions_role": {
            "type": "string",
            "nullable": true,
            "description": "Rol de acciones del sistema FRA"
          },
          "unified_reporting": {
            "type": "string",
            "nullable": true,
            "description": "Configuración de reporte unificado"
          },
          "unified_operations": {
            "type": "string",
            "nullable": true,
            "description": "Configuración de operaciones unificadas"
          },
          "uninstall_protection": {
            "type": "string",
            "nullable": true,
            "enum": [
              "off",
              "on"
            ],
            "description": "Valores posibles: off, on. Si no hay un estado aplicable, devuelve null."
          },
          "web_apps": {
            "type": "boolean",
            "nullable": true,
            "description": "Si las web apps están habilitadas"
          }
        }
      },
      "ReportingGroupEffectiveAgentSettingsV2": {
        "type": "object",
        "description": "Ajustes efectivos del agente (incluye campos de configuración del producto más sobrescrituras)",
        "properties": {
          "remote_support": {
            "type": "string",
            "nullable": true
          },
          "collect_device_location": {
            "type": "boolean",
            "nullable": true
          },
          "auto_update_agents": {
            "type": "boolean",
            "nullable": true
          },
          "collect_event_logs": {
            "type": "boolean",
            "nullable": true
          },
          "event_log_ids": {
            "type": "string",
            "nullable": true
          },
          "event_logs_recurrence": {
            "type": "number",
            "nullable": true
          },
          "collect_disks": {
            "type": "boolean",
            "nullable": true
          },
          "collect_services": {
            "type": "boolean",
            "nullable": true
          },
          "collect_pnp_events": {
            "type": "boolean",
            "nullable": true
          },
          "collect_public_ip": {
            "type": "boolean",
            "nullable": true
          },
          "fra_system_actions_role": {
            "type": "string",
            "nullable": true
          },
          "unified_reporting": {
            "type": "string",
            "nullable": true
          },
          "uninstall_protection": {
            "type": "string",
            "nullable": true,
            "enum": [
              "off",
              "on"
            ],
            "description": "Valores posibles: off, on. Si no hay un estado aplicable, devuelve null."
          },
          "resources_report_recurrence": {
            "type": "number",
            "nullable": true
          },
          "profile_storage_report_recurrence": {
            "type": "number",
            "nullable": true
          },
          "sync_broker_recurrence": {
            "type": "number",
            "nullable": true
          },
          "detect_new_citrix_subscriptions": {
            "type": "boolean",
            "nullable": true
          },
          "proxy_type": {
            "type": "string",
            "nullable": true
          },
          "can_enable_flexx_agent_per_group": {
            "type": "boolean",
            "nullable": true
          },
          "web_apps": {
            "type": "boolean",
            "nullable": true
          },
          "fra_simplified_security": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CreateRoleRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "Nombre del rol de usuario."
          },
          "permissions": {
            "type": "array",
            "minItems": 1,
            "description": "Entradas de permisos asignadas al rol.",
            "items": {
              "$ref": "#/components/schemas/CreateRolePermissionRequestItemV2"
            }
          }
        },
        "required": [
          "name",
          "permissions"
        ]
      },
      "CreateRolePermissionRequestItemV2": {
        "type": "object",
        "properties": {
          "portal_permission": {
            "type": "string",
            "enum": [
              "admin",
              "organization_admin",
              "organization_admin_read_only",
              "user",
              "platform",
              "l1_support_team",
              "l1_support_team_read_only",
              "l2_support_team",
              "l2_support_team_read_only",
              "l3_engineering_team",
              "l3_engineering_team_read_only",
              "billing"
            ],
            "description": "Nivel de permiso de Portal."
          },
          "workspaces_permission": {
            "type": "string",
            "enum": [
              "no_access",
              "l1_support_team_read_only",
              "l1_support_team",
              "l2_support_team_read_only",
              "l2_support_team",
              "l3_engineering_team_read_only",
              "l3_engineering_team",
              "admin_read_only",
              "admin"
            ],
            "description": "Nivel de permiso de Workspace."
          },
          "analyzer_permission": {
            "type": "string",
            "enum": [
              "no_access",
              "access",
              "admin"
            ],
            "description": "Nivel de permiso de Analyzer."
          },
          "target_organization": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$",
                "minLength": 24,
                "maxLength": 24
              }
            ],
            "description": "Ámbito de organización del permiso: `all` para todas las organizaciones o un `organization_id` específico."
          },
          "target_reporting_groups": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$",
                  "minLength": 24,
                  "maxLength": 24
                }
              }
            ],
            "description": "Ámbito de grupos de reporte del permiso: `all` para todos los grupos o lista de `reporting_group_id` específicos."
          }
        },
        "required": [
          "portal_permission",
          "workspaces_permission",
          "analyzer_permission",
          "target_organization",
          "target_reporting_groups"
        ]
      },
      "RoleV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del rol."
          },
          "name": {
            "type": "string",
            "description": "Nombre del rol."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada a este rol."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo de creación del rol en formato ISO 8601."
          },
          "created_by": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del usuario que creó el rol."
          },
          "permissions": {
            "type": "array",
            "nullable": true,
            "description": "Entradas de permisos configuradas para este rol.",
            "items": {
              "$ref": "#/components/schemas/GetRolePermissionItemV2"
            }
          }
        },
        "required": [
          "id",
          "name",
          "organization_id",
          "created_at",
          "created_by"
        ]
      },
      "GetRolePermissionItemV2": {
        "type": "object",
        "properties": {
          "portal_permission": {
            "type": "string",
            "nullable": true,
            "enum": [
              "admin",
              "organization_admin",
              "organization_admin_read_only",
              "user",
              "platform",
              "l1_support_team",
              "l1_support_team_read_only",
              "l2_support_team",
              "l2_support_team_read_only",
              "l3_engineering_team",
              "l3_engineering_team_read_only",
              "billing"
            ],
            "description": "Nivel de permiso de Portal."
          },
          "workspaces_permission": {
            "type": "string",
            "nullable": true,
            "enum": [
              "no_access",
              "l1_support_team_read_only",
              "l1_support_team",
              "l2_support_team_read_only",
              "l2_support_team",
              "l3_engineering_team_read_only",
              "l3_engineering_team",
              "admin_read_only",
              "admin"
            ],
            "description": "Nivel de permiso de Workspace."
          },
          "analyzer_permission": {
            "type": "string",
            "nullable": true,
            "enum": [
              "no_access",
              "access",
              "admin"
            ],
            "description": "Nivel de permiso de Analyzer."
          },
          "target_organization": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$",
                "minLength": 24,
                "maxLength": 24
              }
            ],
            "description": "Ámbito de organización del permiso: `all` para todas las organizaciones o un `organization_id` específico."
          },
          "target_reporting_groups": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$",
                  "minLength": 24,
                  "maxLength": 24
                }
              }
            ],
            "description": "Ámbito de grupos de reporte del permiso: `all` para todos los grupos o lista de `reporting_group_id` específicos."
          }
        },
        "required": [
          "target_organization",
          "target_reporting_groups"
        ]
      },
      "CreateTenantRequestV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "tenant",
              "organization"
            ],
            "description": "Tipo de creación. `tenant` para END CUSTOMER, `organization` para PARTNER/WHOLESALER."
          },
          "name": {
            "type": "string",
            "maxLength": 512
          },
          "tenant_config": {
            "type": "object",
            "additionalProperties": false,
            "nullable": true,
            "description": "Configuración específica para `type=tenant`.",
            "properties": {
              "product_config_id": {
                "type": "string",
                "maxLength": 24,
                "pattern": "^[0-9a-f]{24}$"
              },
              "analyzer": {
                "type": "string",
                "enum": [
                  "existing",
                  "new"
                ]
              }
            },
            "required": [
              "product_config_id",
              "analyzer"
            ]
          },
          "organization_config": {
            "type": "object",
            "additionalProperties": false,
            "nullable": true,
            "description": "Configuración específica para `type=organization`.",
            "properties": {
              "product_id": {
                "type": "string",
                "maxLength": 24,
                "pattern": "^[0-9a-f]{24}$"
              },
              "region": {
                "type": "string",
                "maxLength": 128
              }
            },
            "required": [
              "product_id",
              "region"
            ]
          },
          "policy_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "organization_email": {
            "type": "string",
            "maxLength": 512
          },
          "organization_language": {
            "type": "string",
            "maxLength": 512
          },
          "organization_country": {
            "type": "string",
            "maxLength": 512
          },
          "organization_industry": {
            "type": "string",
            "maxLength": 512
          }
        },
        "required": [
          "type",
          "name",
          "organization_email",
          "organization_language",
          "organization_country",
          "organization_industry"
        ],
        "description": "Cuerpo único de creación con campos condicionales por `type`: si `type=tenant`, requiere `tenant_config`; si `type=organization`, requiere `organization_config`."
      },
      "TenantByIdV2": {
        "type": "object",
        "required": [
          "id",
          "organization_id",
          "created_at",
          "name",
          "region"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "organization_id": {
            "type": "string",
            "description": "ID de la organización del tenant"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "region": {
            "type": "string"
          },
          "product_id": {
            "type": "string",
            "nullable": true,
            "description": "ID del producto"
          },
          "policy_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de la política"
          }
        }
      },
      "CreateUserRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "Nombre del usuario."
          },
          "surname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "Apellido del usuario."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Dirección de correo electrónico del usuario."
          },
          "language": {
            "type": "string",
            "enum": [
              "en-EN",
              "es-ES",
              "pt-BR",
              "ca-ES",
              "eu-ES"
            ],
            "description": "Codigo de idioma preferido."
          },
          "role_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del rol asignado al usuario."
          },
          "department": {
            "type": "string",
            "nullable": true,
            "description": "Departamento del usuario."
          },
          "email_login_enabled": {
            "type": "boolean",
            "nullable": true,
            "description": "Si el inicio de sesión por correo electrónico está habilitado para el usuario."
          }
        },
        "required": [
          "name",
          "surname",
          "email",
          "language",
          "role_id"
        ]
      },
      "UserByIdV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del usuario."
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociado al usuario."
          },
          "name": {
            "type": "string",
            "description": "Nombre del usuario."
          },
          "surname": {
            "type": "string",
            "description": "Apellido del usuario."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Dirección de correo electrónico del usuario."
          },
          "language": {
            "type": "string",
            "enum": [
              "en-EN",
              "es-ES",
              "pt-BR",
              "ca-ES",
              "eu-ES"
            ],
            "description": "Codigo de idioma preferido para el usuario."
          },
          "created_at": {
            "type": "string",
            "description": "Fecha de creación en formato ISO 8601."
          },
          "department": {
            "type": "string",
            "nullable": true,
            "description": "Departamento del usuario."
          },
          "role_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del rol asignado al usuario."
          },
          "created_by": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del usuario que creo el registro del usuario."
          },
          "email_login_enabled": {
            "type": "boolean",
            "nullable": true,
            "description": "Indica si el inicio de sesión por correo electrónico está habilitado para el usuario."
          }
        },
        "required": [
          "id",
          "name",
          "surname",
          "email",
          "language",
          "created_at"
        ]
      },
      "CreateWorkspaceGroupScheduleRequestV2": {
        "type": "object",
        "properties": {
          "cron_expression": {
            "type": "string",
            "description": "Expresión cron que define cuándo debe ejecutarse la programación. Formato: minuto hora día-del-mes mes día-de-la-semana. Ejemplos: '0 8 * * 1-5' (8 AM en días laborables), '0 0 * * 0' (medianoche del domingo), '30 14 * * *' (2:30 PM diariamente). Día-de-la-semana: 0=domingo, 1=lunes, ..., 6=sábado. Admite rangos (1-5), listas (1,3,5) y comodines (*). Debe ser un formato de expresión cron válido con 5 campos separados por espacios.",
            "example": "0 8 * * 1-5"
          },
          "time_zone": {
            "type": "string",
            "description": "Zona horaria para la ejecución de la programación. Admite identificadores IANA (p. ej., 'America/New_York') y Windows (p. ej., 'Pacific Standard Time').",
            "example": "Eastern Standard Time"
          },
          "type": {
            "type": "string",
            "enum": [
              "start",
              "stop",
              "restart"
            ],
            "description": "Tipo de operación de energía a realizar. START: Enciende los Workspaces del grupo. STOP: Apaga los Workspaces del grupo. RESTART: Reinicia los Workspaces del grupo.",
            "example": "start"
          },
          "intermediate_device": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del Workspace de dispositivo intermedio. Si se proporciona, indica que se debe usar un dispositivo intermedio para operaciones Wake on LAN. Solo aplicable a programaciones START. Se usa para acciones Wake on LAN en redes seguras. El Workspace debe existir y pertenecer a la organización.",
            "example": "507f1f77bcf86cd799439050"
          }
        },
        "required": [
          "cron_expression",
          "time_zone",
          "type"
        ]
      },
      "WorkspaceGroupScheduleV2": {
        "type": "object",
        "required": [
          "id",
          "cron_expression",
          "time_zone",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "description": "El identificador único de la programación",
            "example": "507f1f77bcf86cd799439060"
          },
          "cron_expression": {
            "type": "string",
            "description": "Expresión cron que define cuándo se ejecuta la programación. Formato: minuto hora día-del-mes mes día-de-la-semana.",
            "example": "0 8 * * 1-5"
          },
          "time_zone": {
            "type": "string",
            "description": "Zona horaria para la ejecución de la programación. Admite identificadores IANA (p. ej., 'America/New_York') y Windows (p. ej., 'Pacific Standard Time').",
            "example": "Eastern Standard Time"
          },
          "type": {
            "type": "string",
            "enum": [
              "start",
              "stop",
              "restart"
            ],
            "description": "Tipo de operación de energía: START (enciende), STOP (apaga), RESTART (reinicia Workspaces)"
          },
          "intermediate_device": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "nullable": true,
            "description": "El identificador único del workspace del dispositivo intermedio, si está configurado. Se usa para acciones de Wake on LAN en redes seguras.",
            "example": "507f1f77bcf86cd799439050"
          },
          "created_by": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "nullable": true,
            "description": "ID de usuario que creó la programación",
            "example": "507f1f77bcf86cd799439070"
          }
        }
      },
      "WorkspacegroupsCreateRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 512
          },
          "description": {
            "type": "string",
            "maxLength": 512
          },
          "type": {
            "type": "string",
            "enum": [
              "static"
            ],
            "default": "static"
          },
          "location": {
            "$ref": "#/components/schemas/WorkspaceGroupBaseUpdateLocationInputV2"
          }
        },
        "required": [
          "name"
        ]
      },
      "WorkspaceGroupBaseUpdateLocationInputV2": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number"
          },
          "longitude": {
            "type": "number"
          },
          "address": {
            "type": "string",
            "maxLength": 512
          },
          "description": {
            "type": "string",
            "maxLength": 512
          }
        },
        "required": [
          "latitude",
          "longitude",
          "address"
        ]
      },
      "WorkspaceGroupDetailResponseV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "description": "ID del grupo de workspaces"
          },
          "name": {
            "type": "string",
            "description": "Nombre del grupo de workspaces"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción del grupo de workspaces"
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "description": "Identificador de organización"
          },
          "created_by": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "description": "ID del usuario que creó el grupo de workspaces"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo de creación"
          },
          "type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "static",
              "dynamic",
              "entra_id"
            ],
            "description": "Tipo de grupo de workspaces"
          },
          "filter": {
            "type": "string",
            "nullable": true,
            "description": "Cadena de filtro para grupo de workspaces dinámicos"
          },
          "location": {
            "$ref": "#/components/schemas/WorkspaceLocationV2",
            "nullable": true,
            "description": "Información de ubicación del grupo de workspaces"
          },
          "entra_id_source": {
            "$ref": "#/components/schemas/WorkspaceGroupEntraIdSourceV2",
            "nullable": true,
            "description": "Información de origen de Entra ID para el grupo de workspaces"
          }
        },
        "required": [
          "id",
          "name",
          "organization_id",
          "created_at"
        ]
      },
      "WorkspaceGroupEntraIdSourceV2": {
        "type": "object",
        "properties": {
          "resource_id": {
            "type": "string",
            "description": "ID de recurso de Entra ID"
          },
          "resource_type": {
            "type": "string",
            "enum": [
              "group",
              "administrative_unit"
            ],
            "description": "Tipo de recurso de Entra ID"
          },
          "resource_name": {
            "type": "string",
            "description": "Nombre del recurso de Entra ID"
          }
        },
        "required": [
          "resource_id",
          "resource_type",
          "resource_name"
        ]
      },
      "WorkspaceLocationV2": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "Coordenada de latitud"
          },
          "longitude": {
            "type": "number",
            "description": "Coordenada de longitud"
          },
          "address": {
            "type": "string",
            "description": "Cadena de dirección"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción de la ubicación"
          }
        },
        "required": [
          "latitude",
          "longitude",
          "address"
        ]
      },
      "GetOperationByIdResponseV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la ejecución de operación."
          },
          "name": {
            "type": "string",
            "description": "Nombre de la operación."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización propietaria de la operación."
          },
          "description": {
            "type": "string",
            "description": "Descripción de la operación. Se devuelve cadena vacía cuando no existe en origen."
          },
          "status": {
            "type": "string",
            "enum": [
              "finished",
              "unknown",
              "error",
              "pending",
              "in-progress",
              "timeout",
              "cancelled",
              "scheduled"
            ],
            "description": "Estado actual de la operación."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca temporal de creación."
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de inicio."
          },
          "ended_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de finalización."
          },
          "microservice_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del microservicio relacionado, cuando exista."
          },
          "flow_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del flujo relacionado, cuando exista."
          },
          "remote_support": {
            "$ref": "#/components/schemas/GetOperationByIdRemoteSupportV2"
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "description",
          "status",
          "created_at"
        ]
      },
      "GetOperationByIdRemoteSupportV2": {
        "type": "object",
        "nullable": true,
        "properties": {
          "start_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha de inicio del soporte remoto."
          },
          "end_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha de fin del soporte remoto."
          },
          "type": {
            "type": "string",
            "nullable": true,
            "description": "Tipo de sesión de soporte remoto."
          }
        }
      },
      "GetAuditsResponseV2": {
        "type": "object",
        "required": [
          "has_next",
          "data"
        ],
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "description": "Listado de auditorías.",
            "items": {
              "$ref": "#/components/schemas/AuditItemV2"
            }
          }
        }
      },
      "AuditItemV2": {
        "type": "object",
        "required": [
          "id",
          "audited_at",
          "action",
          "entity_type",
          "entity_id",
          "trigger_type",
          "trigger_id",
          "trigger_name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Identificador de la auditoría.",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24
          },
          "audited_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha en la que se registra la auditoría."
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de la organización asociada al registro.",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24
          },
          "action": {
            "type": "string",
            "description": "Acción auditada.",
            "enum": [
              "insert",
              "update",
              "delete",
              "recover",
              "soft_delete"
            ]
          },
          "entity_type": {
            "type": "string",
            "description": "Tipo de entidad sobre la que se ejecuta la acción."
          },
          "entity_id": {
            "type": "string",
            "description": "Identificador de la entidad afectada."
          },
          "trigger_type": {
            "type": "string",
            "description": "Tipo de actor que desencadena la acción.",
            "enum": [
              "api",
              "user"
            ]
          },
          "trigger_id": {
            "type": "string",
            "description": "Identificador del actor.",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24
          },
          "trigger_name": {
            "type": "string",
            "description": "Nombre visible del actor."
          }
        }
      },
      "ConditionTypeV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay más resultados disponibles en la siguiente página"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConditionTypeV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "ConditionTypeV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "frequency_values": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "value_type": {
            "type": "string"
          },
          "value_placeholder": {
            "type": "string",
            "nullable": true
          },
          "period": {
            "type": "boolean"
          },
          "op_values": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "eq",
                "gt",
                "lt",
                "gte",
                "lte",
                "startsWith",
                "endsWith",
                "contains",
                "at"
              ]
            },
            "description": "Valores de operador permitidos para el value_type de este tipo de condición. Campo calculado basado en value_type: string → [\"eq\", \"startsWith\", \"endsWith\", \"contains\"], int/double → [\"eq\", \"gt\", \"lt\", \"gte\", \"lte\"], id/bool → [\"eq\"], cron → [\"at\"]"
          }
        },
        "required": [
          "id"
        ]
      },
      "ListDigitalActivityCoreProcessGroupCoreProcessesResponseV2": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetDigitalActivityCoreProcessResponseV2"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "GetDigitalActivityCoreProcessResponseV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nombre funcional del proceso core."
          },
          "process_name": {
            "type": "string",
            "description": "Nombre del proceso del sistema operativo."
          }
        },
        "required": [
          "name",
          "process_name"
        ]
      },
      "ListDigitalActivityCoreProcessGroupsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetDigitalActivityCoreProcessGroupResponseV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "ListDigitalActivityCoreProcessMetricsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetDigitalActivityCoreProcessMetricsResponseV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetDigitalActivityCoreProcessMetricsResponseV2": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del workspace."
          },
          "core_process_group_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del grupo de procesos core."
          },
          "reporting_group_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del reporting group asociado."
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada al registro."
          },
          "core_activity_time_hours": {
            "type": "number",
            "description": "Horas de actividad core."
          },
          "reporting_time_hours": {
            "type": "number",
            "description": "Horas de tiempo reportado."
          },
          "opened_session_time_hours": {
            "type": "number",
            "description": "Horas de sesión abierta."
          },
          "user_active_time_hours": {
            "type": "number",
            "description": "Horas de actividad de usuario."
          },
          "month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Mes de la métrica."
          },
          "year": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2100,
            "description": "Año de la métrica."
          },
          "deleted_date": {
            "type": "string",
            "nullable": true,
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Fecha de eliminación del workspace cuando aplica."
          }
        }
      },
      "ListDigitalActivityHybridWorkMetricsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetDigitalActivityHybridWorkMetricsResponseV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetDigitalActivityHybridWorkMetricsResponseV2": {
        "type": "object",
        "properties": {
          "user_name": {
            "type": "string",
            "description": "Identificador legible del usuario en la métrica."
          },
          "office_active_time_hours": {
            "type": "number",
            "description": "Horas de actividad en oficina."
          },
          "remote_active_time_hours": {
            "type": "number",
            "description": "Horas de actividad remota."
          },
          "ambiguous_active_time_hours": {
            "type": "number",
            "description": "Horas de actividad sin clasificación de entorno."
          },
          "total_active_time_hours": {
            "type": "number",
            "description": "Horas totales de actividad."
          },
          "month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Mes de la métrica."
          },
          "year": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2100,
            "description": "Año de la métrica."
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada a la fila."
          }
        }
      },
      "ListDigitalActivityUserMetricsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetDigitalActivityUserMetricsResponseV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetDigitalActivityUserMetricsResponseV2": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del workspace."
          },
          "user_name": {
            "type": "string",
            "description": "Identificador legible del usuario en la métrica."
          },
          "reporting_group_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del reporting group asociado."
          },
          "reporting_time_hours": {
            "type": "number",
            "description": "Horas de tiempo reportado."
          },
          "opened_session_time_hours": {
            "type": "number",
            "description": "Horas de sesión abierta."
          },
          "user_active_time_hours": {
            "type": "number",
            "description": "Horas de actividad del usuario."
          },
          "month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Mes de la métrica."
          },
          "year": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2100,
            "description": "Año de la métrica."
          },
          "deleted_date": {
            "type": "string",
            "nullable": true,
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Fecha de eliminación del workspace cuando aplica."
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada a la fila."
          }
        }
      },
      "ListDigitalActivityWorkspaceMetricsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetDigitalActivityWorkspaceMetricsResponseV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetDigitalActivityWorkspaceMetricsResponseV2": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del workspace."
          },
          "reporting_group_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del reporting group asociado."
          },
          "reporting_time_hours": {
            "type": "number",
            "description": "Horas de tiempo reportado."
          },
          "opened_session_time_hours": {
            "type": "number",
            "description": "Horas de sesión abierta."
          },
          "user_active_time_hours": {
            "type": "number",
            "description": "Horas de actividad del usuario."
          },
          "core_activity_time_hours": {
            "type": "number",
            "nullable": true,
            "description": "Horas de actividad core."
          },
          "month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Mes de la métrica."
          },
          "year": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2100,
            "description": "Año de la métrica."
          },
          "deleted_date": {
            "type": "string",
            "nullable": true,
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Fecha de eliminación del workspace cuando aplica."
          }
        }
      },
      "FlowListItemV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FlowListItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "FlowListItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "session",
              "workspace"
            ]
          },
          "detection_only": {
            "type": "boolean"
          },
          "cooldown_minutes": {
            "type": "number",
            "description": "Tiempo de espera en minutos"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "id"
        ]
      },
      "GetInstalledAppByIdResponseV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la aplicación instalada."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada con la aplicación instalada."
          },
          "name": {
            "type": "string",
            "description": "Nombre de la aplicación instalada."
          },
          "publisher": {
            "type": "string",
            "nullable": true,
            "description": "Proveedor de la aplicación instalada."
          },
          "operating_system": {
            "type": "string",
            "enum": [
              "windows",
              "linux",
              "android",
              "mac_os",
              "chrome_os",
              "other"
            ],
            "description": "Sistema operativo donde se observa la aplicación."
          },
          "notes": {
            "type": "string",
            "description": "Notas asociadas con la aplicación instalada."
          },
          "discovered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca de tiempo del primer descubrimiento."
          },
          "reported_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo del último reporte."
          },
          "installations": {
            "type": "integer",
            "minimum": 0,
            "description": "Número de instalaciones observadas para la aplicación."
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "operating_system",
          "notes",
          "reported_at",
          "installations"
        ]
      },
      "GetInstalledAppVersionsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetInstalledAppVersionsItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetInstalledAppVersionsItemV2": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "nullable": true,
            "description": "Versión de la aplicación instalada."
          },
          "reported_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo del último reporte para esta versión."
          },
          "discovered_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo de la primera observación para esta versión."
          }
        },
        "required": [
          "reported_at",
          "discovered_at"
        ]
      },
      "GetInstalledAppWorkspacesResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetInstalledAppWorkspacesItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetInstalledAppWorkspacesItemV2": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de Workspace."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de organización."
          },
          "version": {
            "type": "string",
            "nullable": true,
            "description": "Versión de la aplicación instalada reportada para el Workspace."
          },
          "reported_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha y hora del último reporte de instalación para el Workspace."
          },
          "install_location": {
            "type": "string",
            "nullable": true,
            "description": "Ruta de instalación reportada para la aplicación en el Workspace."
          },
          "installed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha y hora de instalación reportada para el Workspace."
          }
        },
        "required": [
          "workspace_id",
          "organization_id"
        ]
      },
      "GetInstalledAppsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetInstalledAppsItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetInstalledAppsItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la aplicación instalada."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociado a este elemento de aplicación instalada."
          },
          "name": {
            "type": "string",
            "description": "Nombre de la aplicación instalada."
          },
          "discovered_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca de tiempo del primer descubrimiento."
          },
          "reported_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo del último reporte."
          },
          "operating_system": {
            "type": "string",
            "enum": [
              "windows",
              "linux",
              "android",
              "mac_os",
              "chrome_os",
              "other"
            ],
            "description": "Sistema operativo donde se observa la aplicación."
          },
          "publisher": {
            "type": "string",
            "nullable": true,
            "description": "Publicador de la aplicación."
          },
          "installations": {
            "type": "integer",
            "minimum": 0,
            "description": "Número de instalaciones observadas para la aplicación."
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "reported_at",
          "operating_system",
          "installations"
        ]
      },
      "GetMeResponseV2": {
        "type": "object",
        "properties": {
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización autenticada."
          },
          "token_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la API key autenticada."
          },
          "token_name": {
            "type": "string",
            "nullable": true,
            "description": "Nombre del token autenticado."
          },
          "token_created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creación del token."
          },
          "token_expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de expiración del token."
          }
        },
        "required": [
          "organization_id",
          "token_id",
          "token_name",
          "token_created_at",
          "token_expires_at"
        ]
      },
      "GetMicroserviceByIdResponseV2": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MicroserviceItemV2"
          }
        },
        "required": [
          "data"
        ]
      },
      "MicroserviceItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del microservicio."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada al microservicio."
          },
          "name": {
            "type": "string",
            "description": "Nombre del microservicio resuelto en el idioma solicitado."
          },
          "description": {
            "type": "string",
            "description": "Descripción del microservicio resuelta en el idioma solicitado."
          },
          "category": {
            "type": "string",
            "description": "Categoría del microservicio resuelta en el idioma solicitado."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha y hora de creación del microservicio."
          },
          "archived_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha y hora de archivado, cuando aplique."
          },
          "type": {
            "type": "string",
            "enum": [
              "standard",
              "condition"
            ],
            "nullable": true,
            "description": "Tipo funcional del microservicio."
          },
          "context": {
            "type": "string",
            "nullable": true,
            "description": "Contexto de visibilidad del microservicio."
          },
          "is_ai_enhanced": {
            "type": "boolean",
            "nullable": true,
            "description": "Indica si el microservicio tiene capacidades de IA habilitadas."
          },
          "enabled": {
            "type": "boolean",
            "description": "Indica si el microservicio está habilitado para la organización."
          },
          "enabled_configuration": {
            "type": "object",
            "nullable": true,
            "description": "Configuración habilitada del microservicio para la organización.",
            "properties": {
              "enabled_at": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "Fecha y hora en la que se habilitó la configuración."
              },
              "efficiency": {
                "type": "number",
                "description": "Valor de eficiencia de la configuración habilitada."
              },
              "workspace_group_execution": {
                "type": "string",
                "enum": [
                  "l1",
                  "l2",
                  "l3"
                ],
                "description": "Modo de ejecución por grupos de workspace."
              },
              "individual_execution": {
                "type": "string",
                "enum": [
                  "l1",
                  "l2",
                  "l3"
                ],
                "description": "Modo de ejecución individual."
              },
              "end_user_execution_workspace_group_ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$",
                  "minLength": 24,
                  "maxLength": 24
                },
                "description": "Identificadores de grupos de workspace habilitados para ejecución de usuario final."
              }
            },
            "required": [
              "enabled_at",
              "efficiency",
              "workspace_group_execution",
              "individual_execution",
              "end_user_execution_workspace_group_ids"
            ]
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "description",
          "category",
          "created_at",
          "archived_at",
          "type",
          "context",
          "is_ai_enhanced",
          "enabled",
          "enabled_configuration"
        ]
      },
      "GetMicroservicesResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MicroserviceItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetOperationResultsResponseV2": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetOperationResultItemV2"
            }
          },
          "has_next": {
            "type": "boolean",
            "description": "Indica si existen más resultados en la siguiente página."
          }
        },
        "required": [
          "data",
          "has_next"
        ]
      },
      "GetOperationResultItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del resultado."
          },
          "operation_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la operación asociada."
          },
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del workspace asociado."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociada."
          },
          "status": {
            "type": "string",
            "description": "Estado de ejecución del resultado.",
            "enum": [
              "scheduled",
              "pending",
              "in-progress",
              "completed",
              "error",
              "timeout",
              "cancelled",
              "unknown"
            ]
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Nombre de máquina asociado a la sesión cuando exista."
          },
          "start_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha y hora de inicio de la ejecución."
          },
          "end_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha y hora de fin de la ejecución."
          },
          "script_detail": {
            "type": "string",
            "nullable": true,
            "description": "Detalle de ejecución del script cuando exista."
          },
          "script_duration": {
            "type": "number",
            "nullable": true,
            "description": "Duración del script en segundos cuando exista."
          },
          "script_response": {
            "type": "array",
            "nullable": true,
            "description": "Salida estructurada del script con timestamp y línea.",
            "items": {
              "$ref": "#/components/schemas/GetOperationResultScriptResponseLineV2"
            }
          }
        },
        "required": [
          "id",
          "operation_id",
          "workspace_id",
          "status"
        ]
      },
      "GetOperationResultScriptResponseLineV2": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Timestamp ISO-8601 de la línea o null cuando no esté disponible."
          },
          "line": {
            "type": "string",
            "description": "Contenido de la línea o bloque de salida."
          }
        },
        "required": [
          "timestamp",
          "line"
        ]
      },
      "GetOperationsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si existe una página siguiente."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetOperationItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetOperationItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la ejecución de operación."
          },
          "name": {
            "type": "string",
            "description": "Nombre de la operación."
          },
          "description": {
            "type": "string",
            "description": "Descripción de la operación. Se devuelve cadena vacía cuando no existe en origen."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización propietaria de la operación."
          },
          "status": {
            "type": "string",
            "enum": [
              "finished",
              "unknown",
              "error",
              "pending",
              "in-progress",
              "timeout",
              "cancelled",
              "scheduled"
            ],
            "description": "Estado actual de la operación."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca temporal de creación."
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de inicio."
          },
          "ended_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de finalización."
          },
          "microservice_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del microservicio relacionado, cuando exista."
          },
          "flow_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del flujo relacionado, cuando exista."
          },
          "remote_support": {
            "$ref": "#/components/schemas/GetOperationRemoteSupportV2"
          }
        },
        "required": [
          "id",
          "organization_id",
          "name",
          "description",
          "status",
          "created_at"
        ]
      },
      "GetOperationRemoteSupportV2": {
        "type": "object",
        "nullable": true,
        "properties": {
          "start_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha de inicio del soporte remoto."
          },
          "end_date": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Fecha de fin del soporte remoto."
          },
          "type": {
            "type": "string",
            "nullable": true,
            "description": "Tipo de sesión de soporte remoto."
          }
        }
      },
      "GetOrganizationEntityLimitsResponseV2": {
        "type": "object",
        "properties": {
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización a la que aplican los límites."
          },
          "limits": {
            "$ref": "#/components/schemas/OrganizationEntityLimitsV2"
          }
        },
        "required": [
          "organization_id",
          "limits"
        ]
      },
      "OrganizationEntityLimitsV2": {
        "type": "object",
        "properties": {
          "tenants": {
            "type": "integer",
            "minimum": 1
          },
          "reporting_groups": {
            "type": "integer",
            "minimum": 1
          },
          "workspace_groups": {
            "type": "integer",
            "minimum": 1
          },
          "workspace_group_schedules_per_group": {
            "type": "integer",
            "minimum": 1
          },
          "flows": {
            "type": "integer",
            "minimum": 1
          },
          "microservices": {
            "type": "integer",
            "minimum": 1
          },
          "reports": {
            "type": "integer",
            "minimum": 1
          },
          "webapps": {
            "type": "integer",
            "minimum": 1
          },
          "webhooks": {
            "type": "integer",
            "minimum": 1
          },
          "licenses": {
            "type": "integer",
            "minimum": 1
          },
          "alert_settings": {
            "type": "integer",
            "minimum": 1
          },
          "roles": {
            "type": "integer",
            "minimum": 1
          },
          "users": {
            "type": "integer",
            "minimum": 1
          },
          "patching_policies": {
            "type": "integer",
            "minimum": 1
          },
          "patching_targets": {
            "type": "integer",
            "minimum": 1
          },
          "policies": {
            "type": "integer",
            "minimum": 1
          },
          "microservice_categories": {
            "type": "integer",
            "minimum": 1
          },
          "domains": {
            "type": "integer",
            "minimum": 1
          },
          "sso_integrations": {
            "type": "integer",
            "minimum": 1
          },
          "product_configs": {
            "type": "integer",
            "minimum": 1
          },
          "modules": {
            "type": "integer",
            "minimum": 1
          },
          "api_keys": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "tenants",
          "reporting_groups",
          "workspace_groups",
          "workspace_group_schedules_per_group",
          "flows",
          "microservices",
          "reports",
          "webapps",
          "webhooks",
          "licenses",
          "alert_settings",
          "roles",
          "users",
          "patching_policies",
          "patching_targets",
          "policies",
          "microservice_categories",
          "domains",
          "sso_integrations",
          "product_configs",
          "modules",
          "api_keys"
        ]
      },
      "PatchPolicyTargetV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay más resultados disponibles en la siguiente página"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PatchPolicyTargetV2"
            },
            "description": "Arreglo de objetos de objetivo de política de parches"
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "PatchPolicyTargetV2": {
        "type": "object",
        "description": "Recurso de objetivo de política de parches",
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "El identificador único del objetivo de política de parches",
            "example": "66ab6cf4d4d2e709bafd404c"
          },
          "name": {
            "type": "string",
            "description": "Nombre del objetivo de política de parches",
            "example": "Base"
          },
          "created_by": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "ID de usuario que creó el objetivo de política de parches",
            "example": "6439606652fc0c0051f1787b"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha y hora de creación del objetivo de política de parches (datetime ISO 8601)",
            "example": "2024-08-01T11:09:40.719Z"
          },
          "timezone": {
            "type": "string",
            "description": "Zona horaria para la programación de la política de parches. Identificador de zona horaria IANA o nombre de zona horaria de Windows.",
            "example": "UTC"
          },
          "should_restart": {
            "type": "boolean",
            "description": "Si se deben reiniciar los Workspaces después del parcheo",
            "example": true
          },
          "wake_on_lan": {
            "type": "boolean",
            "description": "Si se debe usar Wake on LAN para el parcheo",
            "example": true
          },
          "force_patching_configuration": {
            "type": "boolean",
            "description": "Si se debe forzar la configuración de parcheo",
            "example": false
          },
          "is_in_maintenance": {
            "type": "boolean",
            "description": "Si el objetivo de política de parches está actualmente en modo de mantenimiento",
            "example": false
          },
          "weeks": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 4
            },
            "description": "Arreglo de números de semana (1-4) en los que debe ocurrir el parcheo",
            "example": [
              1,
              2
            ]
          },
          "schedule": {
            "type": "object",
            "description": "Programación que define cuándo ocurre el parcheo. Las claves son nombres de días (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY). Los valores son objetos vacíos u objetos con claves de hora (como cadenas) que contienen arreglos de números de minuto.",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 59
                }
              }
            },
            "example": {
              "MONDAY": {},
              "TUESDAY": {},
              "WEDNESDAY": {},
              "THURSDAY": {
                "9": [
                  15,
                  30,
                  45
                ],
                "10": [
                  0,
                  15,
                  30,
                  45
                ],
                "11": [
                  0,
                  15,
                  30,
                  45
                ]
              },
              "FRIDAY": {},
              "SATURDAY": {},
              "SUNDAY": {}
            }
          },
          "patch_policy_target_type": {
            "type": "string",
            "enum": [
              "windows",
              "linux",
              null
            ],
            "nullable": true,
            "description": "Tipo de objetivo de política de parches ('windows', 'linux' o null).",
            "example": "windows"
          },
          "patch_policy_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "nullable": true,
            "description": "El identificador único de la política de parches asociada. Null si no hay una política de parches asignada.",
            "example": "507f1f77bcf86cd799439011"
          }
        },
        "required": [
          "id"
        ]
      },
      "ProductConfigV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay más páginas disponibles"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductConfigV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "ProductConfigV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Identificador único de la configuración de producto",
            "example": "507f1f77bcf86cd799439011"
          },
          "environment": {
            "type": "string",
            "description": "Tipo de entorno para la configuración de producto (p. ej., PRODUCTION, STAGING, DEVELOPMENT)",
            "example": "PRODUCTION"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha y hora de creación de la configuración de producto (fecha y hora ISO 8601)",
            "example": "2024-01-15T10:30:00.000Z"
          },
          "active": {
            "type": "boolean",
            "description": "Indica si la configuración de producto está activa.",
            "example": true
          },
          "product_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Identificador único del producto asociado con esta configuración",
            "example": "507f1f77bcf86cd799439001"
          },
          "region": {
            "type": "string",
            "nullable": true,
            "description": "Nombre de la región donde se despliega la configuración de producto. Nulo si no hay región asignada.",
            "example": "us-east"
          }
        },
        "required": [
          "id"
        ]
      },
      "GetReportingGroupAgentVersionsCatalogResponseV2": {
        "type": "object",
        "properties": {
          "windows_cp": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "windows": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "macos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "linux": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "windows_cp",
          "windows",
          "macos",
          "linux"
        ]
      },
      "GetReportingGroupAgentVersionsResponseV2": {
        "type": "object",
        "properties": {
          "agent_auto_update": {
            "type": "boolean"
          },
          "versions": {
            "$ref": "#/components/schemas/ReportingGroupAgentVersionsV2"
          }
        },
        "required": [
          "agent_auto_update",
          "versions"
        ]
      },
      "ReportingGroupAgentVersionsV2": {
        "type": "object",
        "properties": {
          "windows_cp": {
            "$ref": "#/components/schemas/ReportingGroupAgentVersionChannelPairV2"
          },
          "windows": {
            "$ref": "#/components/schemas/ReportingGroupAgentVersionChannelPairV2"
          },
          "macos": {
            "$ref": "#/components/schemas/ReportingGroupAgentVersionChannelPairV2"
          },
          "linux": {
            "$ref": "#/components/schemas/ReportingGroupAgentVersionChannelPairV2"
          }
        },
        "required": [
          "windows_cp",
          "windows",
          "macos",
          "linux"
        ]
      },
      "ReportingGroupAgentVersionChannelPairV2": {
        "type": "object",
        "properties": {
          "early": {
            "type": "string"
          },
          "production": {
            "type": "string"
          }
        },
        "required": [
          "early",
          "production"
        ]
      },
      "ReportingGroupListItemV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReportingGroupListItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "ReportingGroupListItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID del grupo de reporte"
          },
          "name": {
            "type": "string",
            "description": "Nombre del grupo de reporte"
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de organización"
          },
          "product_config_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de configuración de producto"
          },
          "fishing_pattern": {
            "type": "string",
            "nullable": true,
            "description": "Nombre del patrón de fishing"
          },
          "fishing_pattern_field": {
            "type": "string",
            "enum": [
              "full_name",
              "description",
              "ou",
              "current_subnet"
            ],
            "nullable": true,
            "description": "Campo sobre el que se aplica fishing_pattern. Valores posibles: full_name, description, ou, current_subnet."
          },
          "patch_policy_target_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de patch policy target"
          },
          "policy_reporting_group": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de policy reporting group"
          },
          "overridden_agent_settings": {
            "$ref": "#/components/schemas/ReportingGroupAgentSettingsV2",
            "nullable": true,
            "description": "Configuración del agente sobrescrita a nivel de grupo de reporte"
          },
          "effective_agent_settings": {
            "$ref": "#/components/schemas/ReportingGroupEffectiveAgentSettingsV2",
            "nullable": true,
            "description": "Configuración efectiva del agente"
          },
          "execute_flexx_analyzer_agent": {
            "type": "boolean",
            "description": "Si la ejecución del agente FlexxAnalyzer está habilitada"
          },
          "can_manage_agent_versions": {
            "type": "boolean",
            "description": "Indica si el grupo de reporte permite la autogestión de versiones de agente según su configuración de producto asociada"
          },
          "flexx_agent_portal_download": {
            "type": "boolean",
            "description": "Si la descarga de FlexxAgent desde el portal está habilitada para la organización del grupo"
          },
          "intermediate_device_1_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de Workspace del primer dispositivo intermedio"
          },
          "intermediate_device_2_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de Workspace del segundo dispositivo intermedio"
          },
          "intermediate_device_3_id": {
            "type": "string",
            "nullable": true,
            "description": "ID de Workspace del tercer dispositivo intermedio"
          }
        },
        "required": [
          "id"
        ]
      },
      "GetReportingGroupMonthlyReportResponseV2": {
        "type": "object",
        "description": "Reporte mensual de soporte de un grupo de reporte.",
        "properties": {
          "reporting_group_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del grupo de reporte."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización."
          },
          "period_year": {
            "type": "integer",
            "minimum": 1,
            "description": "Ano del reporte."
          },
          "period_month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Mes del reporte."
          },
          "applied_patches": {
            "type": "integer",
            "description": "Número de parches aplicados."
          },
          "critical_patches": {
            "type": "integer",
            "description": "Número de parches criticos."
          },
          "security_patches": {
            "type": "integer",
            "description": "Número de parches de seguridad."
          },
          "other_patches": {
            "type": "integer",
            "description": "Número de otros parches."
          },
          "total_used_apps": {
            "type": "integer",
            "description": "Cantidad total de aplicaciones usadas en el periodo."
          },
          "top_apps": {
            "type": "array",
            "description": "Aplicaciones mas usadas en el periodo.",
            "items": {
              "$ref": "#/components/schemas/ReportingGroupMonthlyTopAppV2"
            }
          },
          "automatic_remediations": {
            "$ref": "#/components/schemas/ReportingGroupMonthlyAutomaticRemediationsV2"
          },
          "current_reporting_group_name": {
            "type": "string",
            "description": "Nombre actual del grupo de reporte."
          },
          "current_total_workspaces": {
            "type": "integer",
            "description": "Total actual de workspaces del grupo."
          },
          "current_total_workspace_users": {
            "type": "integer",
            "description": "Total actual de usuarios en workspaces del grupo."
          },
          "current_workspace_antivirus_statistics": {
            "$ref": "#/components/schemas/ReportingGroupMonthlyCurrentWorkspaceAntivirusStatisticsV2"
          }
        },
        "required": [
          "reporting_group_id",
          "organization_id",
          "period_year",
          "period_month",
          "applied_patches",
          "critical_patches",
          "security_patches",
          "other_patches",
          "total_used_apps",
          "top_apps",
          "automatic_remediations",
          "current_reporting_group_name",
          "current_total_workspaces",
          "current_total_workspace_users",
          "current_workspace_antivirus_statistics"
        ]
      },
      "ReportingGroupMonthlyTopAppV2": {
        "type": "object",
        "description": "aplicación y número de dias de uso durante el periodo.",
        "properties": {
          "app_name": {
            "type": "string",
            "description": "Nombre de la aplicación."
          },
          "usage_days": {
            "type": "integer",
            "description": "Dias de uso de la aplicación."
          }
        },
        "required": [
          "app_name",
          "usage_days"
        ]
      },
      "ReportingGroupMonthlyAutomaticRemediationsV2": {
        "type": "object",
        "description": "Conteo de remediaciones automaticas.",
        "properties": {
          "microservices": {
            "type": "integer",
            "description": "Cantidad de remediaciones por microservicios."
          },
          "flows": {
            "type": "integer",
            "description": "Cantidad de remediaciones por flujos."
          }
        },
        "required": [
          "microservices",
          "flows"
        ]
      },
      "ReportingGroupMonthlyCurrentWorkspaceAntivirusStatisticsV2": {
        "type": "object",
        "description": "Estado actual de antivirus en workspaces del grupo.",
        "properties": {
          "workspaces_without_antivirus": {
            "type": "integer",
            "description": "Cantidad de workspaces sin antivirus."
          },
          "workspaces_with_antivirus": {
            "$ref": "#/components/schemas/ReportingGroupMonthlyWorkspacesWithAntivirusV2"
          }
        },
        "required": [
          "workspaces_without_antivirus",
          "workspaces_with_antivirus"
        ]
      },
      "ReportingGroupMonthlyWorkspacesWithAntivirusV2": {
        "type": "object",
        "description": "Resumen de workspaces con antivirus.",
        "properties": {
          "total": {
            "type": "integer",
            "description": "Total de workspaces con antivirus."
          },
          "by_status": {
            "$ref": "#/components/schemas/ReportingGroupMonthlyWorkspacesWithAntivirusByStatusV2"
          }
        },
        "required": [
          "total",
          "by_status"
        ]
      },
      "ReportingGroupMonthlyWorkspacesWithAntivirusByStatusV2": {
        "type": "object",
        "description": "Distribucion por estado de antivirus.",
        "properties": {
          "unknown": {
            "type": "integer",
            "description": "Workspaces con estado desconocido."
          },
          "not_installed": {
            "type": "integer",
            "description": "Workspaces con antivirus no instalado."
          },
          "installed_stopped": {
            "type": "integer",
            "description": "Workspaces con antivirus instalado y detenido."
          },
          "installed_working": {
            "type": "integer",
            "description": "Workspaces con antivirus instalado y operativo."
          }
        },
        "required": [
          "unknown",
          "not_installed",
          "installed_stopped",
          "installed_working"
        ]
      },
      "GetRolesResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoleV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetSessionByIdResponseV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",
            "minLength": 36,
            "maxLength": 36,
            "description": "Identificador de la sesión."
          },
          "user_name": {
            "type": "string",
            "description": "Cuenta de usuario para la sesión."
          },
          "session_type": {
            "type": "string",
            "enum": [
              "vdi_desktop",
              "application",
              "sdi_desktop",
              "device"
            ],
            "description": "Tipo de sesión."
          },
          "windows_session_id": {
            "type": "integer",
            "description": "Identificador de sesión de Windows."
          },
          "connection_state": {
            "type": "string",
            "enum": [
              "unknown",
              "connected",
              "disconnected",
              "terminated",
              "preparing_session",
              "active",
              "reconnecting",
              "non_broker_session",
              "other",
              "pending"
            ],
            "description": "Estado de conexión de la sesión."
          },
          "start_date": {
            "type": "string",
            "description": "Marca de tiempo de inicio de la sesión."
          },
          "session_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "empty",
              "active_notifications",
              "active_notifications_ack_accepted",
              "active_notifications_ack_pending"
            ],
            "description": "Estado de la sesión."
          },
          "platform_type": {
            "type": "string",
            "enum": [
              "windows",
              "mac",
              "linux",
              "android",
              "chrome_os",
              "unknown"
            ],
            "description": "Tipo de plataforma."
          },
          "connected": {
            "type": "boolean",
            "description": "Indica si la sesión esta conectada actualmente."
          },
          "current_session_id": {
            "type": "integer",
            "description": "Identificador actual de la sesión de conexión."
          },
          "current_dc_name": {
            "type": "string",
            "description": "Nombre actual del centro de datos."
          },
          "last_connection_time": {
            "type": "string",
            "description": "Cadena de marca de tiempo de la última conexión."
          },
          "log_on_duration": {
            "type": "number",
            "description": "Duración de inicio de sesión."
          },
          "session_key": {
            "type": "string",
            "format": "uuid",
            "pattern": "^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",
            "minLength": 36,
            "maxLength": 36,
            "description": "Clave de sesión."
          },
          "flexx_analyzer_executed": {
            "type": "boolean",
            "description": "Indica si la ejecucion del analizador se ha completado."
          },
          "cpu_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de CPU."
          },
          "ram_usage_gb": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de RAM en gigabytes."
          },
          "rtt_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de RTT."
          },
          "current_uid_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de UID."
          },
          "ram_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de RAM."
          },
          "ram_percentage": {
            "type": "number",
            "nullable": true,
            "description": "Porcentaje actual de uso de RAM."
          },
          "number_alerts_user": {
            "type": "number",
            "nullable": true,
            "description": "Número de alertas de usuario."
          },
          "number_alerts_vm": {
            "type": "number",
            "nullable": true,
            "description": "Número de alertas de Workspace."
          },
          "workspace_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador MongoDB (_id) del Workspace relacionado con la sesión, resuelto a partir de la relación de sesión."
          }
        },
        "required": [
          "id",
          "user_name",
          "session_type",
          "windows_session_id",
          "connection_state",
          "start_date",
          "current_session_id",
          "current_dc_name",
          "last_connection_time",
          "log_on_duration",
          "session_key",
          "connected",
          "flexx_analyzer_executed"
        ]
      },
      "GetSessionsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetSessionItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetSessionItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",
            "minLength": 36,
            "maxLength": 36,
            "description": "Identificador de la sesión."
          },
          "user_name": {
            "type": "string",
            "description": "Cuenta de usuario de la sesión."
          },
          "session_type": {
            "type": "string",
            "enum": [
              "vdi_desktop",
              "application",
              "sdi_desktop",
              "device"
            ],
            "description": "Tipo de sesión."
          },
          "windows_session_id": {
            "type": "integer",
            "description": "Identificador de sesión de Windows."
          },
          "connection_state": {
            "type": "string",
            "enum": [
              "unknown",
              "connected",
              "disconnected",
              "terminated",
              "preparing_session",
              "active",
              "reconnecting",
              "non_broker_session",
              "other",
              "pending"
            ],
            "description": "Estado de conexión de la sesión."
          },
          "start_date": {
            "type": "string",
            "description": "Marca de tiempo de inicio de la sesión."
          },
          "cpu_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de CPU."
          },
          "ram_usage_gb": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de RAM en gigabytes."
          },
          "rtt_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de RTT."
          },
          "session_status": {
            "type": "string",
            "description": "Estado de la sesión."
          },
          "platform_type": {
            "type": "string",
            "enum": [
              "windows",
              "mac",
              "linux",
              "android",
              "chrome_os",
              "unknown"
            ],
            "description": "Tipo de plataforma."
          },
          "connected": {
            "type": "boolean",
            "description": "Indicador de conexión actual."
          },
          "current_session_id": {
            "type": "integer",
            "description": "Identificador de sesión de conexión actual."
          },
          "current_dc_name": {
            "type": "string",
            "description": "Nombre actual del centro de datos."
          },
          "current_uid_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de UID."
          },
          "flexx_analyzer_executed": {
            "type": "boolean",
            "description": "Si la ejecución del analizador ha finalizado."
          },
          "last_connection_time": {
            "type": "string",
            "description": "Cadena de marca de tiempo de la última conexión."
          },
          "log_on_duration": {
            "type": "number",
            "description": "Duración de inicio de sesión."
          },
          "number_alerts_user": {
            "type": "number",
            "nullable": true,
            "description": "Número de alertas de usuario."
          },
          "number_alerts_vm": {
            "type": "number",
            "nullable": true,
            "description": "Número de alertas de Workspace."
          },
          "ram_usage": {
            "type": "number",
            "nullable": true,
            "description": "Uso actual de RAM."
          },
          "ram_percentage": {
            "type": "number",
            "nullable": true,
            "description": "Porcentaje actual de uso de RAM."
          },
          "session_key": {
            "type": "string",
            "format": "uuid",
            "pattern": "^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$",
            "minLength": 36,
            "maxLength": 36,
            "description": "Clave de sesión."
          },
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador MongoDB (_id) del Workspace asociado con la sesión, resuelto a partir de la relación de sesión."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la organización asociado con la sesión."
          }
        },
        "required": [
          "id",
          "user_name",
          "session_type",
          "windows_session_id",
          "connection_state",
          "start_date",
          "cpu_usage",
          "ram_usage_gb",
          "rtt_usage",
          "session_status",
          "platform_type",
          "connected",
          "current_session_id",
          "current_dc_name",
          "current_uid_usage",
          "flexx_analyzer_executed",
          "last_connection_time",
          "log_on_duration",
          "number_alerts_user",
          "number_alerts_vm",
          "ram_usage",
          "ram_percentage",
          "session_key",
          "workspace_id",
          "organization_id"
        ]
      },
      "TenantListItemV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay mas páginas disponibles"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TenantListItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "TenantListItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID del tenant"
          },
          "organization_id": {
            "type": "string",
            "description": "ID de la organización del tenant"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha de creación (fecha y hora ISO 8601)"
          },
          "name": {
            "type": "string",
            "description": "Nombre del tenant"
          },
          "region": {
            "type": "string",
            "description": "Región/ID de región"
          },
          "product_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador del producto (nullable si el tenant no tiene producto asignado)"
          },
          "policy_id": {
            "type": "string",
            "nullable": true,
            "description": "Identificador de la política (nullable si el tenant no tiene política asignada)"
          }
        },
        "required": [
          "id"
        ]
      },
      "GetUsersResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserByIdV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "WorkspacePublicV2": {
        "type": "object",
        "description": "Recurso Workspace.",
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "related_environment": {
            "type": "string",
            "nullable": true
          },
          "operating_system": {
            "type": "string",
            "nullable": true
          },
          "serial_number": {
            "type": "string",
            "nullable": true
          },
          "ip_address": {
            "type": "string",
            "nullable": true
          },
          "os_update_num_pending": {
            "type": "number",
            "nullable": true
          },
          "reporting_group_id": {
            "type": "string",
            "nullable": true
          },
          "flxmid": {
            "type": "string",
            "nullable": true
          },
          "os_update_num_days_since_last": {
            "type": "number",
            "nullable": true
          },
          "total_ram": {
            "type": "number",
            "nullable": true
          },
          "altitude": {
            "type": "number",
            "nullable": true
          },
          "antivirus": {
            "type": "string",
            "nullable": true
          },
          "antivirus_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "not_installed",
              "installed_stopped",
              "installed_working"
            ],
            "description": "Estado del antivirus."
          },
          "bios_manufacturer": {
            "type": "string",
            "nullable": true
          },
          "bios_mode": {
            "type": "string",
            "nullable": true
          },
          "bios_version": {
            "type": "string",
            "nullable": true
          },
          "bios_smbversion": {
            "type": "string",
            "nullable": true
          },
          "bios_serialnumber": {
            "type": "string",
            "nullable": true
          },
          "base_board_manufacturer": {
            "type": "string",
            "nullable": true
          },
          "base_board_product": {
            "type": "string",
            "nullable": true
          },
          "base_board_version": {
            "type": "string",
            "nullable": true
          },
          "broker": {
            "type": "string",
            "nullable": true,
            "enum": [
              "no_broker_detected",
              "azure_virtual_desktop",
              "citrix_on-premises",
              "citrix_daas",
              "amazon_workspaces",
              "vmware_horizon",
              "parallels_ras",
              "windows_365",
              "rdsh",
              "uds",
              "unknown"
            ],
            "description": "Tipo de broker."
          },
          "public_ip_city": {
            "type": "string",
            "nullable": true
          },
          "flexxagent_version": {
            "type": "string",
            "nullable": true
          },
          "compliance_result": {
            "type": "string",
            "nullable": true,
            "enum": [
              "not_evaluated",
              "compliant",
              "not_compliant"
            ],
            "description": "Resultado de cumplimiento."
          },
          "compliance_last_execution": {
            "type": "string",
            "nullable": true
          },
          "domain_name": {
            "type": "string",
            "nullable": true
          },
          "public_ip_country": {
            "type": "string",
            "nullable": true
          },
          "cores_count": {
            "type": "string",
            "nullable": true
          },
          "edr_active_detections": {
            "type": "boolean",
            "nullable": true
          },
          "edr_host_id": {
            "type": "string",
            "nullable": true
          },
          "edr_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "not_installed",
              "installed_stopped",
              "installed_working"
            ],
            "description": "Estado del agente EDR."
          },
          "edr_version": {
            "type": "string",
            "nullable": true
          },
          "current_subnet": {
            "type": "string",
            "nullable": true
          },
          "default_gateway": {
            "type": "string",
            "nullable": true
          },
          "device_kind": {
            "type": "string",
            "nullable": true,
            "enum": [
              "virtual",
              "physical"
            ],
            "description": "Tipo de dispositivo (Virtual/Físico)."
          },
          "edr": {
            "type": "string",
            "nullable": true
          },
          "ema_agent_version": {
            "type": "string",
            "nullable": true
          },
          "ema_endpoint_id": {
            "type": "string",
            "nullable": true
          },
          "embedded_controller_version": {
            "type": "string",
            "nullable": true
          },
          "os_fast_startup": {
            "type": "boolean",
            "nullable": true
          },
          "flexxanalyzer_config": {
            "type": "string",
            "nullable": true,
            "enum": [
              "not_configured",
              "disabled_in_workspace",
              "configured",
              "installed",
              "not_compatible"
            ],
            "description": "Configuración de FlexxAnalyzer."
          },
          "flexxanalyzer_version": {
            "type": "string",
            "nullable": true
          },
          "hypervisor": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "physical",
              "microsoft_azure",
              "microsoft_hyper-v",
              "vmware_vsphere",
              "amazon_web_services",
              "nutanix",
              "citrix_hypervisor",
              "oracle_cloud",
              "google_cloud"
            ],
            "description": "Tipo de hipervisor."
          },
          "ip_version": {
            "type": "string",
            "nullable": true
          },
          "public_ip_isp": {
            "type": "string",
            "nullable": true
          },
          "iot_hub_config_sync_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "does_not_apply",
              "synced",
              "unsynced"
            ],
            "description": "Estado de sincronización de configuración de IoT Hub."
          },
          "is_amt_supported": {
            "type": "boolean",
            "nullable": true
          },
          "is_laptop": {
            "type": "boolean",
            "nullable": true
          },
          "is_physical": {
            "type": "boolean",
            "nullable": true
          },
          "last_boot_duration": {
            "type": "number",
            "nullable": true
          },
          "last_restart_time": {
            "type": "string",
            "nullable": true
          },
          "last_time": {
            "type": "string",
            "nullable": true
          },
          "last_windows_update": {
            "type": "string",
            "nullable": true
          },
          "last_autorepair": {
            "type": "string",
            "nullable": true
          },
          "latitude": {
            "type": "number",
            "nullable": true
          },
          "locale": {
            "type": "string",
            "nullable": true
          },
          "longitude": {
            "type": "number",
            "nullable": true
          },
          "mac_address": {
            "type": "string",
            "nullable": true
          },
          "network_interface_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "ethernet",
              "wifi",
              "mobile_network",
              "other"
            ],
            "description": "Tipo de interfaz de red."
          },
          "os_build_number": {
            "type": "string",
            "nullable": true
          },
          "os_manufacturer": {
            "type": "string",
            "nullable": true
          },
          "os_version": {
            "type": "string",
            "nullable": true
          },
          "ou": {
            "type": "string",
            "nullable": true
          },
          "os_page_file": {
            "type": "string",
            "nullable": true
          },
          "os_page_file_space": {
            "type": "number",
            "nullable": true
          },
          "platform_role": {
            "type": "string",
            "nullable": true
          },
          "platform_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "windows",
              "mac",
              "android",
              "linux",
              "chromebook",
              "ios",
              "unknown"
            ],
            "description": "Tipo de plataforma."
          },
          "processor": {
            "type": "string",
            "nullable": true
          },
          "public_ip": {
            "type": "string",
            "nullable": true
          },
          "os_reboot_pending": {
            "type": "boolean",
            "nullable": true
          },
          "secure_boot_state": {
            "type": "string",
            "nullable": true
          },
          "system_model": {
            "type": "string",
            "nullable": true
          },
          "system_type": {
            "type": "string",
            "nullable": true
          },
          "os_time_zone": {
            "type": "string",
            "nullable": true
          },
          "user_name": {
            "type": "string",
            "nullable": true
          },
          "vm_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "hidden",
              "workspace_or_avd_session_host",
              "desktop_template_definition",
              "vcc_role",
              "template_definition_surrogate",
              "workspace",
              "server",
              "vdi_appliance",
              "application_template_definition",
              "application_server",
              "endpoint"
            ],
            "description": "Tipo de VM."
          },
          "windows_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "workstation",
              "domain_controller",
              "server"
            ],
            "description": "Tipo de Windows."
          },
          "created_at": {
            "type": "string",
            "nullable": true
          },
          "last_deregistration_time": {
            "type": "string",
            "nullable": true
          },
          "delete_scheduled_at": {
            "type": "string",
            "nullable": true
          },
          "encrypted_harddisks": {
            "type": "string",
            "nullable": true,
            "enum": [
              "no",
              "yes",
              "partial",
              "na"
            ],
            "description": "Estado de cifrado del disco duro."
          },
          "custom_field_01": {
            "type": "string",
            "nullable": true
          },
          "custom_field_02": {
            "type": "string",
            "nullable": true
          },
          "custom_field_03": {
            "type": "string",
            "nullable": true
          },
          "custom_field_04": {
            "type": "string",
            "nullable": true
          },
          "custom_field_05": {
            "type": "string",
            "nullable": true
          },
          "custom_field_06": {
            "type": "string",
            "nullable": true
          },
          "custom_field_07": {
            "type": "string",
            "nullable": true
          },
          "custom_field_08": {
            "type": "string",
            "nullable": true
          },
          "custom_field_09": {
            "type": "string",
            "nullable": true
          },
          "custom_field_10": {
            "type": "string",
            "nullable": true
          },
          "flexxagent_type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unified",
              "mac",
              "linux",
              "universal"
            ],
            "description": "Tipo de FlexxAgent."
          },
          "antivirus_version_number": {
            "type": "string",
            "nullable": true
          },
          "related_location": {
            "type": "string",
            "nullable": true
          },
          "area": {
            "type": "string",
            "nullable": true
          },
          "custom_field_11": {
            "type": "string",
            "nullable": true
          },
          "custom_field_12": {
            "type": "string",
            "nullable": true
          },
          "custom_field_13": {
            "type": "string",
            "nullable": true
          },
          "custom_field_14": {
            "type": "string",
            "nullable": true
          },
          "custom_field_15": {
            "type": "string",
            "nullable": true
          },
          "custom_field_16": {
            "type": "string",
            "nullable": true
          },
          "custom_field_17": {
            "type": "string",
            "nullable": true
          },
          "custom_field_18": {
            "type": "string",
            "nullable": true
          },
          "custom_field_19": {
            "type": "string",
            "nullable": true
          },
          "custom_field_20": {
            "type": "string",
            "nullable": true
          },
          "department": {
            "type": "string",
            "nullable": true
          },
          "office": {
            "type": "string",
            "nullable": true
          },
          "last_custom_fields_update": {
            "type": "string",
            "nullable": true
          },
          "workspace_id": {
            "type": "string",
            "nullable": true,
            "minLength": 25,
            "pattern": "^[0-9a-f]{25,}$"
          },
          "flexxanalyzer_proxy_uri": {
            "type": "string",
            "nullable": true
          },
          "iot_hub_name": {
            "type": "string",
            "nullable": true
          },
          "flexxagent_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unknown",
              "working",
              "stopped",
              "not_reporting",
              "service_stopped",
              "service_disabled",
              "communication_error",
              "other_error",
              "not_installed",
              "update_requested",
              "updating",
              "update_error"
            ],
            "description": "Estado del FlexxAgent / cliente VDI."
          },
          "boot_hard_disk_used_percentage": {
            "type": "number",
            "nullable": true
          },
          "last_connection_time": {
            "type": "string",
            "nullable": true
          },
          "network_signal": {
            "type": "number",
            "nullable": true
          },
          "num_alerts": {
            "type": "number",
            "nullable": true
          },
          "percent_cpu": {
            "type": "number",
            "nullable": true,
            "description": "Uso de CPU del Workspace en porcentaje."
          },
          "percent_ram": {
            "type": "number",
            "nullable": true
          },
          "power_state": {
            "type": "string",
            "nullable": true,
            "enum": [
              "unmanaged",
              "unknown",
              "dev_express",
              "off",
              "on",
              "suspended",
              "turning_on",
              "turning_off",
              "suspending",
              "resuming",
              "non_reporting"
            ],
            "description": "Estado de energía."
          },
          "sessions_count": {
            "type": "number",
            "nullable": true
          },
          "used_system_disk_c": {
            "type": "number",
            "nullable": true
          },
          "wake_on_lan_mac": {
            "type": "string",
            "nullable": true
          },
          "wake_on_lan_subnet": {
            "type": "string",
            "nullable": true
          },
          "broker_status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "warning",
              "other",
              "preparing_session",
              "connected",
              "active",
              "disconnected",
              "reconnecting",
              "non_brokered_session",
              "error",
              "unmanaged",
              "unknown",
              "unavailable",
              "off",
              "on",
              "suspended",
              "turning_on",
              "turning_off",
              "suspending",
              "resuming",
              "not_reporting",
              "unregistered",
              "available",
              "inuse",
              "maintenance_or_drain_mode"
            ],
            "description": "Estado del broker."
          },
          "status": {
            "type": "string",
            "nullable": true,
            "enum": [
              "online",
              "offline"
            ],
            "description": "Estado de conectividad del workspace."
          }
        },
        "required": [
          "id"
        ]
      },
      "WorkspaceGroupScheduleV2ListResponseV2": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceGroupScheduleV2"
            },
            "description": "Arreglo de programaciones cron para el grupo de workspaces"
          }
        },
        "required": [
          "data"
        ]
      },
      "WorkspaceGroupWorkspaceItemV2": {
        "type": "object",
        "description": "Elemento Workspace en la lista de Workspaces del grupo de workspaces (proyección reducida).",
        "properties": {
          "id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "organization_id": {
            "type": "string",
            "nullable": true,
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "related_environment": {
            "type": "string",
            "nullable": true
          },
          "operating_system": {
            "type": "string",
            "nullable": true
          },
          "ip_address": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "last_user": {
            "type": "string",
            "nullable": true
          },
          "total_ram": {
            "type": "number",
            "nullable": true
          }
        },
        "required": [
          "id"
        ]
      },
      "WorkspaceGroupWorkspaceListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceGroupWorkspaceItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "WorkspaceGroupListItemV2ListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceGroupListItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "WorkspaceGroupListItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "description": "ID del grupo de workspaces"
          },
          "name": {
            "type": "string",
            "description": "Nombre del grupo de workspaces"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción del grupo de workspaces"
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "description": "Identificador de la organización"
          },
          "created_by": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "description": "ID del usuario que creó el grupo de workspaces"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca de tiempo de creación"
          },
          "type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "static",
              "dynamic",
              "entra_id"
            ],
            "description": "Tipo de grupos de workspaces"
          },
          "filter": {
            "type": "string",
            "nullable": true,
            "description": "Cadena de filtro para grupos de workspaces dinámicos"
          },
          "location": {
            "$ref": "#/components/schemas/WorkspaceLocationV2",
            "nullable": true,
            "description": "Información de ubicación del grupo de workspaces"
          },
          "entra_id_source": {
            "$ref": "#/components/schemas/WorkspaceGroupEntraIdSourceV2",
            "nullable": true,
            "description": "Información de origen de Entra ID para el grupo de workspaces"
          }
        },
        "required": [
          "id"
        ]
      },
      "WorkspaceListResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspacePublicV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "ReplaceDigitalActivityCoreProcessGroupCoreProcessesRequestV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "core_processes": {
            "type": "array",
            "description": "Colección completa de procesos core que sustituye al estado actual del grupo.",
            "items": {
              "$ref": "#/components/schemas/ReplaceDigitalActivityCoreProcessItemV2"
            }
          }
        },
        "required": [
          "core_processes"
        ],
        "description": "Cuerpo de reemplazo completo de procesos core del grupo."
      },
      "ReplaceDigitalActivityCoreProcessItemV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Nombre funcional del proceso core."
          },
          "process_name": {
            "type": "string",
            "description": "Nombre del proceso del sistema operativo."
          }
        },
        "required": [
          "name",
          "process_name"
        ]
      },
      "GetCoreProcessGroupCoreProcessesResponseV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReplaceDigitalActivityCoreProcessItemV2"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "UpdateDigitalActivityCoreProcessGroupRequestV2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "description": "Nombre del grupo de procesos core."
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción del grupo de procesos core."
          },
          "workspace_group_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del grupo de workspaces asociado."
          }
        },
        "required": [
          "name",
          "description",
          "workspace_group_id"
        ],
        "description": "Cuerpo de actualización completa del grupo de procesos core."
      },
      "UpdateFlowV2Request": {
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Nombre del flujo. Se requiere al menos una clave de idioma; cada valor entre 1 y 512 caracteres."
          },
          "description": {
            "$ref": "#/components/schemas/MultilangField",
            "description": "Descripción del flujo. Se requiere al menos una clave de idioma; cada valor entre 1 y 512 caracteres."
          },
          "detection_only": {
            "type": "boolean"
          },
          "cooldown_minutes": {
            "type": "number",
            "minimum": 10,
            "maximum": 1440,
            "description": "Tiempo de espera en minutos. Debe estar entre 10 y 1440."
          },
          "enabled": {
            "type": "boolean",
            "description": "Indica si el flujo está habilitado. PUT espera una definición completa; este campo es obligatorio."
          },
          "init_text": {
            "$ref": "#/components/schemas/MultilangField",
            "nullable": true,
            "description": "Mensaje de texto inicial. Obligatorio en PUT. Envia null para limpiar; en caso contrario, objeto con al menos una clave de idioma; cada valor entre 1 y 512 caracteres."
          },
          "ok_text": {
            "$ref": "#/components/schemas/MultilangField",
            "nullable": true,
            "description": "Mensaje de texto de éxito. Obligatorio en PUT. Envia null para limpiar; en caso contrario, objeto con al menos una clave de idioma; cada valor entre 1 y 512 caracteres."
          },
          "ko_text": {
            "$ref": "#/components/schemas/MultilangField",
            "nullable": true,
            "description": "Mensaje de texto de error. Obligatorio en PUT. Envia null para limpiar; en caso contrario, objeto con al menos una clave de idioma; cada valor entre 1 y 512 caracteres."
          },
          "target": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "all_workspaces",
                  "workspaces",
                  "workspace_groups",
                  "reporting_groups"
                ]
              },
              "ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 512
                }
              }
            },
            "required": [
              "type"
            ]
          },
          "microservice_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$"
          },
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FlowConditionInputV2"
            }
          }
        },
        "required": [
          "name",
          "description",
          "detection_only",
          "cooldown_minutes",
          "enabled",
          "init_text",
          "ok_text",
          "ko_text",
          "target",
          "microservice_id",
          "conditions"
        ]
      },
      "UpdateReportingGroupAgentVersionsRequestV2": {
        "type": "object",
        "properties": {
          "agent_auto_update": {
            "type": "boolean"
          },
          "versions": {
            "$ref": "#/components/schemas/ReportingGroupAgentVersionsV2"
          }
        },
        "required": [
          "agent_auto_update",
          "versions"
        ]
      },
      "UpdateReportingGroupRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 512,
            "description": "El nombre del grupo de reporte. Debe ser único dentro de la organización.",
            "example": "Grupo de reporte de producción actualizado"
          },
          "description": {
            "type": "string",
            "maxLength": 1000,
            "description": "Opcional. Una descripción del propósito y uso del grupo de reporte.",
            "example": "Grupo de reporte actualizado para entornos de producción"
          },
          "patch_policy_target_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del destino de política de parches que se asociará con este grupo de reporte. Establézcalo en null u omítalo para eliminar la asociación.",
            "example": "507f1f77bcf86cd799439040"
          },
          "fishing_pattern": {
            "type": "string",
            "maxLength": 250,
            "description": "Opcional. Un patrón de expresión regular usado para hacer coincidir dispositivos. Debe ser un patrón regex válido. Si se proporciona, también se debe especificar fishing_pattern_field. Omítalo para eliminar el patrón.",
            "example": "Estaciones de trabajo Windows"
          },
          "fishing_pattern_field": {
            "type": "string",
            "enum": [
              "full_name",
              "description",
              "ou",
              "current_subnet"
            ],
            "description": "Opcional. Campo sobre el que se aplica fishing_pattern. Obligatorio si se proporciona fishing_pattern. Valores válidos: full_name (nombre completo del dispositivo), description (descripción del dispositivo), ou (unidad organizativa), current_subnet (subred actual).",
            "example": "full_name"
          },
          "intermediate_device_1_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del Workspace del primer dispositivo intermedio. Los dispositivos intermedios se usan para acciones Wake-on-LAN en redes seguras, permitiendo el encendido remoto de los dispositivos objetivo a través de puertas de enlace intermedias. Los dispositivos intermedios deben definirse secuencialmente y sin huecos. Si se omite, se limpiarán todos los dispositivos intermedios. Si se proporcionan intermediate_device_2_id o intermediate_device_3_id, este campo es obligatorio.",
            "example": "507f1f77bcf86cd799439050"
          },
          "intermediate_device_2_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del Workspace del segundo dispositivo intermedio. Se usa para acciones Wake-on-LAN en redes seguras. Requiere que se proporcione intermediate_device_1_id. Si se omite mientras intermediate_device_1_id está proporcionado, este y intermediate_device_3_id se limpiarán. Si se proporciona intermediate_device_3_id, este campo es obligatorio.",
            "example": "507f1f77bcf86cd799439051"
          },
          "intermediate_device_3_id": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del Workspace del tercer dispositivo intermedio. Se usa para acciones Wake on LAN en redes seguras. Requiere que se proporcionen intermediate_device_1_id e intermediate_device_2_id. Si se omite mientras intermediate_device_1_id e intermediate_device_2_id están proporcionados, este campo se limpiará.",
            "example": "507f1f77bcf86cd799439052"
          }
        },
        "required": [
          "name"
        ],
        "description": "Cuerpo de la solicitud para actualizar un grupo de reporte existente. Este endpoint implementa semántica de reemplazo completo: todos los campos actualizables deben incluirse. Omitir campos opcionales los limpiará (comportamiento idempotente). Los dispositivos intermedios se usan para acciones Wake on LAN en redes seguras, permitiendo el encendido remoto de dispositivos a través de puertas de enlace intermedias. Los dispositivos intermedios deben definirse secuencialmente: no puede definir intermediate_device_2_id sin intermediate_device_1_id, ni intermediate_device_3_id sin intermediate_device_2_id. Todos los IDs de Workspace de dispositivos intermedios deben existir y pertenecer a la organización."
      },
      "UpdateRoleRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "Nombre del rol de usuario."
          },
          "permissions": {
            "type": "array",
            "minItems": 1,
            "description": "Entradas completas de permisos que definen el estado final del rol.",
            "items": {
              "$ref": "#/components/schemas/UpdateRolePermissionItemV2"
            }
          }
        },
        "required": [
          "name",
          "permissions"
        ]
      },
      "UpdateRolePermissionItemV2": {
        "type": "object",
        "properties": {
          "target_organization": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$",
                "minLength": 24,
                "maxLength": 24
              }
            ],
            "description": "Alcance de organización del permiso. Use all para todas las organizaciones o un organization_id concreto."
          },
          "portal_permission": {
            "type": "string",
            "enum": [
              "admin",
              "organization_admin",
              "organization_admin_read_only",
              "user",
              "platform",
              "l1_support_team",
              "l1_support_team_read_only",
              "l2_support_team",
              "l2_support_team_read_only",
              "l3_engineering_team",
              "l3_engineering_team_read_only",
              "billing"
            ],
            "description": "Nivel de permiso de Portal."
          },
          "workspaces_permission": {
            "type": "string",
            "enum": [
              "no_access",
              "l1_support_team_read_only",
              "l1_support_team",
              "l2_support_team_read_only",
              "l2_support_team",
              "l3_engineering_team_read_only",
              "l3_engineering_team",
              "admin_read_only",
              "admin"
            ],
            "description": "Nivel de permiso de Workspace."
          },
          "analyzer_permission": {
            "type": "string",
            "enum": [
              "no_access",
              "access",
              "admin"
            ],
            "description": "Nivel de permiso de Analyzer."
          },
          "target_reporting_groups": {
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "all"
                ]
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$",
                  "minLength": 24,
                  "maxLength": 24
                }
              }
            ],
            "description": "Alcance de reporting groups del permiso. Use all para todos los grupos o una lista de reporting_group_id."
          }
        },
        "required": [
          "target_organization",
          "portal_permission",
          "workspaces_permission",
          "analyzer_permission",
          "target_reporting_groups"
        ]
      },
      "UpdateTenantRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 512
          }
        },
        "required": [
          "name"
        ]
      },
      "UpdateUserRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "Nombre del usuario."
          },
          "surname": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "Apellido del usuario."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Dirección de correo electrónico del usuario."
          },
          "department": {
            "type": "string",
            "nullable": true,
            "description": "Departamento del usuario."
          },
          "role_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del rol asignado al usuario."
          }
        },
        "required": [
          "name",
          "surname",
          "email",
          "department",
          "role_id"
        ]
      },
      "UpdateWorkspaceGroupScheduleRequestV2": {
        "type": "object",
        "properties": {
          "cron_expression": {
            "type": "string",
            "description": "Expresión cron que define cuándo debe ejecutarse la programación. Formato: minuto hora día-del-mes mes día-de-la-semana. Ejemplos: '0 8 * * 1-5' (8 AM entre semana), '0 0 * * 0' (medianoche del domingo), '30 14 * * *' (2:30 PM diariamente). Día-de-la-semana: 0=domingo, 1=lunes, ..., 6=sábado. Admite rangos (1-5), listas (1,3,5) y comodines (*). Debe ser un formato de expresión cron válido con 5 campos separados por espacios.",
            "example": "0 8 * * 1-5"
          },
          "time_zone": {
            "type": "string",
            "description": "Zona horaria para la ejecución de la programación. Admite identificadores IANA (p. ej., 'America/New_York') y Windows (p. ej., 'Pacific Standard Time').",
            "example": "Eastern Standard Time"
          },
          "type": {
            "type": "string",
            "enum": [
              "start",
              "stop",
              "restart"
            ],
            "description": "Tipo de operación de energía a realizar. START: Enciende los Workspaces del grupo. STOP: Apaga los Workspaces del grupo. RESTART: Reinicia los Workspaces del grupo.",
            "example": "start"
          },
          "intermediate_device": {
            "type": "string",
            "maxLength": 24,
            "pattern": "^[0-9a-f]{24}$",
            "description": "Opcional. El identificador único del Workspace de dispositivo intermedio. Si se proporciona, indica que debe usarse un dispositivo intermedio para operaciones de Wake-on-LAN. Solo aplica a programaciones START. Se usa para acciones de Wake-on-LAN en redes seguras. El Workspace debe existir y pertenecer a la organización. Para eliminar un dispositivo intermedio, omita este campo.",
            "example": "507f1f77bcf86cd799439050"
          }
        },
        "required": [
          "cron_expression",
          "time_zone",
          "type"
        ]
      },
      "WorkspaceGroupUpdateRequestV2": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 512
          },
          "description": {
            "type": "string",
            "maxLength": 512
          },
          "location": {
            "$ref": "#/components/schemas/WorkspaceGroupBaseUpdateLocationInputV2"
          }
        },
        "required": [
          "name",
          "description",
          "location"
        ]
      },
      "UpdateWorkspaceGroupWorkspacesResponseV2": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "Mensaje de confirmación de la actualización"
          },
          "total_in_group": {
            "type": "integer",
            "description": "Total de Workspaces en el grupo después de aplicar la actualización"
          }
        },
        "required": [
          "message",
          "total_in_group"
        ]
      },
      "WorkspacesUpdateRequestV2": {
        "type": "object",
        "properties": {
          "workspace_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 24,
              "pattern": "^[0-9a-f]{24}$"
            },
            "description": "Arreglo de IDs de Workspace"
          }
        },
        "required": [
          "workspace_ids"
        ]
      },
      "WorkspaceAgentVersionItemV2": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "discovered_at",
          "version"
        ],
        "properties": {
          "discovered_at": {
            "type": "string",
            "format": "date-time",
            "description": "Fecha en la que se detectó la versión del agente."
          },
          "version": {
            "type": "string",
            "description": "Versión del agente detectada en el workspace."
          }
        }
      },
      "GetWorkspaceAgentVersionsResponseV2": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "data",
          "has_next"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceAgentVersionItemV2"
            }
          },
          "has_next": {
            "type": "boolean",
            "description": "Indica si existen mas resultados en la siguiente página."
          }
        }
      },
      "GetWorkspaceAlertsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspaceAlertItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspaceAlertItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de alerta."
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Nombre de la alerta."
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Descripción de la alerta."
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "warning",
              "informational"
            ],
            "nullable": true,
            "description": "Severidad de la alerta en minúsculas. Será null cuando el dato origen no sea válido."
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca de tiempo de inicio de la alerta."
          },
          "authorized_minutes": {
            "type": "number",
            "nullable": true,
            "description": "Duración autorizada en minutos."
          },
          "notified_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca de tiempo de notificación."
          },
          "information": {
            "type": "string",
            "nullable": true,
            "description": "Información adicional de la alerta."
          },
          "threshold_unit_name": {
            "type": "string",
            "nullable": true,
            "description": "Nombre de la unidad del umbral."
          },
          "threshold_value": {
            "type": "number",
            "nullable": true,
            "description": "Valor del umbral."
          },
          "element": {
            "type": "string",
            "nullable": true,
            "description": "Elemento afectado."
          },
          "category": {
            "type": "string",
            "nullable": true,
            "description": "Categoría de la alerta."
          }
        },
        "required": [
          "id"
        ]
      },
      "GetWorkspaceDisksResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspaceDiskItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspaceDiskItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del registro de disco."
          },
          "name": {
            "type": "string",
            "description": "Nombre del disco."
          },
          "device_id": {
            "type": "string",
            "description": "Cadena identificadora del dispositivo de disco."
          },
          "encrypted": {
            "type": "string",
            "enum": [
              "not_encrypted",
              "encrypted",
              "partially_encrypted",
              "na"
            ],
            "description": "Estado de cifrado del disco."
          },
          "encryption_method": {
            "type": "string",
            "description": "Etiqueta del método de cifrado."
          },
          "location": {
            "type": "string",
            "description": "Etiqueta de ubicación del disco."
          },
          "media_type": {
            "type": "string",
            "description": "Tipo de medio del disco."
          },
          "os_drive": {
            "type": "boolean",
            "nullable": true,
            "description": "Si el disco está marcado como unidad del SO."
          },
          "partition": {
            "type": "string",
            "description": "Descriptor de partición."
          },
          "physical_disk_size": {
            "type": "number",
            "description": "Valor del tamaño físico del disco."
          },
          "total_size": {
            "type": "number",
            "description": "Valor del tamaño total del disco."
          },
          "last_updated_at": {
            "type": "string",
            "description": "Fecha de última actualización del registro de disco."
          },
          "used_size": {
            "type": "number",
            "description": "Valor del tamaño usado del disco."
          },
          "volume_label": {
            "type": "string",
            "description": "Etiqueta de volumen."
          }
        },
        "required": [
          "id",
          "name",
          "device_id",
          "encrypted",
          "encryption_method",
          "location",
          "partition",
          "physical_disk_size",
          "total_size"
        ]
      },
      "GetWorkspaceInstalledAppsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspaceInstalledAppItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspaceInstalledAppItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de la aplicación instalada."
          },
          "product_name": {
            "type": "string",
            "description": "Nombre de la aplicación instalada."
          },
          "publisher": {
            "type": "string",
            "nullable": true,
            "description": "Publicador de la aplicación instalada."
          },
          "version": {
            "type": "string",
            "nullable": true,
            "description": "Versión de la aplicación instalada."
          },
          "installed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Marca temporal de instalación."
          },
          "install_location": {
            "type": "string",
            "nullable": true,
            "description": "Ubicación de instalación."
          },
          "last_reported_at": {
            "type": "string",
            "format": "date-time",
            "description": "Marca temporal del último reporte."
          }
        },
        "required": [
          "id",
          "product_name",
          "last_reported_at"
        ]
      },
      "GetWorkspaceOperationsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetOperationByIdResponseV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspacePatchesResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspacePatchItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspacePatchItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del registro de parche."
          },
          "kb": {
            "type": "string",
            "description": "Codigo KB del parche."
          },
          "title": {
            "type": "string",
            "description": "Título del parche."
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "installed"
            ],
            "description": "Estado del parche."
          },
          "product": {
            "type": "string",
            "description": "Producto asociado al parche."
          },
          "severity": {
            "type": "string",
            "description": "Severidad del parche."
          },
          "arrived_at": {
            "type": "string",
            "description": "Fecha de llegada o publicacion del parche."
          },
          "category": {
            "type": "string",
            "description": "Categoria del parche."
          },
          "installed_at": {
            "type": "string",
            "nullable": true,
            "description": "Fecha de instalación del parche."
          },
          "additional_information_url": {
            "type": "string",
            "description": "URL con información adicional del parche."
          }
        },
        "required": [
          "id",
          "kb",
          "title",
          "status",
          "product",
          "severity",
          "arrived_at",
          "category",
          "additional_information_url"
        ]
      },
      "GetWorkspacePnpErrorsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspacePnpErrorItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspacePnpErrorItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del registro de error de PnP."
          },
          "name": {
            "type": "string",
            "description": "Nombre del error."
          },
          "status": {
            "type": "string",
            "description": "Estado del error."
          },
          "class": {
            "type": "string",
            "description": "Clase del dispositivo."
          },
          "device_id": {
            "type": "string",
            "description": "Identificador del dispositivo."
          },
          "error_description": {
            "type": "string",
            "description": "Descripción del error."
          },
          "error_code": {
            "type": "string",
            "description": "Código del error."
          },
          "properties": {
            "type": "string",
            "description": "Propiedades adicionales."
          },
          "last_updated_at": {
            "type": "string",
            "description": "Fecha de última actualización."
          }
        },
        "required": [
          "id",
          "name",
          "status",
          "class",
          "device_id",
          "error_description",
          "error_code",
          "properties",
          "last_updated_at"
        ]
      },
      "GetWorkspacePnpEventsResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspacePnpEventItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspacePnpEventItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del evento."
          },
          "action": {
            "type": "string",
            "description": "Etiqueta de la accion."
          },
          "created_at": {
            "type": "string",
            "description": "Cadena de fecha del evento."
          },
          "user_name": {
            "type": "string",
            "description": "Usuario asociado al evento."
          },
          "caption": {
            "type": "string",
            "description": "Leyenda del evento."
          },
          "device_id": {
            "type": "string",
            "description": "Identificador del dispositivo asociado al evento."
          }
        },
        "required": [
          "id",
          "action",
          "created_at",
          "user_name",
          "caption",
          "device_id"
        ]
      },
      "GetWorkspaceServicesResponseV2": {
        "type": "object",
        "properties": {
          "has_next": {
            "type": "boolean",
            "description": "Indica si hay otra página disponible."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GetWorkspaceServiceItemV2"
            }
          }
        },
        "required": [
          "has_next",
          "data"
        ]
      },
      "GetWorkspaceServiceItemV2": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador del servicio."
          },
          "name": {
            "type": "string",
            "description": "Nombre del servicio."
          },
          "description": {
            "type": "string",
            "description": "Descripción del servicio."
          },
          "status": {
            "type": "string",
            "description": "Estado del servicio."
          },
          "accept_stop": {
            "type": "boolean",
            "nullable": true,
            "description": "Indica si el servicio acepta solicitudes de detención."
          },
          "display_name": {
            "type": "string",
            "description": "Nombre para mostrar del servicio."
          },
          "log_on_as": {
            "type": "string",
            "description": "Cuenta usada para ejecutar el servicio."
          },
          "path": {
            "type": "string",
            "description": "Ruta ejecutable del servicio."
          },
          "organization_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de organización asociado al servicio."
          },
          "reporting_group_id": {
            "type": "string",
            "description": "Identificador del Grupo de reporte asociado al servicio."
          },
          "startup_type": {
            "type": "string",
            "description": "Tipo de inicio del servicio."
          },
          "last_updated_at": {
            "type": "string",
            "description": "Cadena de marca temporal de la última actualización."
          },
          "workspace_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$",
            "minLength": 24,
            "maxLength": 24,
            "description": "Identificador de Workspace asociado al servicio."
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "status",
          "display_name",
          "log_on_as",
          "path",
          "organization_id",
          "reporting_group_id",
          "startup_type",
          "last_updated_at",
          "workspace_id"
        ]
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Solicitud incorrecta",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "No autorizado",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "NotFound": {
        "description": "No encontrado",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Demasiadas solicitudes",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Error interno del servidor",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "UnprocessableEntity": {
        "description": "Entidad no procesable",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "Conflict": {
        "description": "Conflicto",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ]
}
