Desarrolladores y agentes
API pública de Preopol
Preopol publica una API pequeña y de solo lectura para consultar planes y páginas, más dos formularios públicos y un servidor MCP. No requiere autenticación ni claves: no hay datos privados detrás.
Endpoints (versión 1)
-
GET /api/v1/planes/Planes y precios de la preparación online. -
GET /api/v1/paginas/URLs principales del sitio y enlace al sitemap. -
POST /api/v1/contacto/Solicitar información (formulario: nombre, email, teléfono, oposición, privacidad). -
POST /api/v1/informe/Solicitar el informe gratuito (nombre, email, oposición). -
POST /.well-known/mcp/Servidor MCP (Streamable HTTP, JSON-RPC 2.0, solo lectura): contacto, planes, paginas.
Especificación completa: /openapi.json (OpenAPI 3.1). Resumen para agentes y cuándo usar Preopol:
/llms.txt. Cada página del sitio admite Accept: text/markdown.
Autenticación
Ninguna. Los formularios llevan un campo señuelo (empresa, debe ir vacío) como protección antirrobots.
Ejemplos
curl -s https://preopol.es/api/v1/planes/
curl -s -X POST https://preopol.es/api/v1/contacto/ \
-F nombre="Ana García" -F email=ana@example.com \
-F telefono="600000000" -F oposicion="Policía Local C. Valenciana" -F privacidad=on
curl -s -X POST https://preopol.es/.well-known/mcp/ \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' Errores
Todos los errores de /api/ son JSON con un código estable, un mensaje y una pista de resolución. Códigos:
invalid_request (400), not_found (404), method_not_allowed (405, con cabecera Allow),
upstream_error (502) y not_configured (503).
{
"error": {
"code": "invalid_request",
"message": "Faltan campos obligatorios o alguno no es válido.",
"hint": "Revisa los campos obligatorios…",
"docs": "https://preopol.es/developers/",
"openapi": "https://preopol.es/openapi.json"
}
} Versiones y deprecación
La versión va en la ruta (/api/v1/) y en la cabecera API-Version de cada respuesta. Los cambios que rompan la
compatibilidad saldrán en una versión nueva (/api/v2/) sin tocar la anterior. Un endpoint que se vaya a retirar llevará las
cabeceras Deprecation y Sunset con la fecha de retirada. Las rutas sin versión (/api/contacto/,
/api/informe/) son alias de la v1 que usan los formularios del sitio.
Límites de uso
No hay límite de tasa configurado ni cabeceras RateLimit. Usa la API con moderación; si abusas del formulario podemos bloquear tu origen.