Guía de Uso de la API de Mercado Público / ChileCompra
Documento Técnico de Referencia Unificada Cobertura completa de la API Compra Ágil v2 (Guía de Uso v3.0 - Mayo 2026), API Licitaciones v1 y API Órdenes de Compra v1. Incorpora el mapeo validado de campos y valores observados en pruebas reales contra producción, ejecutadas el 2026-08-20 (detalle en
docs/technical/40-api-externa-chilecompra-mercadopublico.md, §11 Anexo de pruebas reales).
Tabla de Contenidos
- Introducción General y Ecosistema de APIs
- Primeros Pasos y Autenticación
- Control de Cuota y Manejo de Rate Limits (HTTP 429)
- API Compra Ágil v2 (
api2.mercadopublico.cl) - API Licitaciones v1 (
api.mercadopublico.cl) - API Órdenes de Compra v1 (
api.mercadopublico.cl) - Estructura Estándar de Errores HTTP
- Ejemplos Prácticos de Código (Python & cURL)
- 8.1 Ver compras publicadas en la última hora (
ttl_cambio_ms) - 8.2 Sincronización incremental entre dos fechas
- 8.3 Buscar por palabras clave y región
- 8.4 Obtener el detalle de una Compra Ágil
- 8.5 Recorrer todas las páginas de resultados
- 8.6 Detectar emisión de OC en Compras Ágiles con proveedor seleccionado
- 8.7 Manejo automatizado del error HTTP 429
- 8.1 Ver compras publicadas en la última hora (
- Glosario de Términos
- Políticas, Condiciones de Uso y Límites de Responsabilidad
- Descarga de Documentos Adjuntos Oficiales
- Recomendaciones de Integración
1. Introducción General y Ecosistema de APIs
El ecosistema de servicios web de Mercado Público (gestionado por ChileCompra - DCCP) permite a desarrolladores, organismos públicos y ciudadanía acceder de forma estructurada a los procesos de compra del Estado de Chile.
Actualmente existen dos dominios principales según la versión del servicio:
| Ecosistema / Módulo | Base URL | Formatos | Descripción |
|---|---|---|---|
| API Compra Ágil v2 | https://api2.mercadopublico.cl | JSON REST | API de segunda generación para el mecanismo de contratación simplificada. Soporta paginación moderna, sincronización incremental y detalle extendido. |
| API Licitaciones v1 | https://api.mercadopublico.cl | JSON, JSONP, XML | Servicio tradicional para consultar licitaciones públicas y privadas diarias o históricas. |
| API Órdenes de Compra v1 | https://api.mercadopublico.cl | JSON, JSONP, XML | Servicio tradicional para consultar las Órdenes de Compra (OC) emitidas por organismos del Estado. |
Casos de Uso Principales
- Monitoreo de oportunidades en tiempo real: Detectar contrataciones publicadas en los últimos minutos u horas.
- Sincronización incremental: Mantener bases de datos locales (ej. PostgreSQL) actualizadas descargando únicamente los cambios recientes (
ttl_cambio_msocambio_desde). - Búsqueda y analítica: Filtrar por región, estado, palabras clave y montos.
- Transparencia y auditoría: Consultar oferentes, cotizaciones presentadas, proveedores seleccionados y órdenes de compra emitidas.
2. Primeros Pasos y Autenticación
2.1 Requisitos Previos
- Un Ticket de Acceso válido expedido por ChileCompra.
- Conexión a Internet desde el entorno donde se ejecuten las solicitudes HTTP.
- Cliente HTTP (cURL, Python
requests, Node.jsfetch, Postman, etc.).
2.2 Proceso para Obtener el Ticket de Acceso
El acceso a todas las APIs requiere un ticket (API Key UUID) que identifica al cliente y controla su cuota de consumo diaria.
Pasos oficiales para solicitarlo:
- Ingrese a https://www.chilecompra.cl/api/ en su navegador.
- Haga clic en el botón «Pide tu ticket».
- Acepte los términos y condiciones de uso e inicie sesión con su ClaveÚnica.
- Complete el formulario de solicitud y seleccione la opción «Solicitar ticket».
- Recibirá el ticket automáticamente por correo electrónico. (Si no lo encuentra, revise la carpeta de correo no deseado / spam).
[!CAUTION] Guarde el ticket de forma segura. No lo exponga públicamente en clientes front-end ni lo incluya en repositorios públicos.
2.3 Reglas de Autenticación por Versión de API
Toda solicitud HTTP debe incluir el ticket de acceso, pero la forma de enviarlo depende de la versión del servicio. Estas reglas fueron verificadas en pruebas reales contra producción (2026-08-20):
- APIs v1 (Licitaciones / Órdenes de Compra,
api.mercadopublico.cl): El ticket se envía únicamente como parámetro de Query String:?ticket=TU_TICKET.[!WARNING] Si el ticket se envía como Header HTTP
ticket:en las APIs v1, la API respondeHTTP 203 Non-Authoritative Informationcon cuerpo{"Codigo": 203, "Mensaje": "Ticket no válido."}. En v1 no utilice el header. - API Compra Ágil v2 (
api2): Se envía obligatoriamente en el Header HTTPticket. Sin este header (o si se intenta por query string), la API responde con error401 Unauthorized.
Ejemplo de Autenticación en cURL
# v2 (Compra Ágil): ticket en el Header HTTP
curl -H "ticket: TU_TICKET_AQUI" \
"https://api2.mercadopublico.cl/v2/compra-agil?ttl_cambio_ms=300000"
# v1 (Licitaciones / Órdenes de Compra): ticket en la Query String
curl "https://api.mercadopublico.cl/servicios/v1/publico/licitaciones.json?codigo=2284-24-L125&ticket=TU_TICKET_AQUI"
Ejemplo de Autenticación en Python
import requests
TICKET = 'TU_TICKET_AQUI'
BASE_URL = 'https://api2.mercadopublico.cl'
headers = {'ticket': TICKET}
params = {'ttl_cambio_ms': 300000}
response = requests.get(f'{BASE_URL}/v2/compra-agil', headers=headers, params=params)
print(response.json())
2.4 Latencia Observada y Configuración de Timeouts
Las mediciones reales contra producción (2026-08-20) muestran comportamientos muy distintos entre versiones:
| Servicio | Latencia Observada | Timeout Recomendado en el Cliente |
|---|---|---|
APIs v1 (api.mercadopublico.cl) | 50 ms – 570 ms | 5 a 10 segundos |
API v2 Compra Ágil (api2.mercadopublico.cl) | 12.000 – 20.000 ms | mínimo 30 a 40 segundos |
[!WARNING] La API v2 (Compra Ágil) presenta latencias de hasta 20 segundos por la alta carga del API Gateway de ChileCompra. Un timeout por defecto de 10 s provocará fallos intermitentes en producción.
3. Control de Cuota y Manejo de Rate Limits (HTTP 429)
Para garantizar la disponibilidad del servicio, la API implementa un control de cuota diaria por ticket basado en el algoritmo Token Bucket.
3.1 Funcionamiento de la Cuota
- Cuota Diaria: Cada ticket de acceso cuenta con un límite estándar de 10.000 solicitudes diarias, el cual no es modificable.
- Reset Automático: El contador vuelve a cero al cambiar la fecha en zona horaria UTC / medianoche calendario, independientemente de la hora a la que se realizó la primera consulta.
- Cuota Ilimitada: Un valor de
-1en la cuota del ticket indica uso ilimitado (tickets especiales/institucionales). - Monitoreo por IP: ChileCompra realiza validaciones permanentes por dirección IP, pudiendo establecer restricciones si se detectan solicitudes excesivas desde una misma dirección.
3.2 Comportamiento al Exceder el Límite (HTTP 429)
Cuando el ticket agota su cuota disponible:
- Código de respuesta HTTP:
429 Too Many Requests. - La API retorna la siguiente estructura JSON:
{
"success": "NOK",
"trace": null,
"payload": null,
"errors": [
{
"codigo": "429",
"mensaje": "Se ha alcanzado el límite de solicitudes permitido. Intente nuevamente más tarde.",
"detalle": null
}
]
}
3.3 Recomendaciones de Implementación
- Captura del Error 429: Implementar el manejo del código
429en el cliente antes de pasar a producción. - Reintento: Si recibe un
429, suspender las peticiones hasta el inicio del siguiente día calendario o consultar el valor del headerRetry-After. - Descargas Masivas Nocturnas: Para procesos de alta demanda o descarga masiva de información, se recomienda realizar las consultas en horario nocturno (entre las 22:00 y las 07:00 horas).
- Sincronización Incremental: Optimizar el tráfico utilizando parámetros de cambios (
ttl_cambio_msocambio_desde) en lugar de consultas masivas repetitivas.
3.4 Límite de Ráfaga (Burst) y Throttling
Además de la cuota diaria, las pruebas reales (2026-08-20) confirmaron un límite de ráfaga: llamadas consecutivas a más de 4 req/seg gatillan HTTP 429 Too Many Requests incluso sin haber agotado la cuota diaria del ticket.
Mitigaciones recomendadas:
- Throttle entre llamadas: aplicar una pausa de 250 a 500 ms entre solicitudes consecutivas.
- Rotación de tickets (round-robin): distribuir las solicitudes entre varios tickets válidos para diluir la tasa por ticket (ver Sección 12).
4. API Compra Ágil v2 (api2.mercadopublico.cl)
Compra Ágil es el mecanismo de contratación simplificada de Mercado Público para compras de menor monto. Cada proceso tiene un código único con el formato 1057539-228-COT26.
4.1 Endpoints Disponibles
| Endpoint | Método | Descripción |
|---|---|---|
/v2/compra-agil | GET | Listado y búsqueda de Compras Ágiles con filtros y paginación. |
/v2/compra-agil/{codigo} | GET | Detalle completo de una Compra Ágil específica por su código externo. |
4.2 Parámetros de Consulta (Query Parameters)
Grupo 1: Ventana de Cambios (Sincronización Incremental)
Define qué registros retornar según modificaciones recientes. Usar Opción A o B (nunca ambas a la vez).
| Parámetro | Tipo | Descripción | Ejemplo |
|---|---|---|---|
ttl_cambio_ms | int (ms) | Opción A: Retorna cambios ocurridos en los últimos X milisegundos. | 3600000 (última hora) |
cambio_desde | datetime ISO-8601 | Opción B: Fecha/hora inicio de la ventana de cambios. | 2026-01-19T00:00:00Z |
cambio_hasta | datetime ISO-8601 | Opción B: Fecha/hora fin de la ventana de cambios. | 2026-01-20T00:00:00Z |
Grupo 2: Fecha de Publicación
| Parámetro | Tipo | Descripción | Ejemplo |
|---|---|---|---|
publicado_desde | datetime ISO-8601 | Fecha/hora mínima de publicación. | 2026-01-01T00:00:00Z |
publicado_hasta | datetime ISO-8601 | Fecha/hora máxima de publicación. | 2026-01-31T23:59:59Z |
Grupo 3: Estado del Proceso
Admite múltiples valores separados por coma (ej: estado=publicada,proveedor_seleccionado).
| Valor | Descripción |
|---|---|
publicada | La Compra Ágil está abierta y recibiendo cotizaciones. |
cerrada | El plazo de recepción de cotizaciones finalizó. |
desierta | El proceso finalizó sin ofertas válidas. |
cancelada | El proceso fue cancelado por el organismo comprador. |
proveedor_seleccionado | Se seleccionó un proveedor ganador. (Incluye Compras Ágiles con OC emitida). |
oc_emitida | Se emitió Orden de Compra. ⚠ Ver advertencia técnica abajo. |
[!WARNING] Limitación conocida — Filtro por organismo (
codigo_organismo):
A diferencia de las APIs v1 de Licitaciones y Órdenes de Compra, la API Compra Ágil v2 NO dispone del parámetrocodigo_organismo.
Para obtener datos de un organismo específico, se debe consultar por región (region=) y filtrar posteriormente en cliente/base de datos porinstitucion.rutoinstitucion.organismo_comprador.
[!WARNING] Comportamiento real del estado
oc_emitida: El valoroc_emitidaestá contemplado en el modelo de datos pero en la práctica las Compras Ágiles con Orden de Compra emitida se mantienen bajo el estadoproveedor_seleccionado. Para detectar si se emitió la OC, consulte el detalle del proceso y verifique siid_orden_compra(campo plano observado en respuestas reales) uorden_compra.id_orden_compra(guía oficial) es distinto denull(ver Sección 4.5).
Grupo 4: Región del Organismo Comprador
Filtra por región (entero de 1 a 16, repetible o separado por comas, ej: region=13,5).
| Código | Región | Código | Región |
|---|---|---|---|
1 | Tarapacá | 9 | Araucanía |
2 | Antofagasta | 10 | Los Lagos |
3 | Atacama | 11 | Aysén |
4 | Coquimbo | 12 | Magallanes y Antártica |
5 | Valparaíso | 13 | Metropolitana |
6 | O'Higgins | 14 | Los Ríos |
7 | Maule | 15 | Arica y Parinacota |
8 | Biobío | 16 | Ñuble |
Grupo 5: Búsqueda por Código o Texto Libre
id y q son mutuamente excluyentes (solo se debe enviar uno).
| Parámetro | Tipo | Descripción | Ejemplo |
|---|---|---|---|
id | string | Código exacto de la Compra Ágil. | 1057539-228-COT26 |
q | string (URL-encoded) | Palabras clave para búsqueda en nombre/descripción. | materiales%20electricos |
Grupo 6: Paginación
| Parámetro | Tipo | Default | Máximo | Descripción |
|---|---|---|---|---|
tamano_pagina | int | 15 | 50 | Cantidad de resultados por página. |
numero_pagina | int | 1 | N/A | Número de página a consultar (comienza en 1). |
Grupo 7: Ordenamiento
Valor ordenar_por | Descripción |
|---|---|
FechaUltimaModificacion | (Default) Ordena por fecha del último cambio, descendente. |
FechaPublicacion | Ordena por fecha de publicación, descendente. |
4.3 Reglas del Modelo, Estados y Convocatorias
Reglas de Convocatoria (Llamados)
Una Compra Ágil puede tener un primer o un segundo llamado a cotizar:
estado: "publicada"+estado_convocatoria: 1$\rightarrow$ Primer llamado abierto.estado: "publicada"+estado_convocatoria: 2$\rightarrow$ Segundo llamado abierto.estado: "cerrada"+estado_convocatoria: 1$\rightarrow$ Primer llamado cerrado.estado: "cerrada"+estado_convocatoria: 2$\rightarrow$ Segundo llamado cerrado.
Reglas para proveedores_cotizando[]
- El arreglo de proveedores cotizando retorna únicamente las cotizaciones del llamado en el que se encuentra o finalizó la Compra Ágil.
- Si el proceso está en Segundo Llamado, solo se muestran las cotizaciones recibidas en el Segundo Llamado.
- Si no se recibieron ofertas, el campo retorna un arreglo vacío
[]. - El detalle completo de cotizaciones se visibiliza a partir del estado
Cerradaen el llamado correspondiente.
Mapeo Numérico de Estados (estado.id_estado)
Valores confirmados en respuestas reales de la API v2 (pruebas 2026-08-20):
id_estado | codigo | Glosa |
|---|---|---|
2 | publicada | Publicada |
3 | cerrada | Cerrada |
4 | proveedor_seleccionado | Proveedor Seleccionado |
5 | desierta | Desierta |
6 | cancelada | Cancelada |
4.4 Referencia de Campos (Esquema JSON Completo)
Todas las respuestas exitosas de la API v2 tienen el envoltorio:
{
"success": "OK",
"trace": null,
"payload": { ... },
"errors": null
}
4.4.1 Campos del Listado (payload.items[])
| Campo | Tipo | Descripción |
|---|---|---|
codigo | string | Código único del proceso (ej: "1057539-228-COT26"). |
nombre | string | Título del proceso de compra. |
estado.id_estado | int | Identificador numérico del estado. |
estado.codigo | string | Código normalizado (publicada, cerrada, desierta, cancelada, proveedor_seleccionado). |
estado.glosa | string | Descripción del estado (ej: "OC Emitida", "Publicada"). |
convocatoria.estado_convocatoria | int | Etapa del llamado (1 = primer llamado, 2 = segundo llamado). |
convocatoria.descripcion | string | Glosa del llamado (ej: "Primer llamado"). |
documentos[].id | int | string | ID del documento adjunto. ⚠ En respuestas reales se observa como entero (ej: 1774796), no como UUID. |
documentos[].nombre | string | Nombre del archivo adjunto. |
fechas.fecha_publicacion | datetime ISO-8601 | Fecha y hora de publicación. |
fechas.fecha_cierre | datetime ISO-8601 | Fecha y hora de cierre del llamado vigente. |
fechas.fecha_ultimo_cambio | datetime ISO-8601 | Timestamp del último cambio (clave para sincronización incremental). |
fechas.fecha_cancelacion | datetime | null | Fecha de cancelación (si aplica). |
montos.moneda | string | Moneda del presupuesto (ej: "CLP"). |
montos.monto_disponible | number | Monto disponible informado por el comprador. |
montos.monto_disponible_clp | number | Monto disponible normalizado en CLP. |
institucion.organismo_comprador | string | Nombre de la institución pública. |
institucion.rut | string | RUT del organismo comprador. |
institucion.unidad_compra | string | Unidad o división compradora. |
institucion.region | int | null | Código de región (1 a 16). |
institucion.nombre_region | string | null | Nombre de la región. |
resumen.total_ofertas_recibidas | int | Total de cotizaciones recibidas en el llamado actual. |
motivos.motivo_cancelacion | string | null | Motivo de cancelación (si aplica). |
motivos.motivo_desierta | string | null | Motivo de declaración desierta (si aplica). |
motivos.motivo_seleccion | string | null | Motivo de selección del proveedor (si aplica). |
links.detalle | string | Ruta relativa para consultar el detalle (ej: "/v2/compra-agil/1057539-228-COT26"). |
4.4.2 Campos de Paginación (payload.paginacion)
| Campo | Tipo | Descripción |
|---|---|---|
total_paginas | int | Total de páginas disponibles. |
numero_pagina | int | Número de la página actual. |
tamano_pagina | int | Cantidad de elementos por página. |
total_resultados | int | Total de registros que coinciden con la búsqueda. |
4.4.3 Campos del Detalle (payload)
El endpoint GET /v2/compra-agil/{codigo} entrega los datos completos del proceso:
| Campo | Tipo | Descripción |
|---|---|---|
codigo | string | Código del proceso de Compra Ágil. |
nombre | string | Título del proceso. |
descripcion | string | Descripción detallada de la necesidad publicada. |
estado.id_estado | int | ID numérico del estado. |
estado.codigo | string | Código del estado (publicada, proveedor_seleccionado, etc.). |
estado.glosa | string | Glosa legible del estado. |
convocatoria.estado_convocatoria | int | 1 = primer llamado, 2 = segundo llamado. |
convocatoria.descripcion | string | Glosa del llamado. |
convocatoria.fecha_cierre_primer_llamado | datetime | null | Cierre del primer llamado. ⚠ Formato observado: "YYYY-MM-DD HH:mm" (ej: "2026-08-14 11:00"). |
convocatoria.fecha_cierre_segundo_llamado | datetime | null | Cierre del segundo llamado. ⚠ Formato observado: "YYYY-MM-DD HH:mm" (ej: "2026-08-18 11:00"). |
fechas.fecha_publicacion | datetime | Fecha y hora de publicación. |
fechas.fecha_cierre | datetime | Fecha de cierre del llamado activo. |
fechas.fecha_ultimo_cambio | datetime | Timestamp del último cambio. |
fechas.fecha_cancelacion | datetime | null | Fecha de cancelación. |
entrega.direccion_entrega | string | Dirección física de entrega de bienes/servicios. |
entrega.plazo_entrega_dias | int | null | Plazo exigido en días corridos. |
documentos[] | array | Lista de documentos adjuntos (id, nombre). |
presupuesto.tipo_presupuesto | string | "Disponible" o "Estimado". |
presupuesto.moneda | string | Moneda (ej: "CLP", "USD"). |
presupuesto.presupuesto_estimado | number | null | Presupuesto estimado. |
presupuesto.monto_disponible | number | null | Monto disponible informado. |
presupuesto.monto_disponible_clp | number | null | Monto normalizado a CLP. |
presupuesto.valor_cambio_moneda | number | null | Tipo de cambio aplicado (si moneda $\neq$ CLP). |
presupuesto.fecha_cambio_moneda | datetime | null | Fecha del tipo de cambio. |
id_orden_compra | int | null | ⚠ Campo plano observado en respuestas reales. ID numérico de la Orden de Compra emitida (ej: 55348066). |
orden_compra.id_orden_compra | int | null | Indicador de OC según la guía oficial. ID de la Orden de Compra si fue emitida. ⚠ Ver nota al final de esta tabla. |
orden_compra.id_oc | int | null | ID interno de la OC para vincular con la API v1 de Órdenes de Compra. |
orden_compra.codigo_orden_compra | string | null | Código externo de la OC (ej: "1057532-156-AG26"). ⚠ Suele retornar null en la API real. |
orden_compra.estado_orden_compra | string | null | Estado de la OC. ⚠ Suele retornar null en la API real. |
institucion.organismo_comprador | string | Nombre de la institución. |
institucion.rut | string | RUT institucional. |
institucion.unidad_compra | string | Unidad/División. |
institucion.region | int | null | Código de región (1-16). |
institucion.nombre_region | string | null | Nombre de la región. |
[!WARNING] Guía oficial vs. comportamiento real — vinculación con la OC: En las respuestas reales observadas (2026-08-20, proceso
2284-520-COT26), la OC vinculada no retorna como objeto anidadoorden_compra, sino como el campo planopayload.id_orden_compra(int|null; ej:55348066). La estructura anidadaorden_compra.*se conserva en esta tabla como referencia de la guía oficial; la lógica de detección debe verificar ambas formas:id_oc = det.get('id_orden_compra') or det.get('orden_compra', {}).get('id_orden_compra')
4.4.4 Productos Solicitados (payload.productos_solicitados[])
| Campo | Tipo | Descripción |
|---|---|---|
codigo_producto | int | string | Código del producto en el catálogo UNSPSC de Mercado Público. |
nombre | string | Nombre del producto o servicio. |
descripcion | string | null | Especificación técnica detallada. |
cantidad | number | Cantidad requerida. |
unidad_medida | string | Unidad de medida (ej: "EA" = Unidad, "KG" = Kilogramo). |
4.4.5 Proveedores Cotizando (payload.proveedores_cotizando[])
Contiene las ofertas ingresadas por los proveedores en el llamado correspondiente. Los nombres y tipos de clave fueron validados contra respuestas reales (2026-08-20, proceso 2284-520-COT26: 3 cotizaciones, ganadora "SOC DE INGENIERIA Y SERVICIOS HOGG Y SERRANO LIMITADA", RUT 79.555.420-3, oferta $2.250.000 neto / $2.677.500 total, OC vinculada 55348066):
| Campo | Tipo | Descripción |
|---|---|---|
rut_proveedor | string | RUT del proveedor ofertante. |
razon_social | string | Razón social o nombre del proveedor. |
es_emt | int | Empresa de Menor Tamaño (1 = Sí, 0 = No). ⚠ La guía oficial documenta boolean; en respuestas reales se observa el entero 0/1. |
id_cotizacion | int | ID interno de la cotización. |
codigo_empresa | string | Código de la empresa en Mercado Público. |
codigo_sucursal_empresa | string | Código de la sucursal de la empresa. |
estado | int | Estado de la cotización (2 = Válida/Admisible, 3 = Inadmisible). ⚠ La guía oficial documenta el objeto anidado estado_cotizacion { id, glosa }; en respuestas reales se observa el entero plano estado. |
justificacion_inadmisibilidad | string | null | Fundamento del rechazo cuando estado == 3. |
estado_por_comprador | string | null | Estado asignado por el comprador. |
proveedor_seleccionado | int | Indicador de adjudicación (1 = Ganadora, 0 = No seleccionada). ⚠ La guía oficial documenta seleccion.proveedor_seleccionado como boolean; en respuestas reales se observa el entero plano. |
seleccion.motivo_seleccion | string | null | Razón de la elección del comprador (estructura de la guía oficial). |
seleccion.criterio_seleccion | string | null | Criterio aplicado para adjudicar (estructura de la guía oficial). |
activo | boolean | null | true si la oferta se mantiene activa. |
id_oc | int | null | ID de la OC asignada a la cotización ganadora. |
fecha_creacion | datetime | Fecha y hora en que se envió la oferta (ISO-8601; ej: "2026-08-17T12:02:58.013Z"). |
fecha_vigencia | datetime | null | Fecha límite de validez de la oferta. |
valor_neto | number | null | Valor total neto (sin impuestos). |
total_impuesto | number | null | Monto total de impuestos (ej: IVA). |
monto_despacho | number | null | Costo de envío o despacho. |
monto_total | number | null | Monto final ofertado (neto + impuesto + despacho). |
nombre_impuesto | string | null | Tipo de impuesto (ej: "IVA"). |
porcentaje_impuesto | number | null | Porcentaje de impuesto (ej: 19). |
descripcion_cotizacion | string | null | Observaciones/propuesta del proveedor. |
descripcion | string | null | Descripción adicional de la cotización. |
Detalle de Ítems Cotizados (proveedores_cotizando[].productos_cotizados[])
codigo_producto(int|string): Código del producto cotizado.nombre_producto(string): Nombre del producto.descripcion(string|null): Especificación ofertada.cantidad(number): Cantidad ofertada.precio_unitario(number|null): Precio unitario neto.monto_total_producto(number|null): Total neto de la línea (cantidad * precio_unitario).
4.4.6 Resumen, Motivos y Flags
| Campo | Tipo | Descripción |
|---|---|---|
resumen.multa_sancion | number | null | Monto de multas o sanciones estipuladas. |
resumen.total_ofertas_recibidas | int | Total de ofertas ingresadas. |
resumen.total_demandas | int | Total de demandas agrupadas. |
motivos.motivo_cancelacion | string | null | Razón de cancelación del proceso. |
motivos.motivo_desierta | string | null | Razón de declaración desierta. |
flags.considera_requisitos_medioambientales | boolean | true si exige criterios sustentables. |
flags.considera_requisitos_impacto_social_economico | boolean | true si incluye impacto social/económico. |
4.5 Relación entre Compra Ágil y Órdenes de Compra
Cuando un organismo adjudica una Compra Ágil, se emite una Orden de Compra (OC). En la API de Compra Ágil v2:
- Según la guía oficial,
orden_compra.id_orden_compraoorden_compra.id_octendrá un valor numérico entero (distinto denull). - ⚠ Según el comportamiento real observado (2026-08-20), la vinculación retorna como el campo plano
payload.id_orden_compra(int|null; ej:55348066para el proceso2284-520-COT26), sin el objeto anidadoorden_compra. La lógica de detección debe cubrir ambas formas (ver advertencia en 4.4.3). - Para obtener el código textual de la OC (ej:
"2284-672-AG26") y su detalle completo, utilice el IDid_orden_comprapara consultar la API v1 de Órdenes de Compra (ver Sección 6) o mapearlo contra el listado de transacciones históricas (ver Sección 12).
5. API Licitaciones v1 (api.mercadopublico.cl)
Permite consultar licitaciones públicas y privadas del Estado de Chile.
5.1 Endpoints, Formatos y Tipos de Consulta
Base URL: https://api.mercadopublico.cl/servicios/v1/publico/licitaciones.{formato}
Formatos disponibles: .json, .jsonp, .xml.
Tipos de Consulta HTTP GET
- Por código exacto de licitación:
GET /servicios/v1/publico/licitaciones.json?codigo=1509-5-L114&ticket=TU_TICKET - Licitaciones activas (publicadas el día de hoy):
GET /servicios/v1/publico/licitaciones.json?estado=activas&ticket=TU_TICKET - Por fecha específica (formato
ddmmaaaa):GET /servicios/v1/publico/licitaciones.json?fecha=02022026&ticket=TU_TICKET - Por estado y fecha específica:
GET /servicios/v1/publico/licitaciones.json?fecha=02022026&estado=adjudicada&ticket=TU_TICKET - Por código de organismo público:
GET /servicios/v1/publico/licitaciones.json?fecha=02022026&CodigoOrganismo=6945&ticket=TU_TICKET - Por código de proveedor:
GET /servicios/v1/publico/licitaciones.json?fecha=02022026&CodigoProveedor=17793&ticket=TU_TICKET
5.2 Códigos de Estado de Licitaciones
En la respuesta de la API v1, los estados de las licitaciones se representan mediante códigos numéricos:
| Código | Estado | Descripción |
|---|---|---|
5 | Publicada | La licitación se encuentra abierta recibiendo ofertas. |
6 | Cerrada | Finalizó el plazo de recepción de ofertas. |
7 | Desierta | No se presentaron ofertas válidas o admisibles. |
8 | Adjudicada | Se seleccionó la oferta ganadora y se dictó el acto administrativo. |
18 | Revocada | El proceso fue dejado sin efecto por la institución. |
19 | Suspendida | El proceso se encuentra pausado temporalmente por la autoridad. |
5.3 Catálogos y Anexos de Licitaciones
5.3.1 Tipos de Licitación
| Código | Sigla | Descripción Completa |
|---|---|---|
1 | L1 | Licitación Pública Menor a 100 UTM |
2 | LE | Licitación Pública Entre 100 y 1000 UTM |
3 | LP | Licitación Pública Mayor a 1000 UTM |
4 | LS | Licitación Pública de Servicios Personales Especializados |
5 | A1 | Licitación Privada por Licitación Pública anterior sin oferentes |
6 | B1 | Licitación Privada por otras causales, excluidas de la Ley de Compras |
7 | J1 | Licitación Privada por Servicios de Naturaleza Confidencial |
8 | F1 | Licitación Privada por Convenios con Personas Jurídicas Extranjeras fuera del Territorio Nacional |
9 | E1 | Licitación Privada por Remanente de Contrato anterior |
10 | CO | Licitación Privada entre 100 y 1000 UTM |
11 | B2 | Licitación Privada Mayor a 1000 UTM |
12 | A2 | Trato Directo por Producto de Licitación Privada anterior sin oferentes o desierta |
13 | D1 | Trato Directo por Proveedor Único |
14 | E2 | Licitación Privada Menor a 100 UTM |
15 | C2 | Trato Directo (Cotización) |
16 | C1 | Compra Directa (Orden de Compra) |
17 | F2 | Trato Directo (Cotización) |
18 | F3 | Compra Directa (Orden de Compra) |
19 | G2 | Directo (Cotización) |
20 | G1 | Compra Directa (Orden de Compra) |
21 | R1 | Orden de Compra menor a 3 UTM |
22 | CA | Orden de Compra sin Resolución |
23 | SE | Orden de Compra proveniente de adquisición sin emisión automática de OC |
5.3.2 Unidades Monetarias
CLP: Peso ChilenoCLF: Unidad de Fomento (UF)USD: Dólar AmericanoUTM: Unidad Tributaria MensualEUR: Euro
5.3.3 Monto Estimado
1: Presupuesto Disponible2: Precio Referencial
5.3.4 Modalidad de Pago
1: Pago a 30 días2: Pago a 30, 60 y 90 días3: Pago al día4: Pago Anual5: Pago a 60 días6: Pagos Mensuales7: Pago Contra Entrega Conforme8: Pago Bimensual9: Pago Por Estado de Avance10: Pago Trimestral
5.3.5 Unidades de Tiempo (Evaluación y Duración de Contrato)
1: Horas2: Días3: Semanas4: Meses5: Años
5.3.6 Tipo de Acto Administrativo de Adjudicación
1: Autorización2: Resolución3: Otros4: Decreto5: Acuerdo
5.4 Lógica de Valores Binarios (XML/JSON)
Varios campos de la API v1 utilizan codificación binaria/numérica:
| Campo | Comentario | Valores | Ej. XML |
|---|---|---|---|
| Informada | Indica si la licitación es informada. | 1 = Sí, 0 = No | <Informada>0</Informada> |
| CodigoTipo | Tipo de licitación. | 1 = Pública, 2 = Privada | <CodigoTipo>1</CodigoTipo> |
| TomaRazon | Requiere toma de razón en Contraloría. | 1 = Sí, 0 = No | <TomaRazon>0</TomaRazon> |
| EstadoPublicidadOfertas | Ofertas técnicas públicas post apertura. | 1 = Sí, 0 = No | <EstadoPublicidadOfertas>1</EstadoPublicidadOfertas> |
| Contrato | Exige firma de contrato formal. | 1 = Sí, 0 = No | <Contrato>0</Contrato> |
| Obras | Licitación de Obra Pública. | 2 = Sí, 1 = No | <Obras>1</Obras> |
| VisibilidadMonto | Visibilidad del monto estimado. | 1 = Sí, 0 = No | <VisibilidadMonto>1</VisibilidadMonto> |
| SubContratacion | Permite subcontratación. | 1 = Sí, 0 = No | <SubContratacion>1</SubContratacion> |
| ExtensionPlazo | Extensión automática de plazo según art. 25. | 1 = Extiende, 0 = No extiende | <ExtensionPlazo>0</ExtensionPlazo> |
| EsBaseTipo | Creada usando bases tipo. | 1 = Sí, 0 = No | <EsBaseTipo>0</EsBaseTipo> |
| EsRenovable | Contrato renovable. | 1 = Sí, 0 = No | <EsRenovable>0</EsRenovable> |
5.5 Referencia de Campos (Diccionario de Datos Observado)
Mapeo exhaustivo de las claves de la respuesta JSON, validado contra el proceso real 2284-24-L125 — "INSUMOS CLINICOS DESTINADOS AL AREA DE SALUD MUNICIPAL. SOLICITUD Nº 4646-2025", I MUNICIPALIDAD VALDIVIA (pruebas del 2026-08-20). Los valores "" o null corresponden a estados vacíos observados en ese proceso.
5.5.1 Estructura Raíz de la Respuesta
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Cantidad | int | Número de licitaciones encontradas en la respuesta. | 1 o 0 |
FechaCreacion | string (ISO-8601) | Timestamp del servidor al generar la respuesta JSON. | "2026-08-20T10:15:43.577Z" |
Version | string | Versión del servicio web. | "v1" |
Listado | array | Arreglo de objetos de licitación. | [ { ... } ] |
5.5.2 Objeto Licitación — Identificación y Clasificación (Listado[])
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
CodigoExterno | string | Código alfanumérico público del proceso. | "2284-24-L125" |
Nombre | string | Título oficial de la licitación. | "INSUMOS CLINICOS DESTINADOS AL AREA DE SALUD MUNICIPAL. SOLICITUD Nº 4646-2025" |
CodigoEstado | int | Código numérico del estado del proceso. | 8 (ver 5.2) |
Estado | string | Glosa descriptiva del estado actual. | "Adjudicada" |
Descripcion | string | Justificación y alcance detallado de la contratación. | "INSUMOS CLINICOS DESTINADOS AL AREA DE SALUD MUNICIPAL. SOLICITUD Nº 4646-2025" |
CodigoTipo | int | Código numérico del tipo de licitación. | 1 |
Tipo | string | Sigla del tipo de proceso. | "L1" (Licitación Pública Menor a 100 UTM; ver 5.3.1) |
TipoConvocatoria | string | Tipo de llamado/convocatoria ("1" = Abierta). | "1" |
Moneda | string | Código de moneda de la licitación. | "CLP" |
Etapas | int | Número de etapas del proceso (1 = Una etapa, 2 = Dos etapas). | 1 |
EstadoEtapas | string | Estado actual de la etapa del proceso. | "1" |
TomaRazon | string | Requiere Toma de Razón en CGR ("1" = Sí, "0" = No). | "0" |
EstadoPublicidadOfertas | int | Publicidad de ofertas técnicas (1 = Públicas tras apertura). | 1 |
JustificacionPublicidad | string | Glosa legal de visibilidad de las ofertas. | "Todas las ofertas técnicas serán visibles al público en general..." |
Contrato | string | Exige suscripción de contrato formal ("1" = Sí, "0" = No). | "0" |
Obras | string | Modalidad de Obra Pública ("2" = Sí, "1" / "0" = No). | "0" |
CantidadReclamos | int | Número histórico de reclamos registrados contra el organismo. | 1370 |
DiasCierreLicitacion | string | Días hábiles o corridos fijados para el cierre. | "0" |
Informada | int | Indica si la licitación fue informada (1 = Sí, 0 = No). | 0 |
EsBaseTipo | int | Creada a partir de Bases Tipo de ChileCompra (1 = Sí, 0 = No). | 0 |
ExtensionPlazo | int | Extensión automática de plazo (1 = Sí, 0 = No). | 0 |
EsRenovable | int | Contrato renovable (1 = Sí, 0 = No). | 0 |
CodigoBIP | string | null | Código del Banco Integrado de Proyectos (inversión). | null |
Estimacion | int | Modalidad del monto estimado (1 = Presupuesto disponible, 2 = Precio referencial). | 1 |
FuenteFinanciamiento | string | Glosa del origen de los recursos. | "" (o "Presupuesto Municipal", "FNDR", etc.) |
VisibilidadMonto | int | Visibilidad del monto estimado (1 = Visible, 0 = Oculto). | 1 |
MontoEstimado | number | null | Monto referencial / disponible asignado a la licitación. | 3000000 |
JustificacionMontoEstimado | string | Fundamento técnico del cálculo presupuestario. | "0" |
Tiempo | string | null | Valor numérico del tiempo de contrato o evaluación. | null |
UnidadTiempo | string | Código de unidad de tiempo ("1" = Horas, "2" = Días, "3" = Semanas, "4" = Meses). | "2" |
Modalidad | int | Modalidad contractual. | 0 |
TipoPago | string | Código de forma de pago ("1" = 30 días, "-1" = No especificado; ver 5.3.4). | "-1" |
ProhibicionContratacion | string | Cláusulas de inhabilidad o prohibición. | "" |
SubContratacion | string | Permite subcontratación ("1" = Sí, "0" = No). | "1" |
UnidadTiempoDuracionContrato | int | Unidad de tiempo para la duración del contrato. | 0 |
TiempoDuracionContrato | string | Duración del contrato expresada en la unidad anterior. | "0" |
TipoDuracionContrato | string | Modalidad de duración ("Fijo", "Indefinido" o vacío). | " " |
ObservacionContract | string | null | Notas u observaciones contractuales adicionales. | null |
UnidadTiempoContratoLicitacion | string | Unidad de tiempo licitada. | "0" |
ValorTiempoRenovacion | string | Plazo máximo de renovación de contrato. | "0" |
PeriodoTiempoRenovacion | string | Unidad del plazo de renovación. | " " |
UnidadTiempoEvaluacion | int | Unidad temporal para la comisión evaluadora. | 2 |
DireccionVisita | string | Dirección de visita a terreno (si aplica). | "" |
DireccionEntrega | string | Dirección física de entrega de los suministros o servicios. | "" |
NombreResponsablePago | string | Nombre del funcionario encargado de gestionar el pago. | "" |
EmailResponsablePago | string | Correo electrónico de finanzas/pago a proveedores. | "" |
NombreResponsableContrato | string | Nombre del administrador de contrato designado. | "" |
EmailResponsableContrato | string | Correo del administrador de contrato. | "" |
FonoResponsableContrato | string | Teléfono de contacto del administrador de contrato. | "" |
5.5.3 Objeto Comprador (Listado[].Comprador)
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
CodigoOrganismo | string | Identificador único del organismo en ChileCompra. | "84152" |
NombreOrganismo | string | Razón social institucional pública. | "I MUNICIPALIDAD VALDIVIA" |
RutUnidad | string | RUT tributario de la unidad ejecutora. | "69.200.100-1" |
CodigoUnidad | string | ID de la unidad o departamento de adquisiciones. | "3278" |
NombreUnidad | string | Glosa de la unidad ejecutora. | "DPTO. DE SALUD MUNICIPAL DE VALDIVIA" |
DireccionUnidad | string | Dirección de la oficina de adquisiciones. | "(UNIDAD FINANZAS)PEDRO AGUIRRE CERDA #231 INTERIOR" |
ComunaUnidad | string | Comuna de la institución. | "Valdivia" |
RegionUnidad | string | Región político-administrativa. | "Región de Los Ríos" |
RutUsuario | string | RUT del operador comprador que publicó la licitación. | "" (protegido / no informado) |
CodigoUsuario | string | ID interno del usuario operador. | "1177869" |
NombreUsuario | string | Nombre completo del operador comprador. | "DANIEL ALEJANDRO SOTO SANCHEZ" |
CargoUsuario | string | Función o cargo del operador. | "COMPRADOR" |
5.5.4 Objeto Fechas del Proceso (Listado[].Fechas)
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
FechaCreacion | string (ISO) | Fecha/hora de borrador y creación en sistema. | "2025-07-10T12:03:33.077" |
FechaPublicacion | string (ISO) | Fecha/hora oficial de publicación en el portal. | "2025-07-24T10:11:27.74" |
FechaInicio | string (ISO) | Inicio del período de preguntas del foro. | "2025-07-24T10:11:27.74" |
FechaFinal | string (ISO) | Fin del período de preguntas en el foro. | "2025-07-25T13:49:00" |
FechaPubRespuestas | string (ISO) | Fecha límite de publicación del acta de respuestas. | "2025-07-26T13:49:00" |
FechaCierre | string (ISO) | Cierre definitivo para ingresar ofertas electrónicas. | "2025-07-29T15:01:00" |
FechaActoAperturaTecnica | string (ISO) | Apertura de antecedentes técnicos. | "2025-07-29T15:02:00" |
FechaActoAperturaEconomica | string (ISO) | Apertura de ofertas económicas. | "2025-07-29T15:02:00" |
FechaEstimadaAdjudicacion | string (ISO) | Fecha proyectada informada en las bases. | "2025-08-13T13:49:00" |
FechaAdjudicacion | string (ISO) | Fecha real de firma y publicación de adjudicación. | "2025-08-20T10:13:13.55" |
FechaEstimadaFirma | string | null | Plazo proyectado para la suscripción de contrato. | null |
FechaVisitaTerreno | string | null | Fecha y hora de visita a terreno obligatoria/opcional. | null |
FechaEntregaAntecedentes | string | null | Fecha límite de entrega de muestras físicas. | null |
FechaSoporteFisico | string | null | Fecha de entrega de garantías físicas. | null |
FechaTiempoEvaluacion | string | null | Período estimado de trabajo de la comisión evaluadora. | null |
FechasUsuario | string | null | Hitos temporales adicionales definidos por el usuario. | null |
5.5.5 Objeto Adjudicación (Listado[].Adjudicacion)
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Tipo | int | Tipo de acto administrativo (1 = Autorización, 2 = Resolución, 4 = Decreto; ver 5.3.6). | 4 |
Numero | string | Número correlativo del Decreto o Resolución de adjudicación. | "1271" |
Fecha | string (ISO) | Fecha del acto administrativo. | "2025-08-14T00:00:00" |
NumeroOferentes | int | Cantidad total de proveedores que enviaron ofertas. | 9 |
UrlActa | string | Enlace directo para previsualizar el acta de evaluación/adjudicación. | "http://www.mercadopublico.cl/Procurement/Modules/RFB/StepsProcessAward/PreviewAwardAct.aspx?qs=..." |
5.5.6 Ítems Licitados (Listado[].Items.Listado[])
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Correlativo | int | Número correlativo de la línea de producto licitado. | 1 |
CodigoProducto | int | Código estándar del producto (UNSPSC). | 42311514 |
CodigoCategoria | string | Código de la familia/categoría UNSPSC. | "42311500" |
Categoria | string | Nombre estructurado del rubro jerárquico. | "Equipamiento y suministros médicos / Productos para el cuidado de heridas / Vendas..." |
NombreProducto | string | Denominación genérica en el catálogo. | "Vendajes germicidas" |
Descripcion | string | Especificación técnica requerida por el comprador. | "INSUMOS VARIOS, SEGUN FORMULARIO PRESENTACION OFERTA ECONOMICA, ADJUNTO." |
UnidadMedida | string | Unidad de despacho o empaque. | "Unidad" |
Cantidad | number | Cantidad demandada por la institución. | 1 |
Adjudicacion.RutProveedor | string | RUT del oferente seleccionado para esta línea. | "76.706.567-1" |
Adjudicacion.NombreProveedor | string | Razón social del proveedor adjudicado. | "HOSPIMEDICA SPA" |
Adjudicacion.Cantidad | number | Cantidad efectivamente adjudicada. | 1.5867 |
Adjudicacion.MontoUnitario | number | Precio unitario ofertado y aceptado. | 180000 |
6. API Órdenes de Compra v1 (api.mercadopublico.cl)
Permite consultar las Órdenes de Compra (OC) emitidas en Mercado Público.
6.1 Endpoints, Formatos y Tipos de Consulta
Base URL: https://api.mercadopublico.cl/servicios/v1/publico/ordenesdecompra.{formato}
Formatos: .json, .jsonp, .xml.
Tipos de Consulta HTTP GET
- Por código exacto de Orden de Compra:
GET /servicios/v1/publico/ordenesdecompra.json?codigo=2097-241-SE14&ticket=TU_TICKET - Por fecha específica (formato
ddmmaaaa):GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&ticket=TU_TICKET - Por todos los estados del día actual:
GET /servicios/v1/publico/ordenesdecompra.json?estado=todos&ticket=TU_TICKET - Por estado y fecha específica:
GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&estado=aceptada&ticket=TU_TICKET - Por código de organismo público:
GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&CodigoOrganismo=6945&ticket=TU_TICKET - Por código de proveedor:
GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&CodigoProveedor=17793&ticket=TU_TICKET
6.2 Nomenclatura y Códigos de Estado
Para filtrar en la URL (?estado=...) se utiliza la nomenclatura textual. En la respuesta JSON/XML los estados se retornan como códigos numéricos:
Nomenclatura URL (estado=) | Código Numérico | Glosa del Estado |
|---|---|---|
enviadaproveedor | 4 | Enviada a Proveedor |
enproceso | 5 | En proceso |
aceptada | 6 | Aceptada |
cancelada | 9 | Cancelada |
recepcionconforme | 12 | Recepción Conforme |
pendienterecepcion | 13 | Pendiente de Recepcionar |
recepcionaceptadacialmente | 14 | Recepcionada Parcialmente |
recepecionconformeincompleta | 15 | Recepción Conforme Incompleta |
todos | N/A | Consulta todos los estados |
6.3 Catálogos y Anexos de Órdenes de Compra
6.3.1 Tipos de Orden de Compra
| Código | Abreviación | Descripción |
|---|---|---|
1 | OC | Automática |
2 | D1 | Trato directo que genera Orden de Compra por proveedor único |
3 | C1 | Trato directo por emergencia, urgencia e imprevisto |
4 | F3 | Trato directo por confidencialidad |
5 | G1 | Trato directo por naturaleza de negociación |
6 | R1 | Orden de compra menor a 3 UTM |
7 | CA | Orden de compra sin resolución |
8 | SE | Sin emisión automática |
9 | CM | Convenio Marco |
10 | FG | Trato Directo (Art. 8 letras f y g - Ley 19.886) |
11 | TL | Convenio Marco – Tienda de Libros (Obsoleto) |
12 | MC | Microcompra |
13 | AG | Compra Ágil |
14 | CC | Compra Coordinada |
6.3.2 Tipos de Despacho (OC)
7: Despachar a Dirección de envío9: Despachar según programa adjuntado12: Otra Forma de Despacho, Ver Instrucción14: Retiramos de su bodega20: Despacho por courier o encomienda aérea21: Despacho por courier o encomienda terrestre22: A convenir
6.3.3 Tipos de Pago (OC)
1: 15 días contra la recepción de la factura2: 30 días contra la recepción de la factura39: Otra forma de pago46: 50 días contra la recepción de la factura47: 60 días contra la recepción de la factura48: A 45 días49: A más de 30 días
6.4 Referencia de Campos (Diccionario de Datos Observado)
Mapeo exhaustivo de las claves de la respuesta JSON, validado contra la OC real 2284-672-AG26 — "MEDICAMENTOS BOTIQUIN — SOLICITUD Nº 6346" (Compra Ágil, I MUNICIPALIDAD VALDIVIA → proveedor ECOMCH, $749.700 CLP; pruebas del 2026-08-20). Los valores "" o null corresponden a estados vacíos observados en ese proceso.
6.4.1 Estructura Raíz de la Respuesta
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Cantidad | int | Total de Órdenes de Compra devueltas. | 1 |
FechaCreacion | string (ISO) | Timestamp del servidor al generar la respuesta. | "2026-08-20T14:20:32.171Z" |
Version | string | Versión del servicio web. | "v1" |
Listado | array | Lista con los objetos de la Orden de Compra. | [ { ... } ] |
6.4.2 Objeto Orden de Compra — Identificación y Estado (Listado[])
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Codigo | string | Código público oficial de la Orden de Compra. | "2284-672-AG26" |
Nombre | string | Título asignado a la adquisición. | "MEDICAMENTOS BOTIQUIN — SOLICITUD Nº 6346" |
Descripcion | string | Justificación y detalle administrativo de la emisión. | "MEDICAMENTOS BOTIQUIN — SOLICITUD Nº 6346\r\n\r\n" |
CodigoEstado | int | Estado numérico de la OC (ver 6.2). | 5 (En proceso) |
Estado | string | Glosa del estado actual en el sistema. | "En proceso" |
CodigoLicitacion | string | Código de la licitación o convenio de origen (vacío si es Compra Ágil o Trato Directo). | "" |
CodigoTipo | string | Código numérico del tipo de compra (ver 6.3.1). | "13" (AG = Compra Ágil) |
Tipo | string | Sigla del mecanismo de compra. | "AG" |
TipoMoneda | string | Moneda de transacción. | "CLP" |
CodigoEstadoProveedor | int | Estado en la bandeja del proveedor (2 = En proceso, 4 = Aceptada, 6 = Rechazada). | 2 |
EstadoProveedor | string | Glosa del estado del proveedor. | "En proceso" |
TieneItems | string | Indica si contiene líneas de detalle ("1" = Sí, "0" = No). | "1" |
PromedioCalificacion | number | Calificación del proveedor otorgada por el comprador (0 a 5). | 0 |
CantidadEvaluacion | int | Evaluaciones de desempeño registradas para esta OC. | 0 |
Financiamiento | string | Glosa del ítem presupuestario asignado. | "SALUD MUNICIPAL" |
Pais | string | País de origen de la transacción. | "Other" (o "CL") |
TipoDespacho | string | Código de forma de entrega (ver 6.3.2). | "7" |
FormaPago | string | Código de condición de pago (ver 6.3.3). | "2" |
6.4.3 Montos e Impuestos de la OC (Listado[])
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
TotalNeto | number | Suma de valores netos de todos los ítems. | 630000 |
PorcentajeIva | number | Tasa de IVA aplicada. | 19 |
Impuestos | number | Total del impuesto calculado. | 119700 |
Total | number | Monto bruto final a pagar (Neto + Impuestos + Cargos − Descuentos). | 749700 |
Descuentos | number | Descuentos globales aplicados. | 0 |
Cargos | number | Fletes, recargos o costos logísticos adicionales. | 0 |
6.4.4 Fechas de la Orden de Compra (Listado[].Fechas)
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
FechaCreacion | string (ISO) | Fecha/hora en que el comprador emitió el borrador de la OC. | "2026-08-19T14:35:12.257" |
FechaEnvio | string (ISO) | Fecha/hora en que la OC fue despachada formalmente al proveedor. | "2026-08-19T14:39:29.013" |
FechaUltimaModificacion | string (ISO) | Último cambio de estado o actualización registrado. | "2026-08-19T14:39:00" |
FechaAceptacion | string | null | Fecha en que el proveedor aceptó la OC en su escritorio de Mercado Público. | null |
FechaCancelacion | string | null | Fecha de resciliación o cancelación administrativa. | null |
6.4.5 Objeto Comprador (Listado[].Comprador)
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
CodigoOrganismo | string | Identificador único del organismo público. | "84152" |
NombreOrganismo | string | Razón social institucional. | "I MUNICIPALIDAD VALDIVIA" |
RutUnidad | string | RUT fiscal de la unidad compradora. | "69.200.100-1" |
CodigoUnidad | string | ID de la unidad en el directorio institucional. | "3278" |
NombreUnidad | string | Nombre del departamento u hospital comprador. | "DPTO. DE SALUD MUNICIPAL DE VALDIVIA" |
Actividad | string | Rubro o actividad económica del organismo. | "SALUD" |
DireccionUnidad | string | Dirección de la sede central. | "" |
ComunaUnidad | string | Comuna de la institución. | "Valdivia" |
RegionUnidad | string | Región administrativa. | "Región de Los Ríos" |
Pais | string | País del organismo comprador. | "Other" |
NombreContacto | string | Funcionario emisor o contacto del proceso. | "Dante Benner Fuentes" |
CargoContacto | string | Puesto del funcionario emisor. | "administrativo" |
FonoContacto | string | Teléfono directo del comprador. | "" |
MailContacto | string | Correo institucional del comprador. | "" |
6.4.6 Objeto Proveedor (Listado[].Proveedor)
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Codigo | string | ID interno de la empresa en el Registro de Proveedores. | "1674633" |
Nombre | string | Razón social registrada del proveedor. | "Bastian Ignacio" |
Actividad | string | Giro o actividad comercial ante el SII. | "VENTAS Y SERVICIOS" |
CodigoSucursal | string | ID de la sucursal emisora seleccionada. | "1083547" |
NombreSucursal | string | Nombre de fantasía o sucursal. | "ECOMCH" |
RutSucursal | string | RUT de facturación de la empresa/sucursal. | "77.027.029-4" |
Direccion | string | Dirección comercial o casa matriz. | "HUALCURA N° 821" |
Comuna | string | Comuna del proveedor. | "Quilicura" |
Region | string | Región del proveedor. | "Región Metropolitana de Santiago" |
Pais | string | País del proveedor. | "Other" |
NombreContacto | string | Representante legal o contacto comercial. | "Bastian Ignacio Toro Delgadillo" |
CargoContacto | string | Cargo del representante. | "Gerente General" |
FonoContacto | string | Teléfono del proveedor. | "" |
MailContacto | string | Correo del proveedor. | "" |
6.4.7 Ítems de la OC (Listado[].Items.Listado[])
| Clave | Tipo | Descripción | Ejemplo Observado |
|---|---|---|---|
Correlativo | int | Línea de producto en la OC. | 1 |
CodigoCategoria | int | ID numérico del rubro UNSPSC. | 51121700 |
Categoria | string | Árbol jerárquico de la categoría de compras. | "Medicamentos y productos farmacéuticos / Medicamentos cardiovasculares..." |
CodigoProducto | int | ID estándar del producto. | 51121709 |
Producto | string | Nombre del producto en catálogo. | "Carvedilol" |
EspecificacionComprador | string | Requerimiento específico del comprador. | "CARVEDILOL 6.25 MG COMPRIMIDO" |
EspecificacionProveedor | string | Marca, modelo o detalle ofertado por el proveedor. | "CARVEDILOL 6.25 MG COMPRIMIDO" |
Cantidad | number | Unidades compradas. | 35000 |
Unidad | string | null | Glosa de unidad de medida. | null |
Moneda | string | Moneda del precio unitario. | "CLP" |
PrecioNeto | number | Precio unitario neto acordado. | 18 |
TotalCargos | number | Recargos asignados a esta línea. | 0 |
TotalDescuentos | number | Descuentos asignados a esta línea. | 0 |
TotalImpuestos | number | Impuestos calculados para esta línea. | 0 |
Total | number | Total neto por línea (Cantidad * PrecioNeto). | 0 (o monto calculado) |
7. Estructura Estándar de Errores HTTP
Cuando ocurre un error en cualquier endpoint, la API responde con success: "NOK", payload: null y un arreglo errors[] descriptivo:
{
"success": "NOK",
"trace": null,
"payload": null,
"errors": [
{
"codigo": "401",
"mensaje": "El ticket no existe, es inválido o no tiene permisos.",
"detalle": null
}
]
}
Tabla de Códigos de Error HTTP
| Código HTTP | Nombre | Causa Típica | Acción Recomendada |
|---|---|---|---|
203 | Non-Authoritative Information | Ticket enviado como Header HTTP ticket en las APIs v1, que solo aceptan Query String. | Reenviar el ticket como parámetro ?ticket=... en la URL (ver 2.3). |
400 | Bad Request | Parámetros inválidos, formatos de fecha erróneos o combinación prohibida (id y q). | Revisar los parámetros de la solicitud según esta guía. |
401 | Unauthorized | Falta el header ticket o el valor no fue enviado. | Incluir el header ticket: TU_TICKET en la petición. |
403 | Forbidden | El ticket no existe, está inactivo o bloqueado. | Verificar el ticket en el correo de ChileCompra o solicitar uno nuevo. |
404 | Not Found | El código de recurso (licitación, OC o Compra Ágil) no existe. | Verificar el código externo consultado. |
429 | Too Many Requests | Se agotó la cuota diaria asignada al ticket. | Espere a la medianoche UTC o revise la cabecera Retry-After. |
500 | Internal Server Error | Error interno no controlado en el servidor de ChileCompra. | Reintentar tras unos minutos. |
503 | Service Unavailable | Servicio en mantenimiento o temporalmente fuera de línea. | Implementar retries exponenciales. |
8. Ejemplos Prácticos de Código (Python & cURL)
8.1 Ver compras publicadas en la última hora (ttl_cambio_ms)
Ideal para bots o procesos daemon que ejecutan polling cada hora.
cURL
curl -H "ticket: TU_TICKET_AQUI" \
"https://api2.mercadopublico.cl/v2/compra-agil?ttl_cambio_ms=3600000"
Python
import requests
TICKET = 'TU_TICKET_AQUI'
BASE_URL = 'https://api2.mercadopublico.cl'
resp = requests.get(
f'{BASE_URL}/v2/compra-agil',
headers={'ticket': TICKET},
params={'ttl_cambio_ms': 3_600_000}
)
data = resp.json()
for item in data['payload']['items']:
print(item['codigo'], '|', item['nombre'], '|', item['estado']['glosa'])
8.2 Sincronización incremental entre dos fechas
Útil para mantener sincronizada una base de datos local desde el último timestamp procesado.
cURL
curl -H "ticket: TU_TICKET_AQUI" \
"https://api2.mercadopublico.cl/v2/compra-agil?cambio_desde=2026-04-01T00:00:00Z&cambio_hasta=2026-04-02T00:00:00Z&ordenar_por=FechaUltimaModificacion"
Python
import requests
from datetime import datetime, timezone, timedelta
TICKET = 'TU_TICKET_AQUI'
BASE = 'https://api2.mercadopublico.cl'
ahora = datetime.now(timezone.utc)
hace_un_dia = ahora - timedelta(days=1)
resp = requests.get(
f'{BASE}/v2/compra-agil',
headers={'ticket': TICKET},
params={
'cambio_desde': hace_un_dia.strftime('%Y-%m-%dT%H:%M:%SZ'),
'cambio_hasta': ahora.strftime('%Y-%m-%dT%H:%M:%SZ'),
'ordenar_por': 'FechaUltimaModificacion'
}
)
print('Paginación:', resp.json()['payload']['paginacion'])
8.3 Buscar por palabras clave y región
Busca Compras Ágiles de "materiales eléctricos" en la Región Metropolitana (13) abiertas o adjudicadas.
cURL
curl -H "ticket: TU_TICKET_AQUI" \
"https://api2.mercadopublico.cl/v2/compra-agil?q=materiales%20electricos®ion=13&estado=publicada,proveedor_seleccionado"
Python
import requests
TICKET = 'TU_TICKET_AQUI'
BASE = 'https://api2.mercadopublico.cl'
resp = requests.get(
f'{BASE}/v2/compra-agil',
headers={'ticket': TICKET},
params={
'q': 'materiales electricos',
'region': 13,
'estado': 'publicada,proveedor_seleccionado'
}
)
items = resp.json()['payload']['items']
print(f'Resultados encontrados: {len(items)}')
for item in items:
monto = item['montos']['monto_disponible_clp']
print(f" - {item['codigo']} | {item['nombre']} | ${monto:,.0f} CLP")
8.4 Obtener el detalle de una Compra Ágil
cURL
curl -H "ticket: TU_TICKET_AQUI" \
"https://api2.mercadopublico.cl/v2/compra-agil/1195-39-COT26"
Python
import requests
TICKET = 'TU_TICKET_AQUI'
BASE = 'https://api2.mercadopublico.cl'
codigo = '1195-39-COT26'
resp = requests.get(
f'{BASE}/v2/compra-agil/{codigo}',
headers={'ticket': TICKET}
)
ca = resp.json()['payload']
print(f"Nombre : {ca['nombre']}")
print(f"Estado : {ca['estado']['glosa']}")
print(f"Institución : {ca['institucion']['organismo_comprador']}")
print(f"Presupuesto : ${ca['presupuesto']['monto_disponible_clp']:,} {ca['presupuesto']['moneda']}")
print(f"Productos : {len(ca['productos_solicitados'])}")
print(f"Cotizaciones : {len(ca['proveedores_cotizando'])}")
8.5 Recorrer todas las páginas de resultados
Script completo para iterar sobre todas las páginas devueltas por la paginación de la API.
import requests
TICKET = 'TU_TICKET_AQUI'
BASE = 'https://api2.mercadopublico.cl'
params = {
'publicado_desde': '2026-04-01T00:00:00Z',
'publicado_hasta': '2026-04-02T23:59:59Z',
'tamano_pagina': 50,
'numero_pagina': 1
}
todos_los_items = []
while True:
resp = requests.get(
f'{BASE}/v2/compra-agil',
headers={'ticket': TICKET},
params=params
)
payload = resp.json()['payload']
paginacion = payload['paginacion']
todos_los_items.extend(payload['items'])
print(f"Página {paginacion['numero_pagina']} de {paginacion['total_paginas']}")
if paginacion['numero_pagina'] >= paginacion['total_paginas']:
break
params['numero_pagina'] += 1
print(f'Total descargado: {len(todos_los_items)} registros')
8.6 Detectar emisión de OC en Compras Ágiles con proveedor seleccionado
Como la API no retorna el estado textual oc_emitida en las búsquedas masivas, este script consulta los procesos en proveedor_seleccionado y revisa el detalle individual para separar aquellos que ya cuentan con Orden de Compra emitidamente vinculada (id_orden_compra no nulo).
import requests
TICKET = 'TU_TICKET_AQUI'
BASE = 'https://api2.mercadopublico.cl'
params = {
'estado': 'proveedor_seleccionado',
'tamano_pagina': 50,
'numero_pagina': 1
}
con_oc = [] # Tienen OC emitida
sin_oc = [] # Proveedor seleccionado, pero OC aún pendiente
while True:
resp = requests.get(f'{BASE}/v2/compra-agil', headers={'ticket': TICKET}, params=params)
payload = resp.json()['payload']
paginacion = payload['paginacion']
for item in payload['items']:
det_resp = requests.get(
f"{BASE}/v2/compra-agil/{item['codigo']}",
headers={'ticket': TICKET}
)
det = det_resp.json()['payload']
# Verificar ambas formas: campo plano (observado) y objeto anidado (guía oficial)
id_oc = det.get('id_orden_compra') or det.get('orden_compra', {}).get('id_orden_compra')
if id_oc is not None:
con_oc.append({'codigo': item['codigo'], 'id_orden_compra': id_oc})
else:
sin_oc.append(item['codigo'])
if paginacion['numero_pagina'] >= paginacion['total_paginas']:
break
params['numero_pagina'] += 1
print(f'Con OC emitida : {len(con_oc)}')
print(f'Sin OC emitida : {len(sin_oc)}')
for ca in con_oc:
print(f" {ca['codigo']} -> id_orden_compra={ca['id_orden_compra']}")
8.7 Manejo automatizado del error HTTP 429
Función de envoltura en Python para gestionar inteligentemente la cuota diaria consumida:
import requests
from datetime import datetime, timezone, timedelta
def consultar_compra_agil_segura(url, ticket, params=None):
headers = {'ticket': ticket}
resp = requests.get(url, headers=headers, params=params)
if resp.status_code == 429:
ahora = datetime.now(timezone.utc)
proxima_medianoche = (ahora + timedelta(days=1)).replace(hour=0, minute=1, second=0, microsecond=0)
espera_seg = int((proxima_medianoche - ahora).total_seconds())
print(f"[HTTP 429] Cuota diaria agotada. Reintento en {espera_seg // 3600} horas ({espera_seg} segundos).")
raise Exception("Cuota diaria de API sobrepasada. Reintentar mañana.")
resp.raise_for_status()
return resp.json()
9. Glosario de Términos
| Término | Definición |
|---|---|
| API | Interfaz de Programación de Aplicaciones (Application Programming Interface). Permite la comunicación estructurada entre sistemas informáticos. |
| Compra Ágil | Mecanismo de contratación simplificada de Mercado Público para adquisición rápida de bienes y servicios por parte de organismos del Estado (montos menores a 100 UTM). |
| Ticket | Credencial alfanumérica (API Key UUID) exigida en el encabezado de las peticiones para autenticar al cliente y verificar su cuota de uso. |
| Token Bucket | Algoritmo de control de tasa de solicitudes utilizado para limitar el consumo por ticket y evitar la sobrecarga del servidor. |
| Header HTTP | Cabecera HTTP enviada en las peticiones que transporta metadatos y credenciales (ej: ticket: <UUID>). |
| Endpoint | Dirección URL específica expuesta por la API que atiende una función o recurso concreto. |
| Payload | Cuerpo o contenido principal con los datos requeridos en la respuesta JSON. |
| Paginación | Mecanismo que divide conjuntos grandes de resultados en páginas pequeñas de tamaño fijo. |
| ISO-8601 | Estándar internacional para representación de fechas y horas (ej: 2026-04-01T12:00:00Z). |
| CLP | Código ISO 4217 correspondiente al Peso Chileno. |
| EMT | Empresa de Menor Tamaño. Clasificación del Registro de Proveedores de ChileCompra. |
| Convocatoria | Llamado oficial a proveedores para presentar cotizaciones en Compra Ágil (Primer o Segundo llamado). |
| OC / Orden de Compra | Documento legal y administrativo que formaliza la compra al proveedor seleccionado. |
| HTTP 429 Too Many Requests | Código de estado HTTP que notifica el agotamiento de la cuota diaria asignada al ticket. |
| Retry-After | Cabecera HTTP devuelta en respuestas 429 indicando el tiempo exacto a esperar antes de reintentar. |
| DCCP | Dirección de Compras y Contratación Pública (ChileCompra). |
| Sincronización Incremental | Técnica de descarga mediante la cual solo se obtienen los datos modificados desde la última fecha/hora de consulta. |
10. Políticas, Condiciones de Uso y Límites de Responsabilidad
10.1 Uso de la Información
- Niveles de Servicio: Los niveles de servicio de la API de Mercado Público se definen conforme a los estándares establecidos por la Dirección ChileCompra.
- Obtención del Ticket: El acceso a la API se realiza mediante un ticket, el cual debe ser solicitado a través del formulario disponible en la web oficial de ChileCompra, seleccionando la opción “Solicitud de Ticket”.
- Identificación Única por Persona: El formulario debe ser completado con datos reales de la persona solicitante (nombre y apellido, RUT y correo electrónico), ya que se entrega un único ticket por persona. Si la Dirección ChileCompra detecta inconsistencias en la información proporcionada, podrá limitar o suspender el acceso asociado a dicho ticket.
- Protección y Privacidad de Datos: ChileCompra utilizará estos datos personales únicamente para fines de operación, control y administración del servicio de la API de Mercado Público, y no los compartirá con terceros, salvo por mandato judicial.
- Monitoreo y Control por Dirección IP: El funcionamiento y uso de la API es monitoreado de forma permanente por la Dirección ChileCompra para asegurar su correcto uso y estabilidad. Este monitoreo incluye validaciones por dirección IP, pudiendo establecerse restricciones de acceso según la cantidad de solicitudes realizadas desde una misma IP.
- Canal Oficial de Soporte: El soporte para el uso de la API debe solicitarse exclusivamente a través del formulario de sugerencias disponible en el sitio web oficial de ChileCompra. Todas las consultas y solicitudes serán respondidas en un plazo máximo de 3 días hábiles. No se considerarán solicitudes informales ni aquellas enviadas directamente a correos institucionales. No existen otros canales de soporte distintos a los señalados en estas Políticas y Condiciones.
- Límite Diario Inflexible: Cada ticket de acceso cuenta con un límite diario de 10.000 solicitudes. Este límite no es modificable y tiene como finalidad resguardar la estabilidad del servicio. Las personas usuarias se comprometen a no exceder ni eludir estas limitations. El uso excesivo o abusivo de la API podrá derivar en la suspensión temporal o el bloqueo permanente del acceso.
- Horario Recomendado para Descargas Masivas: Para procesos de alta demanda o descarga masiva de información, se recomienda realizar las consultas en horario nocturno, entre las 22:00 y las 07:00 horas.
10.2 Límites de Responsabilidad
- Carácter Voluntario del Servicio: La API de Mercado Público es un servicio adicional que ChileCompra pone a disposición de manera voluntaria. Su uso no genera derechos adquiridos para las personas usuarias, por lo que ChileCompra podrá modificar, suspender o dar término al servicio cuando lo estime pertinente.
- Actualización de Políticas: ChileCompra podrá actualizar estas Políticas y Condiciones de Uso en cualquier momento, manteniendo siempre disponible la versión vigente en su sitio web.
- Desarrollos e Integraciones de Terceros: La Dirección ChileCompra no se hace responsable de la información publicada por las personas usuarias a través de las aplicaciones o sistemas que desarrollen utilizando la API, ni de los proyectos, actividades comerciales o cobros asociados a dichos desarrollos.
- Atribución Obligatoria de la Fuente: Las personas usuarias que publiquen información obtenida desde la API de Mercado Público, sin modificarla, deberán indicar claramente que la fuente de los datos es la Dirección ChileCompra.
11. Descarga de Documentos Adjuntos Oficiales
Diagnóstico de factibilidad (pruebas del 2026-08-20) para descargar los archivos binarios (PDFs) referenciados en el arreglo documentos de Compra Ágil (IDs 1774796 y 1774797):
- API Pública Oficial (
api.mercadopublico.clyapi2.mercadopublico.cl):- La API oficial no provee endpoints de descarga directa de archivos binarios.
- Solo retorna los metadatos descriptivos (
idnumérico ynombredel archivo). - Los endpoints no documentados retornan
HTTP 403 ForbiddenoHTTP 404 Not Found.
- Portal Web Tradicional (
www.mercadopublico.cl):- Las rutas tradicionales de descarga (
/Procurement/Modules/RFQ/DownloadAttachment.aspx) devuelven una redirecciónHTTP 302al formulario de inicio de sesión (/portal/login.aspx), exigiendo una sesión web activa autenticada con ClaveÚnica.
- Las rutas tradicionales de descarga (
- Buscador Moderno (
buscador.mercadopublico.cl):- La interfaz web delega la descarga en un microservicio interno (
adjunto.mercadopublico.cl/adjunto-compra-agil/v1/adjuntos-compra-agil/) que requiere un flujo de cifrado (/encrypt/) y autenticación cerrada por tokens de sesión dinámica y CloudFront.
- La interfaz web delega la descarga en un microservicio interno (
[!IMPORTANT] Conclusión: la plataforma de ChileCompra no permite la descarga programática sencilla de los adjuntos a través de la API con ticket. Para que los usuarios consulten los documentos originales, la mejor alternativa es proveer el enlace directo a la ficha pública del proceso en el buscador oficial:
https://buscador.mercadopublico.cl/ficha?code={codigo}.
12. Recomendaciones de Integración
Prácticas derivadas de las pruebas reales del 2026-08-20 para integrar el ecosistema completo de APIs:
- Timeouts diferenciados por versión:
- v1 (
api.mercadopublico.cl): 5 a 10 segundos es suficiente (ver 2.4). - v2 (
api2.mercadopublico.cl): configurar un mínimo de 30 a 40 segundos por la alta carga del API Gateway de ChileCompra.
- v1 (
- Estrategia de autenticación según versión: implementar un helper unificado
fetchMercadoPublico(tipo, codigo)que:- Inyecte
?ticket={TICKET}en la URL para v1 (licitacionesyordenesdecompra). - Inyecte
headers: { ticket: TICKET }para v2 (compra-agil).
- Inyecte
- Pool y rotación de tickets (round-robin): distribuir las solicitudes entre los tickets disponibles (
MERCADO_PUBLICO_TICKET) para repartir la cuota diaria y reducir la probabilidad de bloqueos por ráfaga (HTTP 429; ver 3.4). - Mapeo de Compra Ágil a Orden de Compra: la API v2 entrega
id_orden_compranumérico (ej:55348066). Para mostrar al usuario el código textual correlativo (ej:"2284-672-AG26") y el enlace al detalle, se debe relacionar contra el listado de transacciones históricas o la API v1 de Órdenes de Compra. - Documentos adjuntos: dado que no existe descarga programática (ver Sección 11), enlazar siempre a la ficha pública
https://buscador.mercadopublico.cl/ficha?code={codigo}.