> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pruff.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Listar licitaciones

> Lista paginada de las licitaciones de Mercado Público (ChileCompra) que Pruff tiene cargadas. Puedes filtrar por proveedor, organismo comprador, rango de fechas, tipo y estado.

El rango de fechas (`from` y `to`) es obligatorio y se aplica sobre la fecha de publicación (por defecto) o de adjudicación, según `dateField`. Las fechas se interpretan como días en hora de Chile: `from=2026-03-01&to=2026-03-31` incluye todo lo publicado entre el 1 y el 31 de marzo, hora Chile. Los resultados se ordenan por esa misma fecha.

Si no hay licitaciones para los filtros, responde `200` con `data` vacío.

**Límites**

- Rango de fechas: máximo 31 días si no indicas `supplierId` ni `buyerId`; máximo 366 días si indicas alguno.
- Profundidad de paginación: `page` por `pageSize` no puede superar 10.000. Para recorrer más resultados, divide el rango de fechas.
- Cuota: 300 solicitudes por hora por empresa, compartida con los demás endpoints de Mercado Público y con otras consultas de Datahub de tu empresa.

Para ver la descripción, los ítems y los proveedores adjudicados, usa `GET /datahub/publicMarket/tenders/{code}`.



## OpenAPI

````yaml openapi/clients.yaml GET /datahub/publicMarket/tenders
openapi: 3.1.0
info:
  title: API de clientes de Pruff
  version: '1'
  description: >-
    Endpoints que tus sistemas llaman para leer y operar los datos de tu empresa
    en Pruff. Todas las solicitudes van por HTTPS y se autentican con el header
    `x-api-key`. Las convenciones de formato, paginación y errores se describen
    en https://docs.pruff.com/api/introduccion.
servers:
  - url: https://api.pruff.com/api/clients
security:
  - ApiKeyAuth: []
tags:
  - name: Facturas
    description: Consulta de facturas electrónicas, facturas transables y cesiones.
  - name: Documentos
    description: Consulta y creación de documentos asociados a tus clientes.
  - name: Archivos
    description: Carga de archivos a operaciones y a los requerimientos de tus documentos.
  - name: Financiamiento
    description: >-
      Simula créditos, crea solicitudes de factoring y consulta las prórrogas de
      tu empresa.
  - name: Comité
    description: >-
      Consulta las aprobaciones de una solicitud en los comités de riesgo y de
      operaciones, y registra nuevas firmas.
  - name: Chat
    description: Exporta y envía mensajes del chat de una solicitud.
  - name: Reportes
    description: >-
      Reportes de operaciones, cartera, recaudaciones, cuentas pendientes y
      flujos de tu empresa.
  - name: Datahub
    description: >-
      Consulta de la información tributaria, financiera y de riesgo que Pruff
      tiene de tus clientes y deudores.
  - name: Mercado Público
    description: >-
      Licitaciones y órdenes de compra de Mercado Público (ChileCompra) cargadas
      en Pruff.
  - name: CRM
    description: >-
      Datos comerciales de tu CRM en Pruff: empresas con su ficha, pipeline,
      prospectos, gestiones y simulaciones.
  - name: SGR
    description: Operaciones SGR (garantías) de tu empresa.
  - name: Sincronizador
    description: >-
      Pide sincronizar a un cliente con el SII o la TGR para obtener su
      información más actualizada, y consulta el estado de esas
      sincronizaciones.
  - name: Usuarios
    description: >-
      Administra los usuarios de tu empresa en Pruff (crear, editar, eliminar,
      consultar su perfil y asignar subordinados) y consulta las cuentas
      (empresas conectadas) a las que cada usuario tiene acceso.
  - name: Contactos
    description: Crea contactos asociados a las empresas de tu cartera.
paths:
  /datahub/publicMarket/tenders:
    get:
      tags:
        - Mercado Público
      summary: Listar licitaciones
      description: >-
        Lista paginada de las licitaciones de Mercado Público (ChileCompra) que
        Pruff tiene cargadas. Puedes filtrar por proveedor, organismo comprador,
        rango de fechas, tipo y estado.


        El rango de fechas (`from` y `to`) es obligatorio y se aplica sobre la
        fecha de publicación (por defecto) o de adjudicación, según `dateField`.
        Las fechas se interpretan como días en hora de Chile:
        `from=2026-03-01&to=2026-03-31` incluye todo lo publicado entre el 1 y
        el 31 de marzo, hora Chile. Los resultados se ordenan por esa misma
        fecha.


        Si no hay licitaciones para los filtros, responde `200` con `data`
        vacío.


        **Límites**


        - Rango de fechas: máximo 31 días si no indicas `supplierId` ni
        `buyerId`; máximo 366 días si indicas alguno.

        - Profundidad de paginación: `page` por `pageSize` no puede superar
        10.000. Para recorrer más resultados, divide el rango de fechas.

        - Cuota: 300 solicitudes por hora por empresa, compartida con los demás
        endpoints de Mercado Público y con otras consultas de Datahub de tu
        empresa.


        Para ver la descripción, los ítems y los proveedores adjudicados, usa
        `GET /datahub/publicMarket/tenders/{code}`.
      operationId: listPublicMarketTenders
      parameters:
        - name: from
          in: query
          required: true
          description: >-
            Fecha de inicio del rango (inclusive), en formato `YYYY-MM-DD`,
            sobre la fecha indicada en `dateField`. Se interpreta como día en
            hora de Chile.
          schema:
            type: string
            format: date
          example: '2026-03-01'
        - name: to
          in: query
          required: true
          description: >-
            Fecha de fin del rango (inclusive), en formato `YYYY-MM-DD`. Se
            interpreta como día en hora de Chile. No puede ser anterior a
            `from`. El rango no puede superar 31 días, o 366 días si indicas
            `supplierId` o `buyerId`.
          schema:
            type: string
            format: date
          example: '2026-03-31'
        - name: dateField
          in: query
          required: false
          description: >-
            Fecha sobre la que se aplica el rango y por la que se ordena el
            resultado: `publication` (fecha de publicación) o `adjudication`
            (fecha de adjudicación).
          schema:
            type: string
            enum:
              - publication
              - adjudication
            default: publication
          example: publication
        - name: supplierId
          in: query
          required: false
          description: >-
            RUT del proveedor, sin puntos y con guion. Devuelve las licitaciones
            en que ese RUT figura como proveedor adjudicado de algún ítem.
          schema:
            type: string
          example: 76111111-6
        - name: buyerId
          in: query
          required: false
          description: RUT del organismo comprador, sin puntos y con guion.
          schema:
            type: string
          example: 69111111-3
        - name: types
          in: query
          required: false
          style: form
          explode: false
          description: >-
            Tipos de licitación, separados por coma. Si no lo envías, no se
            filtra por tipo.
          schema:
            type: array
            items:
              type: string
              enum:
                - L1
                - LE
                - LP
                - LQ
                - LR
                - E2
                - CO
                - B2
                - H2
                - I2
                - LS
                - O1
                - O2
                - DC
          example:
            - LE
            - LP
        - name: status
          in: query
          required: false
          style: form
          explode: false
          description: >-
            Códigos de estado, separados por coma: `5` Publicada, `6` Cerrada,
            `7` Desierta, `8` Adjudicada, `15` y `18` Revocada, `16` y `19`
            Suspendida. Si no lo envías, no se filtra por estado.
          schema:
            type: array
            items:
              type: integer
              enum:
                - 5
                - 6
                - 7
                - 8
                - 15
                - 16
                - 18
                - 19
          example:
            - 5
            - 8
        - name: page
          in: query
          required: false
          description: >-
            Página, desde 1. `page` por `pageSize` no puede superar 10.000; para
            recorrer más resultados, divide el rango de fechas.
          schema:
            type: integer
            minimum: 1
            default: 1
          example: 1
        - name: pageSize
          in: query
          required: false
          description: Resultados por página, entre 1 y 100.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
          example: 50
        - name: sortOrder
          in: query
          required: false
          description: >-
            Orden por la fecha indicada en `dateField` (publicación o
            adjudicación).
          schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
          example: desc
      responses:
        '200':
          description: Página de licitaciones.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicMarketTenderList'
              example:
                data:
                  - code: 1234-56-LE26
                    name: Servicio de aseo de dependencias municipales
                    type: LE
                    statusCode: 8
                    status: Adjudicada
                    currency: CLP
                    estimatedAmount: 5000000
                    buyerIdentifier: 69111111-3
                    publicationDate: '2026-03-10T12:00:00-03:00'
                    closeDate: '2026-03-20T12:00:00-03:00'
                    adjudicationDate: '2026-04-01T12:00:00-03:00'
                pagination:
                  total: 1
                  page: 1
                  pageSize: 10
                  totalPages: 1
        '400':
          description: >-
            Algún query param no es válido. `message` y `displayMessage`
            corresponden al primer error; `data.errors` los lista todos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                missingFrom:
                  summary: Falta una fecha
                  value:
                    message: invalid_type
                    displayMessage: Debes indicar la fecha en formato YYYY-MM-DD
                    data:
                      errors:
                        - path: from
                          message: Debes indicar la fecha en formato YYYY-MM-DD
                          code: invalid_type
                rangeTooLong:
                  summary: Rango demasiado largo
                  value:
                    message: custom
                    displayMessage: El rango de fechas no puede superar 31 días
                    data:
                      errors:
                        - path: to
                          message: El rango de fechas no puede superar 31 días
                          code: custom
                invalidRange:
                  summary: Fecha de inicio posterior a la de fin
                  value:
                    message: custom
                    displayMessage: >-
                      La fecha de inicio no puede ser posterior a la fecha de
                      fin
                    data:
                      errors:
                        - path: from
                          message: >-
                            La fecha de inicio no puede ser posterior a la fecha
                            de fin
                          code: custom
                pageTooDeep:
                  summary: Paginación demasiado profunda
                  value:
                    message: custom
                    displayMessage: >-
                      Solo se pueden recorrer 10000 resultados; acota el rango
                      de fechas
                    data:
                      errors:
                        - path: page
                          message: >-
                            Solo se pueden recorrer 10000 resultados; acota el
                            rango de fechas
                          code: custom
                invalidPageSize:
                  summary: pageSize fuera de rango
                  value:
                    message: too_big
                    displayMessage: pageSize debe ser menor o igual a 100
                    data:
                      errors:
                        - path: pageSize
                          message: pageSize debe ser menor o igual a 100
                          code: too_big
                invalidType:
                  summary: Tipo no válido
                  value:
                    message: invalid_value
                    displayMessage: El tipo de licitación no es válido
                    data:
                      errors:
                        - path: types.0
                          message: El tipo de licitación no es válido
                          code: invalid_value
                invalidStatus:
                  summary: Código de estado no válido
                  value:
                    message: custom
                    displayMessage: El código de estado no es válido
                    data:
                      errors:
                        - path: status.0
                          message: El código de estado no es válido
                          code: custom
                invalidIdentifier:
                  summary: RUT no válido
                  value:
                    message: invalid_union
                    displayMessage: El RUT o Nit ingresado no es válido.
                    data:
                      errors:
                        - path: supplierId
                          message: El RUT o Nit ingresado no es válido.
                          code: invalid_union
                invalidDateField:
                  summary: dateField no válido
                  value:
                    message: invalid_value
                    displayMessage: dateField debe ser publication o adjudication
                    data:
                      errors:
                        - path: dateField
                          message: dateField debe ser publication o adjudication
                          code: invalid_value
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          description: >-
            Superaste el límite de solicitudes. Los endpoints de Mercado Público
            y otras consultas de Datahub de tu empresa comparten un máximo de
            **300 solicitudes por hora por empresa** (todas las API keys de tu
            empresa suman en el mismo contador). Además, todos los endpoints de
            la API de clientes comparten un máximo de **500 solicitudes por
            minuto por empresa**. El body y el header `Retry-After` indican
            cuándo puedes reintentar.
          headers:
            Retry-After:
              description: Segundos que debes esperar antes de reintentar.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatahubRateLimitError'
              example:
                message: >-
                  Rate limit exceeded: 301 requests in the current 3600s window,
                  limit is 300. Retry in 1200s.
                displayMessage: >-
                  Superaste el límite de 300 solicitudes cada 3600 segundos.
                  Vuelve a intentarlo en 1200 segundos.
                data:
                  code: RATE_LIMIT_EXCEEDED
                  scope: All API keys of your company share this budget.
                  limit: 300
                  used: 301
                  windowSeconds: 3600
                  retryAfterSeconds: 1200
                  resetAt: '2026-03-10T16:00:00.000Z'
                  hint: >-
                    Wait until resetAt (or honor the Retry-After header) before
                    retrying. Avoid repeating identical requests: reuse
                    responses you already fetched, use filters and larger
                    pageSize values instead of one request per item, and cap
                    your client concurrency.
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    PublicMarketTenderList:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PublicMarketTenderListItem'
        pagination:
          $ref: '#/components/schemas/Pagination'
    ValidationError:
      type: object
      required:
        - message
        - displayMessage
        - data
      description: Error de validación del body, de los query params o de los path params.
      properties:
        message:
          type: string
          description: >-
            Código del primer error de validación (por ejemplo `custom`,
            `invalid_type`, `invalid_format`, `invalid_value`, `invalid_union`).
        displayMessage:
          type: string
          description: >-
            Mensaje del primer error de validación, pensado para mostrarlo a una
            persona. Normalmente en español; algunos mensajes de validación
            vienen en inglés.
        data:
          type: object
          required:
            - errors
          properties:
            errors:
              type: array
              description: Todos los errores de validación encontrados.
              items:
                type: object
                required:
                  - path
                  - message
                  - code
                properties:
                  path:
                    type: string
                    description: >-
                      Campo con el error. Para listas incluye la posición, por
                      ejemplo `types.0`. `(root)` si el error es del body
                      completo.
                  message:
                    type: string
                    description: Descripción del error en español.
                  code:
                    type: string
                    description: Código del tipo de error.
    DatahubRateLimitError:
      type: object
      required:
        - message
        - displayMessage
        - data
      description: Respuesta cuando superas el límite de solicitudes.
      properties:
        message:
          type: string
          description: Detalle del límite superado, en inglés.
        displayMessage:
          type: string
          description: >-
            Mensaje pensado para mostrarlo a una persona. Normalmente en
            español; algunos mensajes de validación vienen en inglés.
        data:
          type: object
          properties:
            code:
              type: string
              enum:
                - RATE_LIMIT_EXCEEDED
              description: Código estable del error.
            scope:
              type: string
              description: A quién aplica el límite.
            limit:
              type: integer
              description: Máximo de solicitudes permitidas en la ventana.
            used:
              type: integer
              description: Solicitudes contadas en la ventana actual.
            windowSeconds:
              type: integer
              description: Duración de la ventana, en segundos.
            retryAfterSeconds:
              type: integer
              description: Segundos que debes esperar antes de reintentar.
            resetAt:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Instante (ISO 8601, UTC) en que se reinicia el contador. Puede
                ser `null`.
            hint:
              type: string
              description: Recomendación para evitar el límite.
    PublicMarketTenderListItem:
      type: object
      required:
        - code
        - name
        - type
        - statusCode
        - status
        - currency
        - estimatedAmount
        - buyerIdentifier
        - publicationDate
        - closeDate
        - adjudicationDate
      properties:
        code:
          type: string
          description: >-
            Código de la licitación en Mercado Público. Úsalo en `GET
            /datahub/publicMarket/tenders/{code}` para ver el detalle.
        name:
          type:
            - string
            - 'null'
          description: Nombre de la licitación. `null` si no está disponible.
        type:
          type: string
          enum:
            - L1
            - LE
            - LP
            - LQ
            - LR
            - E2
            - CO
            - B2
            - H2
            - I2
            - LS
            - O1
            - O2
            - DC
          description: Tipo de licitación.
        statusCode:
          type: integer
          description: Código del estado.
        status:
          type: string
          description: >-
            Estado en texto: `Publicada` (5), `Cerrada` (6), `Desierta` (7),
            `Adjudicada` (8), `Revocada` (15 y 18), `Suspendida` (16 y 19).
            `Desconocido` si el código no está mapeado.
        currency:
          type:
            - string
            - 'null'
          enum:
            - CLP
            - CLF
            - USD
            - UTM
            - EUR
            - null
          description: Moneda de la licitación. `null` si no está disponible.
        estimatedAmount:
          type:
            - number
            - 'null'
          description: >-
            Monto estimado, en la moneda de la licitación. `null` si no está
            disponible.
        buyerIdentifier:
          type: string
          description: RUT del organismo comprador.
        publicationDate:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Fecha de publicación. `null` si la licitación no tiene. Formato ISO
            8601 con la hora y el desfase horario de Chile, por ejemplo
            `2026-03-10T12:00:00-03:00`.
        closeDate:
          type: string
          format: date-time
          description: >-
            Fecha de cierre de ofertas. Formato ISO 8601 con la hora y el
            desfase horario de Chile, por ejemplo `2026-03-10T12:00:00-03:00`.
        adjudicationDate:
          type: string
          format: date-time
          description: >-
            Fecha de adjudicación. Formato ISO 8601 con la hora y el desfase
            horario de Chile, por ejemplo `2026-03-10T12:00:00-03:00`.
    Pagination:
      type: object
      required:
        - total
        - page
        - pageSize
        - totalPages
      properties:
        total:
          type: integer
          description: Cantidad total de elementos que cumplen los filtros.
        page:
          type: integer
          description: Página devuelta, desde 1.
        pageSize:
          type: integer
          description: Cantidad de elementos por página.
        totalPages:
          type: integer
          description: Cantidad total de páginas.
    Error:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: >-
            Identifica el error. En algunos casos es un texto en inglés con
            valores variables. Para tu lógica, usa el código HTTP y, cuando
            exista, `data.code`.
        displayMessage:
          type: string
          description: >-
            Mensaje pensado para mostrarlo a una persona. Normalmente en
            español; algunos mensajes de validación vienen en inglés.
        data:
          description: Detalle adicional del error, cuando existe.
  responses:
    Unauthorized:
      description: >-
        Falta el header `x-api-key`, su valor no es válido o la cuenta de API de
        tu empresa no está habilitada.
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
          example:
            message: 'Unauthorized: Invalid API Key'
    InternalError:
      description: >-
        Error inesperado en Pruff. El texto de `message` puede variar (por
        ejemplo en mayúsculas); no dependas de él.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Internal server error
    Timeout:
      description: >-
        La solicitud superó el tiempo máximo de 55 segundos. La operación puede
        haberse completado igual: antes de reintentar una solicitud que crea o
        modifica datos, verifica su estado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: request_timeout
            displayMessage: La solicitud excedió el tiempo máximo permitido
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key que Pruff entrega a tu empresa.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.