> ## 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 órdenes de compra

> Lista paginada de las órdenes de compra 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 creación de la orden, que también define el orden del resultado. Las fechas se interpretan como días en hora de Chile.

Si no hay órdenes 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 montos, unidades e ítems, usa `GET /datahub/publicMarket/purchaseOrders/{code}`.



## OpenAPI

````yaml openapi/clients.yaml GET /datahub/publicMarket/purchaseOrders
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/purchaseOrders:
    get:
      tags:
        - Mercado Público
      summary: Listar órdenes de compra
      description: >-
        Lista paginada de las órdenes de compra 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 creación de la orden, que también define el orden del
        resultado. Las fechas se interpretan como días en hora de Chile.


        Si no hay órdenes 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 montos, unidades e ítems, usa `GET
        /datahub/publicMarket/purchaseOrders/{code}`.
      operationId: listPublicMarketPurchaseOrders
      parameters:
        - name: from
          in: query
          required: true
          description: >-
            Fecha de inicio del rango (inclusive), en formato `YYYY-MM-DD`,
            sobre la fecha de creación de la orden. 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: supplierId
          in: query
          required: false
          description: >-
            RUT del proveedor, sin puntos y con guion. Devuelve las órdenes de
            compra emitidas a ese proveedor.
          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 orden de compra, separados por coma. Si no lo envías, no se
            filtra por tipo.
          schema:
            type: array
            items:
              type: string
              enum:
                - OC
                - D1
                - C1
                - F3
                - G1
                - R1
                - CA
                - SE
                - CM
                - FG
                - TL
                - MC
                - AG
                - CC
                - TD
          example:
            - SE
            - AG
        - name: status
          in: query
          required: false
          style: form
          explode: false
          description: >-
            Códigos de estado, separados por coma: `4` Enviada a Proveedor, `5`
            En proceso, `6` Aceptada, `9` Cancelada, `12` Recepción Conforme,
            `13` Pendiente de Recepcionar, `14` Recepcionada Parcialmente, `15`
            Recepcion Conforme Incompleta. Si no lo envías, no se filtra por
            estado.
          schema:
            type: array
            items:
              type: integer
              enum:
                - 4
                - 5
                - 6
                - 9
                - 12
                - 13
                - 14
                - 15
          example:
            - 6
            - 12
        - 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 fecha de creación de la orden.
          schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
          example: desc
      responses:
        '200':
          description: Página de órdenes de compra.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicMarketPurchaseOrderList'
              example:
                data:
                  - code: 2097-241-SE26
                    name: Compra de insumos médicos
                    type: SE
                    statusCode: 6
                    status: Aceptada
                    currency: CLP
                    total: 119000
                    buyerIdentifier: 61111111-8
                    supplierIdentifier: 76111111-6
                    creationDate: '2026-03-10T12: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 orden de compra no es válido
                    data:
                      errors:
                        - path: types.0
                          message: El tipo de orden de compra 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
        '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:
    PublicMarketPurchaseOrderList:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PublicMarketPurchaseOrderListItem'
        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.
    PublicMarketPurchaseOrderListItem:
      type: object
      required:
        - code
        - name
        - type
        - statusCode
        - status
        - currency
        - total
        - buyerIdentifier
        - supplierIdentifier
        - creationDate
      properties:
        code:
          type: string
          description: >-
            Código de la orden de compra en Mercado Público. Úsalo en `GET
            /datahub/publicMarket/purchaseOrders/{code}` para ver el detalle.
        name:
          type:
            - string
            - 'null'
          description: Nombre de la orden. `null` si no está disponible.
        type:
          type:
            - string
            - 'null'
          enum:
            - OC
            - D1
            - C1
            - F3
            - G1
            - R1
            - CA
            - SE
            - CM
            - FG
            - TL
            - MC
            - AG
            - CC
            - TD
            - null
          description: >-
            Tipo de orden de compra. `null` si Mercado Público envía un tipo que
            Pruff aún no reconoce.
        statusCode:
          type: integer
          description: Código del estado.
        status:
          type: string
          description: >-
            Estado en texto: `Enviada a Proveedor` (4), `En proceso` (5),
            `Aceptada` (6), `Cancelada` (9), `Recepción Conforme` (12),
            `Pendiente de Recepcionar` (13), `Recepcionada Parcialmente` (14),
            `Recepcion Conforme Incompleta` (15). `Desconocido` si el código no
            está mapeado.
        currency:
          type: string
          enum:
            - CLP
            - CLF
            - USD
            - UTM
            - EUR
          description: Moneda de la orden.
        total:
          type:
            - integer
            - 'null'
          description: >-
            Total de la orden con impuestos, en su moneda. `null` si no está
            disponible.
        buyerIdentifier:
          type: string
          description: RUT del organismo comprador.
        supplierIdentifier:
          type:
            - string
            - 'null'
          description: >-
            RUT del proveedor. `null` si la orden no trae un RUT de proveedor
            válido.
        creationDate:
          type: string
          format: date-time
          description: >-
            Fecha de creación de la orden. 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.