> ## 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.

# Obtener detalle de una orden de compra

> Devuelve el detalle de una orden de compra de Mercado Público (ChileCompra) a partir de su código: montos e impuestos, comprador, proveedor, unidades, licitación de origen y todos sus ítems. La cuota de 300 solicitudes por hora por empresa se comparte con los demás endpoints de Mercado Público y con otras consultas de Datahub de tu empresa.



## OpenAPI

````yaml openapi/clients.yaml GET /datahub/publicMarket/purchaseOrders/{code}
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/{code}:
    get:
      tags:
        - Mercado Público
      summary: Obtener detalle de una orden de compra
      description: >-
        Devuelve el detalle de una orden de compra de Mercado Público
        (ChileCompra) a partir de su código: montos e impuestos, comprador,
        proveedor, unidades, licitación de origen y todos sus ítems. La cuota de
        300 solicitudes por hora por empresa se comparte con los demás endpoints
        de Mercado Público y con otras consultas de Datahub de tu empresa.
      operationId: getPublicMarketPurchaseOrder
      parameters:
        - name: code
          in: path
          required: true
          description: >-
            Código de la orden de compra en Mercado Público, el `code` del
            listado. Letras y números separados por guiones (al menos un guion),
            máximo 50 caracteres.
          schema:
            type: string
            maxLength: 50
            pattern: ^[A-Za-z0-9]+(-[A-Za-z0-9]+)+$
          example: 2097-241-SE26
      responses:
        '200':
          description: Detalle de la orden de compra.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicMarketPurchaseOrderDetailResponse'
              example:
                data:
                  code: 2097-241-SE26
                  name: Compra de insumos médicos
                  description: Guantes de procedimiento
                  type: SE
                  statusCode: 12
                  status: Recepción Conforme
                  currency: CLP
                  netTotal: 100000
                  ivaPercentage: 19
                  taxes: 19000
                  total: 119000
                  shippingType: Despachar a Dirección de envío
                  paymentType: 30 días contra la recepción conforme
                  tenderCode: 1234-56-LE26
                  creationDate: '2026-03-10T12:00:00-03:00'
                  shippingDate: '2026-03-11T12:00:00-03:00'
                  acceptanceDate: '2026-03-12T12:00:00-03:00'
                  cancellationDate: null
                  buyer:
                    identifier: 61111111-8
                    name: Hospital Ejemplo
                  supplier:
                    identifier: 76111111-6
                    name: Proveedor Ejemplo SpA
                  buyerUnit:
                    code: '1234'
                    name: Abastecimiento
                  supplierUnit: null
                  items:
                    - correlativeId: 1
                      category: Insumos médicos
                      productName: Guantes
                      buyerSpecification: Guantes de nitrilo talla M
                      quantity: 100
                      unit: Caja
                      currency: CLP
                      netPrice: 1000
                      totalCharges: 0
                      totalDiscounts: 0
                      totalTaxes: 19000
                      total: 100000
        '400':
          description: >-
            El `code` no tiene un formato válido (letras y números separados por
            guiones, máximo 50 caracteres).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              example:
                message: invalid_format
                displayMessage: El código no es válido
                data:
                  errors:
                    - path: code
                      message: El código no es válido
                      code: invalid_format
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: No existe una orden de compra con ese código.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Purchase order not found
                displayMessage: No se encontró la orden de compra
        '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:
    PublicMarketPurchaseOrderDetailResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/PublicMarketPurchaseOrderDetail'
    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.
    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.
    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.
    PublicMarketPurchaseOrderDetail:
      type: object
      required:
        - code
        - name
        - description
        - type
        - statusCode
        - status
        - currency
        - netTotal
        - ivaPercentage
        - taxes
        - total
        - shippingType
        - paymentType
        - tenderCode
        - creationDate
        - shippingDate
        - acceptanceDate
        - cancellationDate
        - buyer
        - supplier
        - buyerUnit
        - supplierUnit
        - items
      properties:
        code:
          type: string
          description: Código de la orden de compra en Mercado Público.
        name:
          type:
            - string
            - 'null'
          description: Nombre. `null` si no está disponible.
        description:
          type:
            - string
            - 'null'
          description: Descripción. `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.
        netTotal:
          type:
            - integer
            - 'null'
          description: Total neto, en la moneda de la orden. `null` si no está disponible.
        ivaPercentage:
          type:
            - number
            - 'null'
          description: Porcentaje de IVA aplicado, en %. `null` si no está disponible.
        taxes:
          type:
            - integer
            - 'null'
          description: Impuestos, en la moneda de la orden. `null` si no está disponible.
        total:
          type:
            - integer
            - 'null'
          description: >-
            Total con impuestos, en la moneda de la orden. `null` si no está
            disponible.
        shippingType:
          type: string
          description: >-
            Forma de despacho en texto, por ejemplo `Despachar a Dirección de
            envío`. `Desconocido` si no está mapeada.
        paymentType:
          type:
            - string
            - 'null'
          description: Forma de pago. `null` si no está disponible.
        tenderCode:
          type:
            - string
            - 'null'
          description: >-
            Código de la licitación de origen. `null` si la orden no viene de
            una licitación.
        creationDate:
          type: string
          format: date-time
          description: >-
            Fecha de creación. Formato ISO 8601 con la hora y el desfase horario
            de Chile, por ejemplo `2026-03-10T12:00:00-03:00`.
        shippingDate:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Fecha de despacho. Formato ISO 8601 con la hora y el desfase horario
            de Chile, por ejemplo `2026-03-10T12:00:00-03:00`.
        acceptanceDate:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Fecha de aceptación. Formato ISO 8601 con la hora y el desfase
            horario de Chile, por ejemplo `2026-03-10T12:00:00-03:00`.
        cancellationDate:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Fecha de cancelación. Formato ISO 8601 con la hora y el desfase
            horario de Chile, por ejemplo `2026-03-10T12:00:00-03:00`.
        buyer:
          type: object
          required:
            - identifier
            - name
          description: Organismo comprador.
          properties:
            identifier:
              type: string
              description: RUT.
            name:
              type: string
              description: Razón social.
        supplier:
          type:
            - object
            - 'null'
          required:
            - identifier
            - name
          description: Proveedor. `null` si la orden no trae un RUT de proveedor válido.
          properties:
            identifier:
              type: string
              description: RUT.
            name:
              type: string
              description: Razón social.
        buyerUnit:
          type:
            - object
            - 'null'
          description: Unidad de compra del comprador. `null` si no está disponible.
          required:
            - code
            - name
          properties:
            code:
              type: string
              description: Código de la unidad en Mercado Público.
            name:
              type: string
              description: Nombre de la unidad.
        supplierUnit:
          type:
            - object
            - 'null'
          description: Sucursal del proveedor. `null` si no está disponible.
          required:
            - code
            - name
          properties:
            code:
              type: string
              description: Código de la unidad en Mercado Público.
            name:
              type: string
              description: Nombre de la unidad.
        items:
          type: array
          items:
            $ref: '#/components/schemas/PublicMarketPurchaseOrderItem'
          description: Todos los ítems de la orden.
    PublicMarketPurchaseOrderItem:
      type: object
      required:
        - correlativeId
        - category
        - productName
        - buyerSpecification
        - quantity
        - unit
        - currency
        - netPrice
        - totalCharges
        - totalDiscounts
        - totalTaxes
        - total
      properties:
        correlativeId:
          type: integer
          description: Número correlativo del ítem dentro de la orden.
        category:
          type: string
          description: Categoría del producto.
        productName:
          type: string
          description: Nombre del producto.
        buyerSpecification:
          type:
            - string
            - 'null'
          description: Especificación del comprador. `null` si no hay.
        quantity:
          type:
            - number
            - 'null'
          description: Cantidad. `null` si no está disponible.
        unit:
          type:
            - string
            - 'null'
          description: Unidad de medida. `null` si no está disponible.
        currency:
          type: string
          enum:
            - CLP
            - CLF
            - USD
            - UTM
            - EUR
          description: Moneda del ítem.
        netPrice:
          type:
            - integer
            - 'null'
          description: >-
            Precio neto unitario, en la moneda del ítem. `null` si no está
            disponible.
        totalCharges:
          type:
            - integer
            - 'null'
          description: >-
            Total de cargos, en la moneda del ítem. `null` si no está
            disponible.
        totalDiscounts:
          type:
            - integer
            - 'null'
          description: >-
            Total de descuentos, en la moneda del ítem. `null` si no está
            disponible.
        totalTaxes:
          type:
            - integer
            - 'null'
          description: >-
            Total de impuestos, en la moneda del ítem. `null` si no está
            disponible.
        total:
          type:
            - integer
            - 'null'
          description: Total del ítem, en la moneda del ítem. `null` si no está disponible.
  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.