API pública
Sólo lectura, sin autenticación y sin clave. Los mismos datos que ves en las páginas, en JSON.
Base
https://api.licitia.com.mx/api/open/v1
Paginación
Sólo por cursor. Los parámetros page y offset se rechazan con un error que lo explica. No es capricho: los rastreadores siguen la paginación hasta el final, y con desplazamiento sobre 365 mil filas eso acaba pidiéndole a la base que produzca y deseche 360 mil filas ordenadas para devolver veinte.
Usa page_info.next_cursor. Un cursor recuerda con qué orden y combinación de filtros se generó; se rechaza si se usa con otros, porque si no devolvería una página plausible y equivocada.
Caché
Todas las respuestas traen ETag; manda If-None-Match y recibirás 304. Los procedimientos concluidos casi nunca cambian, así que se sirven con caché larga. Para mantenerte al día no vuelvas a recorrer el corpus: usa /licitaciones/cambios?desde=.
Formatos por página
Los procedimientos aceptan .md, .json y .ocds.json (Open Contracting Data Standard 1.1). Los perfiles y sus historiales aceptan .md y .json, también mediante negociación por cabecera Accept.
Para modelos
Hay un llms.txt con la gramática de URLs y un endpoint MCP de sólo lectura en https://api.licitia.com.mx/api/open/v1/mcp con cinco herramientas. Cada respuesta incluye la URL HTML para citar — nunca el sufijo .json ni .md.
Límites y licencia
600 peticiones por minuto por IP. CC BY 4.0: úsalo para lo que quieras, cita LicitIA y la URL HTML del recurso, sin sufijo de formato.
Recursos
| Endpoint | Qué devuelve |
|---|---|
| GET /licitaciones/{numero} | Un procedimiento por su número |
| GET /licitaciones | Búsqueda por etapa, dependencia, año, estatus, tipo o clave CUCOP |
| GET /licitaciones/cambios?desde= | Lo que cambió desde una fecha |
| GET /proveedores/{slug} | Perfil de una empresa |
| GET /compradores/{slug} | Perfil de una dependencia |
| GET /unidades/{slug} | Perfil de una unidad compradora |
| GET /categorias/{clave} | Precios unitarios por clave CUCOP |
| GET /{entidad}/{clave}/procedimientos | Historial completo con cursor, total y snapshot |
| GET /buscar?q=&tipo=&limit= | Búsqueda transversal; hasta 50 coincidencias por tipo |
| GET /hubs | Conteos por estado, año, ramo, tipo, estatus y etapa LicitIA |
| GET /sitemap | Índice de fragmentos del sitemap |
Contrato completo en openapi.json. Metodología y límites de los datos en /datos.