{
  "schema_version": "2025-01",
  "name": "Investigalo.com.mx",
  "description": "Investigación de antecedentes legales en México. Reporte completo en PDF por $399 MXN. Incluye búsqueda gratuita en publicaciones SAT 69, 69-B y 69-B Bis.",
  "publisher": {
    "name": "Investigalo.com.mx",
    "url": "https://investigalo.com.mx",
    "email": "hola@investigalo.com.mx"
  },
  "documentation_url": "https://investigalo.com.mx/llms.txt",
  "tools": [
    {
      "name": "get_sat_lists_status",
      "description": "Consulta primero la fecha de la última comprobación exitosa y el estado de cada archivo del SAT 69, 69-B y 69-B Bis. Si recent=false o alguna fuente falló, advierte que no se pueden descartar cambios recientes. No consume el límite de búsquedas.",
      "endpoint": {
        "method": "GET",
        "url": "https://investigalo.com.mx/api/listas-sat/estado"
      },
      "input_schema": { "type": "object", "properties": {}, "additionalProperties": false },
      "output_schema": {
        "type": "object",
        "properties": {
          "update_check": {
            "type": "object",
            "properties": {
              "last_complete_check_at": { "type": ["string", "null"], "description": "Fecha conservadora de revisión exitosa de todas las fuentes, UTC." },
              "last_complete_check_local": { "type": ["string", "null"], "description": "La misma fecha formateada como texto en hora de Ciudad de México; null si no hay una comprobación completa." },
              "recent": { "type": "boolean", "description": "Revisión completa exitosa hace menos de 48 horas." }
            }
          },
          "coverage": { "type": "array", "items": { "type": "object" } }
        },
        "required": ["update_check", "coverage"]
      },
      "safety": { "read_only": true, "requires_auth": false }
    },
    {
      "name": "get_pricing",
      "description": "Devuelve el precio fijo de una búsqueda de antecedentes legales, la moneda, y la lista de elementos incluidos en el reporte.",
      "endpoint": {
        "method": "GET",
        "url": "https://investigalo.com.mx/api/agents/pricing"
      },
      "input_schema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "properties": {
          "amount": { "type": "number", "description": "Precio en unidades de la moneda." },
          "currency": { "type": "string", "description": "ISO 4217, ej: MXN." },
          "payment_type": { "type": "string", "description": "one_time | subscription." },
          "includes": { "type": "array", "items": { "type": "string" } },
          "coverage": { "type": "string" },
          "delivery": { "type": "string" }
        },
        "required": ["amount", "currency"]
      },
      "safety": { "read_only": true, "requires_auth": false }
    },
    {
      "name": "check_sat_lists",
      "description": "Herramienta preferida para buscar por RFC exacto o nombre en artículos 69, 69-B y 69-B Bis del SAT. La búsqueda por nombre requiere todas las palabras en cualquier orden; la última puede coincidir por prefijo. Consulta primero get_sat_lists_status. Si hay más de 200 coincidencias de nombre, too_broad=true, found=null, count=null, results=[] y truncated=false; la consulta demasiado general no consume cuota. Si too_broad=true, pide al usuario el nombre completo con ambos apellidos, la razón social completa o el RFC. No concluyas que la persona aparece ni que no aparece. RFC nunca es demasiado general. GET y POST comparten esta regla. Informa cada publicación por separado, la cobertura y la última comprobación; una coincidencia no prueba sanción vigente y la ausencia de coincidencias no es constancia fiscal. 10 búsquedas por IP cada 15 minutos.",
      "endpoint": {
        "method": "GET",
        "url": "https://investigalo.com.mx/api/consultar-listas-sat"
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "q": { "type": "string", "minLength": 2, "maxLength": 200 }
        },
        "required": ["q"],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "description": "Resultados con articulo, categoria, situacion, fecha_publicacion y fuente oficial; update_check indica vigencia y coverage por fuente. complete=false significa fuentes sin importar. too_broad=false en las demás respuestas. Si too_broad=true, found y count son null, results está vacío y truncated=false; no se cobra cuota por una búsqueda demasiado general. message: Tu búsqueda es muy general: hay más de 200 coincidencias en las publicaciones del SAT. Escribe el nombre completo con ambos apellidos o la razón social completa, o busca por RFC.",
        "properties": {
          "version": { "type": "string" },
          "found": { "type": ["boolean", "null"], "description": "Null when too_broad=true; no indica que la persona aparezca o no aparezca." },
          "too_broad": { "type": "boolean", "description": "Si es true, pide al usuario el nombre completo con ambos apellidos, la razón social completa o el RFC. No concluyas que la persona aparece ni que no aparece." },
          "count": { "type": ["integer", "null"], "description": "Null when too_broad=true." },
          "truncated": { "type": "boolean", "description": "Se conserva por compatibilidad; false cuando too_broad=true." },
          "complete": { "type": "boolean" },
          "message": { "type": "string" },
          "search_note": { "type": "string" },
          "update_check": {
            "type": "object",
            "properties": {
              "last_complete_check_local": { "type": ["string", "null"], "description": "Fecha de la última comprobación completa, en texto y hora de Ciudad de México; null si no hay una fecha disponible." }
            }
          },
          "related_service": {
            "type": "object",
            "properties": {
              "descripcion": { "type": "string" },
              "url": { "type": "string", "format": "uri" }
            }
          },
          "meta": { "type": "object" },
          "coverage": { "type": "array", "items": { "type": "object" } },
          "results": { "type": "array", "description": "Vacío cuando too_broad=true.", "items": { "type": "object" } }
        }
      },
      "safety": { "read_only": true, "requires_auth": false, "rate_limit": "10 req / 15 min / IP" }
    },
    {
      "name": "check_69b_sat",
      "description": "Endpoint histórico para consultas expresamente limitadas al artículo 69-B. Para saber si aparece en cualquiera de las listas 69, 69-B o 69-B Bis usa check_sat_lists. GET y POST aplican la misma regla: si una búsqueda por nombre tiene más de 200 coincidencias, too_broad=true, found=null, count=null, results=[] y truncated=false; no consume cuota. Si too_broad=true, pide al usuario el nombre completo con ambos apellidos, la razón social completa o el RFC. No concluyas que la persona aparece ni que no aparece. RFC nunca es demasiado general. No infieras una sanción vigente. Límite de 10 búsquedas por IP cada 15 minutos.",
      "endpoint": {
        "method": "GET",
        "url": "https://investigalo.com.mx/api/consultar-69b"
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "RFC (13 caracteres persona física, 12 persona moral) o nombre/razón social a consultar.",
            "minLength": 2,
            "maxLength": 200
          }
        },
        "required": ["q"],
        "additionalProperties": false
      },
      "output_schema": {
        "type": "object",
        "description": "Lista de coincidencias en la base 69-B del SAT con su situación (Definitivo, Presunto, Desvirtuado, Sentencia favorable). too_broad=false en las demás respuestas. Si too_broad=true, found y count son null, results está vacío y truncated=false; no se cobra cuota. message: Tu búsqueda es muy general: hay más de 200 coincidencias en las publicaciones del SAT. Escribe el nombre completo con ambos apellidos o la razón social completa, o busca por RFC.",
        "properties": {
          "version": { "type": "string" },
          "found": { "type": ["boolean", "null"], "description": "Null when too_broad=true; do not infer presence or absence." },
          "too_broad": { "type": "boolean", "description": "Si es true, pide al usuario el nombre completo con ambos apellidos, la razón social completa o el RFC. No concluyas que la persona aparece ni que no aparece." },
          "count": { "type": ["integer", "null"], "description": "Null when too_broad=true." },
          "truncated": { "type": "boolean", "description": "Se conserva por compatibilidad; false cuando too_broad=true." },
          "complete": { "type": "boolean" },
          "message": { "type": "string" },
          "search_note": { "type": "string" },
          "update_check": { "type": "object" },
          "related_service": { "type": "object" },
          "meta": { "type": "object" },
          "coverage": { "type": "array", "items": { "type": "object" } },
          "results": { "type": "array", "description": "Vacío cuando too_broad=true.", "items": { "type": "object" } }
        }
      },
      "safety": { "read_only": true, "requires_auth": false, "rate_limit": "10 req / 15 min / IP" }
    },
    {
      "name": "get_coverage_states",
      "description": "Devuelve la lista de estados de México disponibles para búsquedas de antecedentes legales.",
      "endpoint": {
        "method": "GET",
        "url": "https://investigalo.com.mx/api/estados"
      },
      "input_schema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "output_schema": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "abreviatura": { "type": "string", "description": "Abreviatura oficial, por ejemplo DF para Ciudad de México." },
            "entidad": { "type": "string", "description": "Nombre de la entidad federativa." }
          },
          "required": ["abreviatura", "entidad"]
        }
      },
      "safety": { "read_only": true, "requires_auth": false }
    }
  ],
  "ui_entry_points": [
    {
      "name": "Iniciar búsqueda completa de antecedentes ($399 MXN)",
      "url": "https://investigalo.com.mx/formulario",
      "description": "Acción de pago: requiere intervención humana. Un agente puede pre-rellenar el nombre con ?nombre=..."
    },
    {
      "name": "Verificar publicaciones 69, 69-B y 69-B Bis del SAT (gratis)",
      "url": "https://investigalo.com.mx/listas-negras-sat"
    }
  ]
}
