{
    "openapi": "3.1.0",
    "info": {
        "title": "Kydesk Helpdesk API",
        "version": "v1",
        "description": "API REST de Kydesk Helpdesk. Construye integraciones, automatizaciones y aplicaciones sobre tu workspace de helpdesk.\n\n## Autenticación\n\nTodas las llamadas (excepto `/health`) requieren un Bearer token en el header `Authorization`. Genera tokens en tu panel de developer (`/developers/apps/{id}`) o en el panel de tenant (`/t/{slug}/api-docs`).\n\n```\nAuthorization: Bearer kyd_xxxxxxxxxxxxxxxxxxxxxxxx\n```\n\n## Cuotas y rate limit\n\nLos tokens de developer aplican cuotas del plan suscrito. Cada respuesta incluye headers `X-RateLimit-Limit`, `X-Quota-Used`, `X-Quota-Limit` y `X-Quota-Pct`.\n\n## Idempotencia\n\nLos endpoints `POST` aceptan el header `Idempotency-Key`. Si lo envías, llamadas duplicadas en 24h devuelven la misma respuesta sin crear recursos duplicados.\n\n## Paginación\n\nUsa `?page=N&per_page=K` o `?offset=M&limit=K`. La respuesta incluye `meta.total`, `meta.has_more` y un objeto `links` con URLs de navegación.\n\n## Expansión de relaciones\n\nUsa `?expand=` para incluir relaciones en línea: `?expand=company,assignee,comments`.\n\n## Selección de campos\n\nUsa `?fields=id,subject,status` para limitar las propiedades devueltas.\n\n## Errores\n\nFormato consistente:\n```json\n{\n  \"error\": {\n    \"type\": \"validation_error\",\n    \"message\": \"...\",\n    \"status\": 422,\n    \"request_id\": \"abc123\"\n  }\n}\n```",
        "contact": {
            "name": "Kydesk Developer Support",
            "email": "developers@kyrosrd.com",
            "url": "https://kydesk.kyrosrd.com/developers"
        },
        "license": {
            "name": "Proprietary",
            "url": "https://kydesk.kyrosrd.com/terms"
        }
    },
    "servers": [
        {
            "url": "https://kydesk.kyrosrd.com/api/v1",
            "description": "Production"
        }
    ],
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Meta",
            "description": "Endpoints informativos: identidad, salud, estadísticas"
        },
        {
            "name": "Tickets",
            "description": "CRUD de tickets, comentarios y escalamientos"
        },
        {
            "name": "Companies",
            "description": "Empresas (clientes B2B)"
        },
        {
            "name": "Categories",
            "description": "Categorías de tickets"
        },
        {
            "name": "Users",
            "description": "Usuarios del workspace (técnicos / agentes)"
        },
        {
            "name": "KB",
            "description": "Base de conocimiento"
        },
        {
            "name": "SLA",
            "description": "Políticas de SLA"
        },
        {
            "name": "Automations",
            "description": "Automatizaciones tipo IFTTT"
        },
        {
            "name": "Assets",
            "description": "Activos / inventario"
        },
        {
            "name": "Search",
            "description": "Búsqueda global"
        },
        {
            "name": "Integrations",
            "description": "Catálogo de integraciones, instalaciones y logs"
        },
        {
            "name": "Meetings",
            "description": "Reuniones, agenda y bookings públicos"
        },
        {
            "name": "CRM",
            "description": "Leads, deals, pipelines y stages"
        },
        {
            "name": "Quotes",
            "description": "Cotizaciones, items y eventos"
        },
        {
            "name": "AI Engine",
            "description": "Agente IA autónomo: métricas, conversaciones, predicciones, RAG"
        },
        {
            "name": "Migration",
            "description": "Migration Center: jobs, records y logs"
        },
        {
            "name": "Teams",
            "description": "Microsoft Teams Omnichannel: canales y mensajes"
        },
        {
            "name": "Active Directory",
            "description": "Azure AD/Entra + LDAP: users, groups, sync"
        }
    ],
    "paths": {
        "/me": {
            "get": {
                "tags": [
                    "Meta"
                ],
                "summary": "Identidad del token",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    }
                }
            }
        },
        "/health": {
            "get": {
                "tags": [
                    "Meta"
                ],
                "summary": "Health check (no requiere auth)",
                "security": [],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/stats": {
            "get": {
                "tags": [
                    "Meta"
                ],
                "summary": "Estadísticas del workspace",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    }
                }
            }
        },
        "/search": {
            "get": {
                "tags": [
                    "Search"
                ],
                "summary": "Búsqueda global",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "minLength": 2
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "maximum": 20
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationError"
                    }
                }
            }
        },
        "/tickets": {
            "get": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Listar tickets",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "open",
                                "in_progress",
                                "on_hold",
                                "resolved",
                                "closed"
                            ]
                        }
                    },
                    {
                        "name": "priority",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "low",
                                "medium",
                                "high",
                                "urgent"
                            ]
                        }
                    },
                    {
                        "name": "assigned_to",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Búsqueda en subject/code/description"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    }
                }
            },
            "post": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Crear ticket",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TicketInput"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "Idempotency-Key",
                        "in": "header",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationError"
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthorized"
                    }
                }
            }
        },
        "/tickets/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Detalle de ticket",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Actualizar ticket",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TicketInput"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationError"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Eliminar ticket",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/tickets/{id}/comments": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Listar comentarios",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Añadir comentario",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "body"
                                ],
                                "properties": {
                                    "body": {
                                        "type": "string"
                                    },
                                    "is_internal": {
                                        "type": "boolean"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/tickets/{id}/escalate": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "post": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Escalar ticket",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/tickets/{id}/assign": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "post": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Asignar técnico",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "user_id"
                                ],
                                "properties": {
                                    "user_id": {
                                        "type": "integer"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/tickets/batch": {
            "post": {
                "tags": [
                    "Tickets"
                ],
                "summary": "Operaciones batch (hasta 50)",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/companies": {
            "get": {
                "tags": [
                    "Companies"
                ],
                "summary": "Listar empresas",
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Companies"
                ],
                "summary": "Crear empresa",
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/companies/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Companies"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Companies"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Companies"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/categories": {
            "get": {
                "tags": [
                    "Categories"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Categories"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/categories/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Categories"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Categories"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Categories"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/users": {
            "get": {
                "tags": [
                    "Users"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Users"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/users/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Users"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Users"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Users"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/kb/articles": {
            "get": {
                "tags": [
                    "KB"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "KB"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/kb/articles/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "KB"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "KB"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "KB"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/kb/categories": {
            "get": {
                "tags": [
                    "KB"
                ],
                "summary": "Listar categorías KB",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/sla": {
            "get": {
                "tags": [
                    "SLA"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "SLA"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/sla/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "patch": {
                "tags": [
                    "SLA"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "SLA"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/automations": {
            "get": {
                "tags": [
                    "Automations"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Automations"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/automations/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "patch": {
                "tags": [
                    "Automations"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Automations"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/assets": {
            "get": {
                "tags": [
                    "Assets"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Assets"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/assets/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Assets"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Assets"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Assets"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/integrations/providers": {
            "get": {
                "tags": [
                    "Integrations"
                ],
                "summary": "Catálogo público de proveedores soportados",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/integrations/events": {
            "get": {
                "tags": [
                    "Integrations"
                ],
                "summary": "Eventos disponibles agrupados por dominio",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/integrations": {
            "get": {
                "tags": [
                    "Integrations"
                ],
                "summary": "Listar instalaciones del tenant",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/integrations/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Integrations"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/integrations/{id}/logs": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Integrations"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/meetings": {
            "get": {
                "tags": [
                    "Meetings"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "Meetings"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/meetings/availability": {
            "get": {
                "tags": [
                    "Meetings"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/meetings/types": {
            "get": {
                "tags": [
                    "Meetings"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/meetings/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Meetings"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Meetings"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Meetings"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/crm/leads": {
            "get": {
                "tags": [
                    "CRM"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/crm/leads/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/crm/deals": {
            "get": {
                "tags": [
                    "CRM"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "post": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "201": {
                        "$ref": "#/components/responses/Created"
                    }
                }
            }
        },
        "/crm/deals/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "patch": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            },
            "delete": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/crm/pipelines": {
            "get": {
                "tags": [
                    "CRM"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/quotes": {
            "get": {
                "tags": [
                    "Quotes"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/quotes/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Quotes"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/quotes/{id}/items": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Quotes"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/quotes/{id}/events": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Quotes"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/quotes/{id}/status": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "post": {
                "tags": [
                    "Quotes"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/settings": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/metrics": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/conversations": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/predictions": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/duplicates": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/articles": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ai-engine/rag/search": {
            "get": {
                "tags": [
                    "AI Engine"
                ],
                "summary": "Búsqueda RAG sobre KB indexada",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/migration/jobs": {
            "get": {
                "tags": [
                    "Migration"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/migration/jobs/{id}": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Migration"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/migration/jobs/{id}/records": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Migration"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/migration/jobs/{id}/logs": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Migration"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/teams/settings": {
            "get": {
                "tags": [
                    "Teams"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/teams/channels": {
            "get": {
                "tags": [
                    "Teams"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/teams/conversations": {
            "get": {
                "tags": [
                    "Teams"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/teams/conversations/{id}/messages": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "get": {
                "tags": [
                    "Teams"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/teams/conversations/{id}/send": {
            "parameters": [
                {
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "schema": {
                        "type": "integer"
                    }
                }
            ],
            "post": {
                "tags": [
                    "Teams"
                ],
                "summary": "Enviar mensaje al chat de Teams",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ad/settings": {
            "get": {
                "tags": [
                    "Active Directory"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ad/users": {
            "get": {
                "tags": [
                    "Active Directory"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ad/groups": {
            "get": {
                "tags": [
                    "Active Directory"
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ad/sync/logs": {
            "get": {
                "tags": [
                    "Active Directory"
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Campo de ordenamiento. Prefijo `-` para descendente: `-created_at`"
                    },
                    {
                        "name": "expand",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Relaciones a expandir, separadas por coma"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Lista de campos a devolver"
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        },
        "/ad/sync": {
            "post": {
                "tags": [
                    "Active Directory"
                ],
                "summary": "Disparar sincronización Azure o LDAP",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Success"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "bearerFormat": "kyd_*"
            }
        },
        "schemas": {
            "Ticket": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "code": {
                        "type": "string",
                        "example": "TK-01-00042"
                    },
                    "subject": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "open",
                            "in_progress",
                            "on_hold",
                            "resolved",
                            "closed"
                        ]
                    },
                    "priority": {
                        "type": "string",
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "urgent"
                        ]
                    },
                    "channel": {
                        "type": "string",
                        "enum": [
                            "portal",
                            "email",
                            "phone",
                            "chat",
                            "internal"
                        ]
                    },
                    "requester_email": {
                        "type": "string",
                        "format": "email"
                    },
                    "company_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "category_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "assigned_to": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "sla_due_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                }
            },
            "TicketInput": {
                "type": "object",
                "required": [
                    "subject"
                ],
                "properties": {
                    "subject": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "open",
                            "in_progress",
                            "on_hold",
                            "resolved",
                            "closed"
                        ]
                    },
                    "priority": {
                        "type": "string",
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "urgent"
                        ]
                    },
                    "channel": {
                        "type": "string",
                        "enum": [
                            "portal",
                            "email",
                            "phone",
                            "chat",
                            "internal"
                        ]
                    },
                    "requester_name": {
                        "type": "string"
                    },
                    "requester_email": {
                        "type": "string",
                        "format": "email"
                    },
                    "company_id": {
                        "type": "integer"
                    },
                    "category_id": {
                        "type": "integer"
                    },
                    "assigned_to": {
                        "type": "integer"
                    },
                    "tags": {
                        "type": "string",
                        "description": "Lista separada por comas"
                    }
                }
            },
            "Error": {
                "type": "object",
                "properties": {
                    "error": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string"
                            },
                            "message": {
                                "type": "string"
                            },
                            "status": {
                                "type": "integer"
                            },
                            "request_id": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "responses": {
            "Success": {
                "description": "OK",
                "content": {
                    "application/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "data": {
                                    "oneOf": [
                                        {
                                            "type": "object"
                                        },
                                        {
                                            "type": "array"
                                        }
                                    ]
                                },
                                "meta": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "Created": {
                "description": "Recurso creado",
                "content": {
                    "application/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "data": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "Unauthorized": {
                "description": "Token inválido o ausente",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "NotFound": {
                "description": "Recurso no encontrado",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "ValidationError": {
                "description": "Validación fallida",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "TooManyRequests": {
                "description": "Rate limit / cuota excedida",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}