SoyKoda
Herramientas/Manuales/MANUAL_API_CHILECOMPRA.md
Manual Oficial

Guía de Uso de la API de Mercado Público / ChileCompra

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

  1. Introducción General y Ecosistema de APIs
  2. Primeros Pasos y Autenticación
  3. Control de Cuota y Manejo de Rate Limits (HTTP 429)
  4. API Compra Ágil v2 (api2.mercadopublico.cl)
  5. API Licitaciones v1 (api.mercadopublico.cl)
  6. API Órdenes de Compra v1 (api.mercadopublico.cl)
  7. Estructura Estándar de Errores HTTP
  8. Ejemplos Prácticos de Código (Python & cURL)
  9. Glosario de Términos
  10. Políticas, Condiciones de Uso y Límites de Responsabilidad
  11. Descarga de Documentos Adjuntos Oficiales
  12. 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óduloBase URLFormatosDescripción
API Compra Ágil v2https://api2.mercadopublico.clJSON RESTAPI de segunda generación para el mecanismo de contratación simplificada. Soporta paginación moderna, sincronización incremental y detalle extendido.
API Licitaciones v1https://api.mercadopublico.clJSON, JSONP, XMLServicio tradicional para consultar licitaciones públicas y privadas diarias o históricas.
API Órdenes de Compra v1https://api.mercadopublico.clJSON, JSONP, XMLServicio tradicional para consultar las Órdenes de Compra (OC) emitidas por organismos del Estado.

Casos de Uso Principales


2. Primeros Pasos y Autenticación

2.1 Requisitos Previos

  1. Un Ticket de Acceso válido expedido por ChileCompra.
  2. Conexión a Internet desde el entorno donde se ejecuten las solicitudes HTTP.
  3. Cliente HTTP (cURL, Python requests, Node.js fetch, 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:

  1. Ingrese a https://www.chilecompra.cl/api/ en su navegador.
  2. Haga clic en el botón «Pide tu ticket».
  3. Acepte los términos y condiciones de uso e inicie sesión con su ClaveÚnica.
  4. Complete el formulario de solicitud y seleccione la opción «Solicitar ticket».
  5. 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):

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:

ServicioLatencia ObservadaTimeout Recomendado en el Cliente
APIs v1 (api.mercadopublico.cl)50 ms – 570 ms5 a 10 segundos
API v2 Compra Ágil (api2.mercadopublico.cl)12.000 – 20.000 msmí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

3.2 Comportamiento al Exceder el Límite (HTTP 429)

Cuando el ticket agota su cuota disponible:

{
  "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

  1. Captura del Error 429: Implementar el manejo del código 429 en el cliente antes de pasar a producción.
  2. Reintento: Si recibe un 429, suspender las peticiones hasta el inicio del siguiente día calendario o consultar el valor del header Retry-After.
  3. 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).
  4. Sincronización Incremental: Optimizar el tráfico utilizando parámetros de cambios (ttl_cambio_ms o cambio_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:

  1. Throttle entre llamadas: aplicar una pausa de 250 a 500 ms entre solicitudes consecutivas.
  2. 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

EndpointMétodoDescripción
/v2/compra-agilGETListado y búsqueda de Compras Ágiles con filtros y paginación.
/v2/compra-agil/{codigo}GETDetalle 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ámetroTipoDescripciónEjemplo
ttl_cambio_msint (ms)Opción A: Retorna cambios ocurridos en los últimos X milisegundos.3600000 (última hora)
cambio_desdedatetime ISO-8601Opción B: Fecha/hora inicio de la ventana de cambios.2026-01-19T00:00:00Z
cambio_hastadatetime ISO-8601Opción B: Fecha/hora fin de la ventana de cambios.2026-01-20T00:00:00Z

Grupo 2: Fecha de Publicación

ParámetroTipoDescripciónEjemplo
publicado_desdedatetime ISO-8601Fecha/hora mínima de publicación.2026-01-01T00:00:00Z
publicado_hastadatetime ISO-8601Fecha/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).

ValorDescripción
publicadaLa Compra Ágil está abierta y recibiendo cotizaciones.
cerradaEl plazo de recepción de cotizaciones finalizó.
desiertaEl proceso finalizó sin ofertas válidas.
canceladaEl proceso fue cancelado por el organismo comprador.
proveedor_seleccionadoSe seleccionó un proveedor ganador. (Incluye Compras Ágiles con OC emitida).
oc_emitidaSe 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ámetro codigo_organismo.
Para obtener datos de un organismo específico, se debe consultar por región (region=) y filtrar posteriormente en cliente/base de datos por institucion.rut o institucion.organismo_comprador.

[!WARNING] Comportamiento real del estado oc_emitida: El valor oc_emitida está contemplado en el modelo de datos pero en la práctica las Compras Ágiles con Orden de Compra emitida se mantienen bajo el estado proveedor_seleccionado. Para detectar si se emitió la OC, consulte el detalle del proceso y verifique si id_orden_compra (campo plano observado en respuestas reales) u orden_compra.id_orden_compra (guía oficial) es distinto de null (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ódigoRegiónCódigoRegión
1Tarapacá9Araucanía
2Antofagasta10Los Lagos
3Atacama11Aysén
4Coquimbo12Magallanes y Antártica
5Valparaíso13Metropolitana
6O'Higgins14Los Ríos
7Maule15Arica y Parinacota
8Biobío16Ñuble

Grupo 5: Búsqueda por Código o Texto Libre

id y q son mutuamente excluyentes (solo se debe enviar uno).

ParámetroTipoDescripciónEjemplo
idstringCódigo exacto de la Compra Ágil.1057539-228-COT26
qstring (URL-encoded)Palabras clave para búsqueda en nombre/descripción.materiales%20electricos

Grupo 6: Paginación

ParámetroTipoDefaultMáximoDescripción
tamano_paginaint1550Cantidad de resultados por página.
numero_paginaint1N/ANúmero de página a consultar (comienza en 1).

Grupo 7: Ordenamiento

Valor ordenar_porDescripción
FechaUltimaModificacion(Default) Ordena por fecha del último cambio, descendente.
FechaPublicacionOrdena 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:

Reglas para proveedores_cotizando[]

Mapeo Numérico de Estados (estado.id_estado)

Valores confirmados en respuestas reales de la API v2 (pruebas 2026-08-20):

id_estadocodigoGlosa
2publicadaPublicada
3cerradaCerrada
4proveedor_seleccionadoProveedor Seleccionado
5desiertaDesierta
6canceladaCancelada

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[])

CampoTipoDescripción
codigostringCódigo único del proceso (ej: "1057539-228-COT26").
nombrestringTítulo del proceso de compra.
estado.id_estadointIdentificador numérico del estado.
estado.codigostringCódigo normalizado (publicada, cerrada, desierta, cancelada, proveedor_seleccionado).
estado.glosastringDescripción del estado (ej: "OC Emitida", "Publicada").
convocatoria.estado_convocatoriaintEtapa del llamado (1 = primer llamado, 2 = segundo llamado).
convocatoria.descripcionstringGlosa del llamado (ej: "Primer llamado").
documentos[].idint | stringID del documento adjunto. ⚠ En respuestas reales se observa como entero (ej: 1774796), no como UUID.
documentos[].nombrestringNombre del archivo adjunto.
fechas.fecha_publicaciondatetime ISO-8601Fecha y hora de publicación.
fechas.fecha_cierredatetime ISO-8601Fecha y hora de cierre del llamado vigente.
fechas.fecha_ultimo_cambiodatetime ISO-8601Timestamp del último cambio (clave para sincronización incremental).
fechas.fecha_cancelaciondatetime | nullFecha de cancelación (si aplica).
montos.monedastringMoneda del presupuesto (ej: "CLP").
montos.monto_disponiblenumberMonto disponible informado por el comprador.
montos.monto_disponible_clpnumberMonto disponible normalizado en CLP.
institucion.organismo_compradorstringNombre de la institución pública.
institucion.rutstringRUT del organismo comprador.
institucion.unidad_comprastringUnidad o división compradora.
institucion.regionint | nullCódigo de región (1 a 16).
institucion.nombre_regionstring | nullNombre de la región.
resumen.total_ofertas_recibidasintTotal de cotizaciones recibidas en el llamado actual.
motivos.motivo_cancelacionstring | nullMotivo de cancelación (si aplica).
motivos.motivo_desiertastring | nullMotivo de declaración desierta (si aplica).
motivos.motivo_seleccionstring | nullMotivo de selección del proveedor (si aplica).
links.detallestringRuta relativa para consultar el detalle (ej: "/v2/compra-agil/1057539-228-COT26").

4.4.2 Campos de Paginación (payload.paginacion)

CampoTipoDescripción
total_paginasintTotal de páginas disponibles.
numero_paginaintNúmero de la página actual.
tamano_paginaintCantidad de elementos por página.
total_resultadosintTotal 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:

CampoTipoDescripción
codigostringCódigo del proceso de Compra Ágil.
nombrestringTítulo del proceso.
descripcionstringDescripción detallada de la necesidad publicada.
estado.id_estadointID numérico del estado.
estado.codigostringCódigo del estado (publicada, proveedor_seleccionado, etc.).
estado.glosastringGlosa legible del estado.
convocatoria.estado_convocatoriaint1 = primer llamado, 2 = segundo llamado.
convocatoria.descripcionstringGlosa del llamado.
convocatoria.fecha_cierre_primer_llamadodatetime | nullCierre del primer llamado. ⚠ Formato observado: "YYYY-MM-DD HH:mm" (ej: "2026-08-14 11:00").
convocatoria.fecha_cierre_segundo_llamadodatetime | nullCierre del segundo llamado. ⚠ Formato observado: "YYYY-MM-DD HH:mm" (ej: "2026-08-18 11:00").
fechas.fecha_publicaciondatetimeFecha y hora de publicación.
fechas.fecha_cierredatetimeFecha de cierre del llamado activo.
fechas.fecha_ultimo_cambiodatetimeTimestamp del último cambio.
fechas.fecha_cancelaciondatetime | nullFecha de cancelación.
entrega.direccion_entregastringDirección física de entrega de bienes/servicios.
entrega.plazo_entrega_diasint | nullPlazo exigido en días corridos.
documentos[]arrayLista de documentos adjuntos (id, nombre).
presupuesto.tipo_presupuestostring"Disponible" o "Estimado".
presupuesto.monedastringMoneda (ej: "CLP", "USD").
presupuesto.presupuesto_estimadonumber | nullPresupuesto estimado.
presupuesto.monto_disponiblenumber | nullMonto disponible informado.
presupuesto.monto_disponible_clpnumber | nullMonto normalizado a CLP.
presupuesto.valor_cambio_monedanumber | nullTipo de cambio aplicado (si moneda $\neq$ CLP).
presupuesto.fecha_cambio_monedadatetime | nullFecha del tipo de cambio.
id_orden_compraint | nullCampo plano observado en respuestas reales. ID numérico de la Orden de Compra emitida (ej: 55348066).
orden_compra.id_orden_compraint | nullIndicador 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_ocint | nullID interno de la OC para vincular con la API v1 de Órdenes de Compra.
orden_compra.codigo_orden_comprastring | nullCódigo externo de la OC (ej: "1057532-156-AG26"). ⚠ Suele retornar null en la API real.
orden_compra.estado_orden_comprastring | nullEstado de la OC. ⚠ Suele retornar null en la API real.
institucion.organismo_compradorstringNombre de la institución.
institucion.rutstringRUT institucional.
institucion.unidad_comprastringUnidad/División.
institucion.regionint | nullCódigo de región (1-16).
institucion.nombre_regionstring | nullNombre 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 anidado orden_compra, sino como el campo plano payload.id_orden_compra (int | null; ej: 55348066). La estructura anidada orden_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[])

CampoTipoDescripción
codigo_productoint | stringCódigo del producto en el catálogo UNSPSC de Mercado Público.
nombrestringNombre del producto o servicio.
descripcionstring | nullEspecificación técnica detallada.
cantidadnumberCantidad requerida.
unidad_medidastringUnidad 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):

CampoTipoDescripción
rut_proveedorstringRUT del proveedor ofertante.
razon_socialstringRazón social o nombre del proveedor.
es_emtintEmpresa de Menor Tamaño (1 = Sí, 0 = No). ⚠ La guía oficial documenta boolean; en respuestas reales se observa el entero 0/1.
id_cotizacionintID interno de la cotización.
codigo_empresastringCódigo de la empresa en Mercado Público.
codigo_sucursal_empresastringCódigo de la sucursal de la empresa.
estadointEstado 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_inadmisibilidadstring | nullFundamento del rechazo cuando estado == 3.
estado_por_compradorstring | nullEstado asignado por el comprador.
proveedor_seleccionadointIndicador 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_seleccionstring | nullRazón de la elección del comprador (estructura de la guía oficial).
seleccion.criterio_seleccionstring | nullCriterio aplicado para adjudicar (estructura de la guía oficial).
activoboolean | nulltrue si la oferta se mantiene activa.
id_ocint | nullID de la OC asignada a la cotización ganadora.
fecha_creaciondatetimeFecha y hora en que se envió la oferta (ISO-8601; ej: "2026-08-17T12:02:58.013Z").
fecha_vigenciadatetime | nullFecha límite de validez de la oferta.
valor_netonumber | nullValor total neto (sin impuestos).
total_impuestonumber | nullMonto total de impuestos (ej: IVA).
monto_despachonumber | nullCosto de envío o despacho.
monto_totalnumber | nullMonto final ofertado (neto + impuesto + despacho).
nombre_impuestostring | nullTipo de impuesto (ej: "IVA").
porcentaje_impuestonumber | nullPorcentaje de impuesto (ej: 19).
descripcion_cotizacionstring | nullObservaciones/propuesta del proveedor.
descripcionstring | nullDescripción adicional de la cotización.
Detalle de Ítems Cotizados (proveedores_cotizando[].productos_cotizados[])

4.4.6 Resumen, Motivos y Flags

CampoTipoDescripción
resumen.multa_sancionnumber | nullMonto de multas o sanciones estipuladas.
resumen.total_ofertas_recibidasintTotal de ofertas ingresadas.
resumen.total_demandasintTotal de demandas agrupadas.
motivos.motivo_cancelacionstring | nullRazón de cancelación del proceso.
motivos.motivo_desiertastring | nullRazón de declaración desierta.
flags.considera_requisitos_medioambientalesbooleantrue si exige criterios sustentables.
flags.considera_requisitos_impacto_social_economicobooleantrue 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:

  1. Según la guía oficial, orden_compra.id_orden_compra o orden_compra.id_oc tendrá un valor numérico entero (distinto de null).
  2. Según el comportamiento real observado (2026-08-20), la vinculación retorna como el campo plano payload.id_orden_compra (int | null; ej: 55348066 para el proceso 2284-520-COT26), sin el objeto anidado orden_compra. La lógica de detección debe cubrir ambas formas (ver advertencia en 4.4.3).
  3. Para obtener el código textual de la OC (ej: "2284-672-AG26") y su detalle completo, utilice el ID id_orden_compra para 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

  1. Por código exacto de licitación:
    GET /servicios/v1/publico/licitaciones.json?codigo=1509-5-L114&ticket=TU_TICKET
    
  2. Licitaciones activas (publicadas el día de hoy):
    GET /servicios/v1/publico/licitaciones.json?estado=activas&ticket=TU_TICKET
    
  3. Por fecha específica (formato ddmmaaaa):
    GET /servicios/v1/publico/licitaciones.json?fecha=02022026&ticket=TU_TICKET
    
  4. Por estado y fecha específica:
    GET /servicios/v1/publico/licitaciones.json?fecha=02022026&estado=adjudicada&ticket=TU_TICKET
    
  5. Por código de organismo público:
    GET /servicios/v1/publico/licitaciones.json?fecha=02022026&CodigoOrganismo=6945&ticket=TU_TICKET
    
  6. 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ódigoEstadoDescripción
5PublicadaLa licitación se encuentra abierta recibiendo ofertas.
6CerradaFinalizó el plazo de recepción de ofertas.
7DesiertaNo se presentaron ofertas válidas o admisibles.
8AdjudicadaSe seleccionó la oferta ganadora y se dictó el acto administrativo.
18RevocadaEl proceso fue dejado sin efecto por la institución.
19SuspendidaEl proceso se encuentra pausado temporalmente por la autoridad.

5.3 Catálogos y Anexos de Licitaciones

5.3.1 Tipos de Licitación

CódigoSiglaDescripción Completa
1L1Licitación Pública Menor a 100 UTM
2LELicitación Pública Entre 100 y 1000 UTM
3LPLicitación Pública Mayor a 1000 UTM
4LSLicitación Pública de Servicios Personales Especializados
5A1Licitación Privada por Licitación Pública anterior sin oferentes
6B1Licitación Privada por otras causales, excluidas de la Ley de Compras
7J1Licitación Privada por Servicios de Naturaleza Confidencial
8F1Licitación Privada por Convenios con Personas Jurídicas Extranjeras fuera del Territorio Nacional
9E1Licitación Privada por Remanente de Contrato anterior
10COLicitación Privada entre 100 y 1000 UTM
11B2Licitación Privada Mayor a 1000 UTM
12A2Trato Directo por Producto de Licitación Privada anterior sin oferentes o desierta
13D1Trato Directo por Proveedor Único
14E2Licitación Privada Menor a 100 UTM
15C2Trato Directo (Cotización)
16C1Compra Directa (Orden de Compra)
17F2Trato Directo (Cotización)
18F3Compra Directa (Orden de Compra)
19G2Directo (Cotización)
20G1Compra Directa (Orden de Compra)
21R1Orden de Compra menor a 3 UTM
22CAOrden de Compra sin Resolución
23SEOrden de Compra proveniente de adquisición sin emisión automática de OC

5.3.2 Unidades Monetarias

5.3.3 Monto Estimado

5.3.4 Modalidad de Pago

5.3.5 Unidades de Tiempo (Evaluación y Duración de Contrato)

5.3.6 Tipo de Acto Administrativo de Adjudicación


5.4 Lógica de Valores Binarios (XML/JSON)

Varios campos de la API v1 utilizan codificación binaria/numérica:

CampoComentarioValoresEj. XML
InformadaIndica si la licitación es informada.1 = Sí, 0 = No<Informada>0</Informada>
CodigoTipoTipo de licitación.1 = Pública, 2 = Privada<CodigoTipo>1</CodigoTipo>
TomaRazonRequiere toma de razón en Contraloría.1 = Sí, 0 = No<TomaRazon>0</TomaRazon>
EstadoPublicidadOfertasOfertas técnicas públicas post apertura.1 = Sí, 0 = No<EstadoPublicidadOfertas>1</EstadoPublicidadOfertas>
ContratoExige firma de contrato formal.1 = Sí, 0 = No<Contrato>0</Contrato>
ObrasLicitación de Obra Pública.2 = Sí, 1 = No<Obras>1</Obras>
VisibilidadMontoVisibilidad del monto estimado.1 = Sí, 0 = No<VisibilidadMonto>1</VisibilidadMonto>
SubContratacionPermite subcontratación.1 = Sí, 0 = No<SubContratacion>1</SubContratacion>
ExtensionPlazoExtensión automática de plazo según art. 25.1 = Extiende, 0 = No extiende<ExtensionPlazo>0</ExtensionPlazo>
EsBaseTipoCreada usando bases tipo.1 = Sí, 0 = No<EsBaseTipo>0</EsBaseTipo>
EsRenovableContrato 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

ClaveTipoDescripciónEjemplo Observado
CantidadintNúmero de licitaciones encontradas en la respuesta.1 o 0
FechaCreacionstring (ISO-8601)Timestamp del servidor al generar la respuesta JSON."2026-08-20T10:15:43.577Z"
VersionstringVersión del servicio web."v1"
ListadoarrayArreglo de objetos de licitación.[ { ... } ]

5.5.2 Objeto Licitación — Identificación y Clasificación (Listado[])

ClaveTipoDescripciónEjemplo Observado
CodigoExternostringCódigo alfanumérico público del proceso."2284-24-L125"
NombrestringTítulo oficial de la licitación."INSUMOS CLINICOS DESTINADOS AL AREA DE SALUD MUNICIPAL. SOLICITUD Nº 4646-2025"
CodigoEstadointCódigo numérico del estado del proceso.8 (ver 5.2)
EstadostringGlosa descriptiva del estado actual."Adjudicada"
DescripcionstringJustificación y alcance detallado de la contratación."INSUMOS CLINICOS DESTINADOS AL AREA DE SALUD MUNICIPAL. SOLICITUD Nº 4646-2025"
CodigoTipointCódigo numérico del tipo de licitación.1
TipostringSigla del tipo de proceso."L1" (Licitación Pública Menor a 100 UTM; ver 5.3.1)
TipoConvocatoriastringTipo de llamado/convocatoria ("1" = Abierta)."1"
MonedastringCódigo de moneda de la licitación."CLP"
EtapasintNúmero de etapas del proceso (1 = Una etapa, 2 = Dos etapas).1
EstadoEtapasstringEstado actual de la etapa del proceso."1"
TomaRazonstringRequiere Toma de Razón en CGR ("1" = Sí, "0" = No)."0"
EstadoPublicidadOfertasintPublicidad de ofertas técnicas (1 = Públicas tras apertura).1
JustificacionPublicidadstringGlosa legal de visibilidad de las ofertas."Todas las ofertas técnicas serán visibles al público en general..."
ContratostringExige suscripción de contrato formal ("1" = Sí, "0" = No)."0"
ObrasstringModalidad de Obra Pública ("2" = Sí, "1" / "0" = No)."0"
CantidadReclamosintNúmero histórico de reclamos registrados contra el organismo.1370
DiasCierreLicitacionstringDías hábiles o corridos fijados para el cierre."0"
InformadaintIndica si la licitación fue informada (1 = Sí, 0 = No).0
EsBaseTipointCreada a partir de Bases Tipo de ChileCompra (1 = Sí, 0 = No).0
ExtensionPlazointExtensión automática de plazo (1 = Sí, 0 = No).0
EsRenovableintContrato renovable (1 = Sí, 0 = No).0
CodigoBIPstring | nullCódigo del Banco Integrado de Proyectos (inversión).null
EstimacionintModalidad del monto estimado (1 = Presupuesto disponible, 2 = Precio referencial).1
FuenteFinanciamientostringGlosa del origen de los recursos."" (o "Presupuesto Municipal", "FNDR", etc.)
VisibilidadMontointVisibilidad del monto estimado (1 = Visible, 0 = Oculto).1
MontoEstimadonumber | nullMonto referencial / disponible asignado a la licitación.3000000
JustificacionMontoEstimadostringFundamento técnico del cálculo presupuestario."0"
Tiempostring | nullValor numérico del tiempo de contrato o evaluación.null
UnidadTiempostringCódigo de unidad de tiempo ("1" = Horas, "2" = Días, "3" = Semanas, "4" = Meses)."2"
ModalidadintModalidad contractual.0
TipoPagostringCódigo de forma de pago ("1" = 30 días, "-1" = No especificado; ver 5.3.4)."-1"
ProhibicionContratacionstringCláusulas de inhabilidad o prohibición.""
SubContratacionstringPermite subcontratación ("1" = Sí, "0" = No)."1"
UnidadTiempoDuracionContratointUnidad de tiempo para la duración del contrato.0
TiempoDuracionContratostringDuración del contrato expresada en la unidad anterior."0"
TipoDuracionContratostringModalidad de duración ("Fijo", "Indefinido" o vacío)." "
ObservacionContractstring | nullNotas u observaciones contractuales adicionales.null
UnidadTiempoContratoLicitacionstringUnidad de tiempo licitada."0"
ValorTiempoRenovacionstringPlazo máximo de renovación de contrato."0"
PeriodoTiempoRenovacionstringUnidad del plazo de renovación." "
UnidadTiempoEvaluacionintUnidad temporal para la comisión evaluadora.2
DireccionVisitastringDirección de visita a terreno (si aplica).""
DireccionEntregastringDirección física de entrega de los suministros o servicios.""
NombreResponsablePagostringNombre del funcionario encargado de gestionar el pago.""
EmailResponsablePagostringCorreo electrónico de finanzas/pago a proveedores.""
NombreResponsableContratostringNombre del administrador de contrato designado.""
EmailResponsableContratostringCorreo del administrador de contrato.""
FonoResponsableContratostringTeléfono de contacto del administrador de contrato.""

5.5.3 Objeto Comprador (Listado[].Comprador)

ClaveTipoDescripciónEjemplo Observado
CodigoOrganismostringIdentificador único del organismo en ChileCompra."84152"
NombreOrganismostringRazón social institucional pública."I MUNICIPALIDAD VALDIVIA"
RutUnidadstringRUT tributario de la unidad ejecutora."69.200.100-1"
CodigoUnidadstringID de la unidad o departamento de adquisiciones."3278"
NombreUnidadstringGlosa de la unidad ejecutora."DPTO. DE SALUD MUNICIPAL DE VALDIVIA"
DireccionUnidadstringDirección de la oficina de adquisiciones."(UNIDAD FINANZAS)PEDRO AGUIRRE CERDA #231 INTERIOR"
ComunaUnidadstringComuna de la institución."Valdivia"
RegionUnidadstringRegión político-administrativa."Región de Los Ríos"
RutUsuariostringRUT del operador comprador que publicó la licitación."" (protegido / no informado)
CodigoUsuariostringID interno del usuario operador."1177869"
NombreUsuariostringNombre completo del operador comprador."DANIEL ALEJANDRO SOTO SANCHEZ"
CargoUsuariostringFunción o cargo del operador."COMPRADOR"

5.5.4 Objeto Fechas del Proceso (Listado[].Fechas)

ClaveTipoDescripciónEjemplo Observado
FechaCreacionstring (ISO)Fecha/hora de borrador y creación en sistema."2025-07-10T12:03:33.077"
FechaPublicacionstring (ISO)Fecha/hora oficial de publicación en el portal."2025-07-24T10:11:27.74"
FechaIniciostring (ISO)Inicio del período de preguntas del foro."2025-07-24T10:11:27.74"
FechaFinalstring (ISO)Fin del período de preguntas en el foro."2025-07-25T13:49:00"
FechaPubRespuestasstring (ISO)Fecha límite de publicación del acta de respuestas."2025-07-26T13:49:00"
FechaCierrestring (ISO)Cierre definitivo para ingresar ofertas electrónicas."2025-07-29T15:01:00"
FechaActoAperturaTecnicastring (ISO)Apertura de antecedentes técnicos."2025-07-29T15:02:00"
FechaActoAperturaEconomicastring (ISO)Apertura de ofertas económicas."2025-07-29T15:02:00"
FechaEstimadaAdjudicacionstring (ISO)Fecha proyectada informada en las bases."2025-08-13T13:49:00"
FechaAdjudicacionstring (ISO)Fecha real de firma y publicación de adjudicación."2025-08-20T10:13:13.55"
FechaEstimadaFirmastring | nullPlazo proyectado para la suscripción de contrato.null
FechaVisitaTerrenostring | nullFecha y hora de visita a terreno obligatoria/opcional.null
FechaEntregaAntecedentesstring | nullFecha límite de entrega de muestras físicas.null
FechaSoporteFisicostring | nullFecha de entrega de garantías físicas.null
FechaTiempoEvaluacionstring | nullPeríodo estimado de trabajo de la comisión evaluadora.null
FechasUsuariostring | nullHitos temporales adicionales definidos por el usuario.null

5.5.5 Objeto Adjudicación (Listado[].Adjudicacion)

ClaveTipoDescripciónEjemplo Observado
TipointTipo de acto administrativo (1 = Autorización, 2 = Resolución, 4 = Decreto; ver 5.3.6).4
NumerostringNúmero correlativo del Decreto o Resolución de adjudicación."1271"
Fechastring (ISO)Fecha del acto administrativo."2025-08-14T00:00:00"
NumeroOferentesintCantidad total de proveedores que enviaron ofertas.9
UrlActastringEnlace 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[])

ClaveTipoDescripciónEjemplo Observado
CorrelativointNúmero correlativo de la línea de producto licitado.1
CodigoProductointCódigo estándar del producto (UNSPSC).42311514
CodigoCategoriastringCódigo de la familia/categoría UNSPSC."42311500"
CategoriastringNombre estructurado del rubro jerárquico."Equipamiento y suministros médicos / Productos para el cuidado de heridas / Vendas..."
NombreProductostringDenominación genérica en el catálogo."Vendajes germicidas"
DescripcionstringEspecificación técnica requerida por el comprador."INSUMOS VARIOS, SEGUN FORMULARIO PRESENTACION OFERTA ECONOMICA, ADJUNTO."
UnidadMedidastringUnidad de despacho o empaque."Unidad"
CantidadnumberCantidad demandada por la institución.1
Adjudicacion.RutProveedorstringRUT del oferente seleccionado para esta línea."76.706.567-1"
Adjudicacion.NombreProveedorstringRazón social del proveedor adjudicado."HOSPIMEDICA SPA"
Adjudicacion.CantidadnumberCantidad efectivamente adjudicada.1.5867
Adjudicacion.MontoUnitarionumberPrecio 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

  1. Por código exacto de Orden de Compra:
    GET /servicios/v1/publico/ordenesdecompra.json?codigo=2097-241-SE14&ticket=TU_TICKET
    
  2. Por fecha específica (formato ddmmaaaa):
    GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&ticket=TU_TICKET
    
  3. Por todos los estados del día actual:
    GET /servicios/v1/publico/ordenesdecompra.json?estado=todos&ticket=TU_TICKET
    
  4. Por estado y fecha específica:
    GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&estado=aceptada&ticket=TU_TICKET
    
  5. Por código de organismo público:
    GET /servicios/v1/publico/ordenesdecompra.json?fecha=02022026&CodigoOrganismo=6945&ticket=TU_TICKET
    
  6. 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éricoGlosa del Estado
enviadaproveedor4Enviada a Proveedor
enproceso5En proceso
aceptada6Aceptada
cancelada9Cancelada
recepcionconforme12Recepción Conforme
pendienterecepcion13Pendiente de Recepcionar
recepcionaceptadacialmente14Recepcionada Parcialmente
recepecionconformeincompleta15Recepción Conforme Incompleta
todosN/AConsulta todos los estados

6.3 Catálogos y Anexos de Órdenes de Compra

6.3.1 Tipos de Orden de Compra

CódigoAbreviaciónDescripción
1OCAutomática
2D1Trato directo que genera Orden de Compra por proveedor único
3C1Trato directo por emergencia, urgencia e imprevisto
4F3Trato directo por confidencialidad
5G1Trato directo por naturaleza de negociación
6R1Orden de compra menor a 3 UTM
7CAOrden de compra sin resolución
8SESin emisión automática
9CMConvenio Marco
10FGTrato Directo (Art. 8 letras f y g - Ley 19.886)
11TLConvenio Marco – Tienda de Libros (Obsoleto)
12MCMicrocompra
13AGCompra Ágil
14CCCompra Coordinada

6.3.2 Tipos de Despacho (OC)

6.3.3 Tipos de Pago (OC)


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

ClaveTipoDescripciónEjemplo Observado
CantidadintTotal de Órdenes de Compra devueltas.1
FechaCreacionstring (ISO)Timestamp del servidor al generar la respuesta."2026-08-20T14:20:32.171Z"
VersionstringVersión del servicio web."v1"
ListadoarrayLista con los objetos de la Orden de Compra.[ { ... } ]

6.4.2 Objeto Orden de Compra — Identificación y Estado (Listado[])

ClaveTipoDescripciónEjemplo Observado
CodigostringCódigo público oficial de la Orden de Compra."2284-672-AG26"
NombrestringTítulo asignado a la adquisición."MEDICAMENTOS BOTIQUIN — SOLICITUD Nº 6346"
DescripcionstringJustificación y detalle administrativo de la emisión."MEDICAMENTOS BOTIQUIN — SOLICITUD Nº 6346\r\n\r\n"
CodigoEstadointEstado numérico de la OC (ver 6.2).5 (En proceso)
EstadostringGlosa del estado actual en el sistema."En proceso"
CodigoLicitacionstringCódigo de la licitación o convenio de origen (vacío si es Compra Ágil o Trato Directo).""
CodigoTipostringCódigo numérico del tipo de compra (ver 6.3.1)."13" (AG = Compra Ágil)
TipostringSigla del mecanismo de compra."AG"
TipoMonedastringMoneda de transacción."CLP"
CodigoEstadoProveedorintEstado en la bandeja del proveedor (2 = En proceso, 4 = Aceptada, 6 = Rechazada).2
EstadoProveedorstringGlosa del estado del proveedor."En proceso"
TieneItemsstringIndica si contiene líneas de detalle ("1" = Sí, "0" = No)."1"
PromedioCalificacionnumberCalificación del proveedor otorgada por el comprador (0 a 5).0
CantidadEvaluacionintEvaluaciones de desempeño registradas para esta OC.0
FinanciamientostringGlosa del ítem presupuestario asignado."SALUD MUNICIPAL"
PaisstringPaís de origen de la transacción."Other" (o "CL")
TipoDespachostringCódigo de forma de entrega (ver 6.3.2)."7"
FormaPagostringCódigo de condición de pago (ver 6.3.3)."2"

6.4.3 Montos e Impuestos de la OC (Listado[])

ClaveTipoDescripciónEjemplo Observado
TotalNetonumberSuma de valores netos de todos los ítems.630000
PorcentajeIvanumberTasa de IVA aplicada.19
ImpuestosnumberTotal del impuesto calculado.119700
TotalnumberMonto bruto final a pagar (Neto + Impuestos + Cargos − Descuentos).749700
DescuentosnumberDescuentos globales aplicados.0
CargosnumberFletes, recargos o costos logísticos adicionales.0

6.4.4 Fechas de la Orden de Compra (Listado[].Fechas)

ClaveTipoDescripciónEjemplo Observado
FechaCreacionstring (ISO)Fecha/hora en que el comprador emitió el borrador de la OC."2026-08-19T14:35:12.257"
FechaEnviostring (ISO)Fecha/hora en que la OC fue despachada formalmente al proveedor."2026-08-19T14:39:29.013"
FechaUltimaModificacionstring (ISO)Último cambio de estado o actualización registrado."2026-08-19T14:39:00"
FechaAceptacionstring | nullFecha en que el proveedor aceptó la OC en su escritorio de Mercado Público.null
FechaCancelacionstring | nullFecha de resciliación o cancelación administrativa.null

6.4.5 Objeto Comprador (Listado[].Comprador)

ClaveTipoDescripciónEjemplo Observado
CodigoOrganismostringIdentificador único del organismo público."84152"
NombreOrganismostringRazón social institucional."I MUNICIPALIDAD VALDIVIA"
RutUnidadstringRUT fiscal de la unidad compradora."69.200.100-1"
CodigoUnidadstringID de la unidad en el directorio institucional."3278"
NombreUnidadstringNombre del departamento u hospital comprador."DPTO. DE SALUD MUNICIPAL DE VALDIVIA"
ActividadstringRubro o actividad económica del organismo."SALUD"
DireccionUnidadstringDirección de la sede central.""
ComunaUnidadstringComuna de la institución."Valdivia"
RegionUnidadstringRegión administrativa."Región de Los Ríos"
PaisstringPaís del organismo comprador."Other"
NombreContactostringFuncionario emisor o contacto del proceso."Dante Benner Fuentes"
CargoContactostringPuesto del funcionario emisor."administrativo"
FonoContactostringTeléfono directo del comprador.""
MailContactostringCorreo institucional del comprador.""

6.4.6 Objeto Proveedor (Listado[].Proveedor)

ClaveTipoDescripciónEjemplo Observado
CodigostringID interno de la empresa en el Registro de Proveedores."1674633"
NombrestringRazón social registrada del proveedor."Bastian Ignacio"
ActividadstringGiro o actividad comercial ante el SII."VENTAS Y SERVICIOS"
CodigoSucursalstringID de la sucursal emisora seleccionada."1083547"
NombreSucursalstringNombre de fantasía o sucursal."ECOMCH"
RutSucursalstringRUT de facturación de la empresa/sucursal."77.027.029-4"
DireccionstringDirección comercial o casa matriz."HUALCURA N° 821"
ComunastringComuna del proveedor."Quilicura"
RegionstringRegión del proveedor."Región Metropolitana de Santiago"
PaisstringPaís del proveedor."Other"
NombreContactostringRepresentante legal o contacto comercial."Bastian Ignacio Toro Delgadillo"
CargoContactostringCargo del representante."Gerente General"
FonoContactostringTeléfono del proveedor.""
MailContactostringCorreo del proveedor.""

6.4.7 Ítems de la OC (Listado[].Items.Listado[])

ClaveTipoDescripciónEjemplo Observado
CorrelativointLínea de producto en la OC.1
CodigoCategoriaintID numérico del rubro UNSPSC.51121700
CategoriastringÁrbol jerárquico de la categoría de compras."Medicamentos y productos farmacéuticos / Medicamentos cardiovasculares..."
CodigoProductointID estándar del producto.51121709
ProductostringNombre del producto en catálogo."Carvedilol"
EspecificacionCompradorstringRequerimiento específico del comprador."CARVEDILOL 6.25 MG COMPRIMIDO"
EspecificacionProveedorstringMarca, modelo o detalle ofertado por el proveedor."CARVEDILOL 6.25 MG COMPRIMIDO"
CantidadnumberUnidades compradas.35000
Unidadstring | nullGlosa de unidad de medida.null
MonedastringMoneda del precio unitario."CLP"
PrecioNetonumberPrecio unitario neto acordado.18
TotalCargosnumberRecargos asignados a esta línea.0
TotalDescuentosnumberDescuentos asignados a esta línea.0
TotalImpuestosnumberImpuestos calculados para esta línea.0
TotalnumberTotal 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 HTTPNombreCausa TípicaAcción Recomendada
203Non-Authoritative InformationTicket 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).
400Bad RequestPará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.
401UnauthorizedFalta el header ticket o el valor no fue enviado.Incluir el header ticket: TU_TICKET en la petición.
403ForbiddenEl ticket no existe, está inactivo o bloqueado.Verificar el ticket en el correo de ChileCompra o solicitar uno nuevo.
404Not FoundEl código de recurso (licitación, OC o Compra Ágil) no existe.Verificar el código externo consultado.
429Too Many RequestsSe agotó la cuota diaria asignada al ticket.Espere a la medianoche UTC o revise la cabecera Retry-After.
500Internal Server ErrorError interno no controlado en el servidor de ChileCompra.Reintentar tras unos minutos.
503Service UnavailableServicio 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&region=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érminoDefinición
APIInterfaz de Programación de Aplicaciones (Application Programming Interface). Permite la comunicación estructurada entre sistemas informáticos.
Compra ÁgilMecanismo 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).
TicketCredencial alfanumérica (API Key UUID) exigida en el encabezado de las peticiones para autenticar al cliente y verificar su cuota de uso.
Token BucketAlgoritmo de control de tasa de solicitudes utilizado para limitar el consumo por ticket y evitar la sobrecarga del servidor.
Header HTTPCabecera HTTP enviada en las peticiones que transporta metadatos y credenciales (ej: ticket: <UUID>).
EndpointDirección URL específica expuesta por la API que atiende una función o recurso concreto.
PayloadCuerpo o contenido principal con los datos requeridos en la respuesta JSON.
PaginaciónMecanismo que divide conjuntos grandes de resultados en páginas pequeñas de tamaño fijo.
ISO-8601Estándar internacional para representación de fechas y horas (ej: 2026-04-01T12:00:00Z).
CLPCódigo ISO 4217 correspondiente al Peso Chileno.
EMTEmpresa de Menor Tamaño. Clasificación del Registro de Proveedores de ChileCompra.
ConvocatoriaLlamado oficial a proveedores para presentar cotizaciones en Compra Ágil (Primer o Segundo llamado).
OC / Orden de CompraDocumento legal y administrativo que formaliza la compra al proveedor seleccionado.
HTTP 429 Too Many RequestsCódigo de estado HTTP que notifica el agotamiento de la cuota diaria asignada al ticket.
Retry-AfterCabecera HTTP devuelta en respuestas 429 indicando el tiempo exacto a esperar antes de reintentar.
DCCPDirección de Compras y Contratación Pública (ChileCompra).
Sincronización IncrementalTé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

  1. 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.
  2. 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”.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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):

  1. API Pública Oficial (api.mercadopublico.cl y api2.mercadopublico.cl):
    • La API oficial no provee endpoints de descarga directa de archivos binarios.
    • Solo retorna los metadatos descriptivos (id numérico y nombre del archivo).
    • Los endpoints no documentados retornan HTTP 403 Forbidden o HTTP 404 Not Found.
  2. Portal Web Tradicional (www.mercadopublico.cl):
    • Las rutas tradicionales de descarga (/Procurement/Modules/RFQ/DownloadAttachment.aspx) devuelven una redirección HTTP 302 al formulario de inicio de sesión (/portal/login.aspx), exigiendo una sesión web activa autenticada con ClaveÚnica.
  3. 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.

[!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:

  1. 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.
  2. Estrategia de autenticación según versión: implementar un helper unificado fetchMercadoPublico(tipo, codigo) que:
    • Inyecte ?ticket={TICKET} en la URL para v1 (licitaciones y ordenesdecompra).
    • Inyecte headers: { ticket: TICKET } para v2 (compra-agil).
  3. 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).
  4. Mapeo de Compra Ágil a Orden de Compra: la API v2 entrega id_orden_compra numé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.
  5. 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}.
Volver a manualesDescargar archivo .md