{
  "openapi": "3.1.0",
  "info": {
    "title": "Grupo PERSA API",
    "description": "API oficial de Grupo PERSA (Ingeniería, diseño y construcciones S.A. de C.V.) para la consulta de catálogo de servicios de construcción residencial, remodelación y crédito Mejoravit en Puebla, México, y registro de prospectos para cotización técnica.",
    "version": "1.0.0",
    "contact": {
      "name": "Grupo PERSA",
      "email": "contacto@grupopersa.com.mx",
      "url": "https://grupopersa.com.mx"
    },
    "license": {
      "name": "Proprietary"
    }
  },
  "servers": [
    {
      "url": "https://grupopersa.com.mx",
      "description": "Servidor de Producción"
    }
  ],
  "paths": {
    "/api/lead": {
      "post": {
        "summary": "Registrar solicitud de cotización o diagnóstico técnico",
        "description": "Valida los datos de contacto del cliente y registra el prospecto en el sistema de atención de Grupo PERSA. Emite un Folio institucional de seguimiento para el cliente.",
        "operationId": "registrarSolicitudCotizacion",
        "tags": [
          "Prospectos",
          "Cotizaciones"
        ],
        "requestBody": {
          "required": true,
          "description": "Datos del cliente y requerimientos del proyecto de construcción o remodelación.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LeadInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Solicitud recibida y validada exitosamente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadSuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Error de validación en los campos del formulario.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "415": {
            "description": "Encabezado Content-Type incorrecto (debe ser application/json)."
          }
        }
      }
    },
    "/agent.json": {
      "get": {
        "summary": "Obtener manifiesto de Agente Autónomo (Agent Web Protocol)",
        "description": "Devuelve las capacidades del dominio, enlaces a llms.txt y herramientas WebMCP disponibles.",
        "operationId": "obtenerManifiestoAgente",
        "tags": [
          "Agentes"
        ],
        "responses": {
          "200": {
            "description": "Manifiesto de agente en formato JSON.",
            "content": {
              "application/json": {}
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "summary": "Obtener contexto estructurado y mapa curado para LLMs",
        "description": "Devuelve un mapa en Markdown con la síntesis de lo que hace el negocio y enlaces limpios.",
        "operationId": "obtenerContextoLLM",
        "tags": [
          "Agentes",
          "Documentación"
        ],
        "responses": {
          "200": {
            "description": "Documentación estructurada en Markdown/texto plano.",
            "content": {
              "text/plain": {}
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "LeadInput": {
        "type": "object",
        "properties": {
          "nombre": {
            "type": "string",
            "minLength": 2,
            "maxLength": 100,
            "description": "Nombre completo de la persona interesada.",
            "example": "Carlos Martínez"
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 120,
            "description": "Correo electrónico válido para recibir confirmación y cotización.",
            "example": "carlos@ejemplo.com"
          },
          "tel": {
            "type": "string",
            "pattern": "^[0-9]{10}$",
            "description": "Teléfono de contacto a 10 dígitos (para WhatsApp o llamadas directas en México).",
            "example": "2211852282"
          },
          "servicio": {
            "type": "string",
            "enum": [
              "Remodelación",
              "Construcción de casa",
              "Mejoravit",
              "Vender mi casa",
              "Asociarme en un proyecto",
              "Otro"
            ],
            "description": "Servicio solicitado de la lista autorizada.",
            "example": "Remodelación"
          },
          "zona": {
            "type": "string",
            "enum": [
              "Puebla capital",
              "San Andrés Cholula",
              "San Pedro Cholula",
              "Cuautlancingo",
              "Atlixco",
              "Amozoc",
              "Otra región"
            ],
            "description": "Municipio o zona de atención en Puebla.",
            "example": "Puebla capital"
          },
          "msg": {
            "type": "string",
            "maxLength": 1000,
            "description": "Descripción detallada de la remodelación o proyecto de construcción.",
            "example": "Remodelación integral de cocina y baño principal en casa habitación de 2 niveles."
          }
        },
        "required": [
          "nombre",
          "email",
          "tel",
          "servicio",
          "zona"
        ]
      },
      "LeadSuccessResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "example": true
          },
          "leadId": {
            "type": "string",
            "description": "Folio institucional de seguimiento sin PII.",
            "example": "lead_m6a9bf_3d81f2"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "success",
          "leadId"
        ]
      },
      "ValidationErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "example": "Revisa los datos del formulario"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "tel": "Escribe un teléfono de 10 dígitos, por ejemplo 221 185 2282."
            }
          }
        },
        "required": [
          "error"
        ]
      }
    }
  }
}