---
title: "Crear orden de compra"
method: POST
path: "/api/v1/purchase-orders"
tags: ["API"]
---

# Crear orden de compra

`POST /api/v1/purchase-orders`

Crea una orden de compra en borrador. Requiere Idempotency-Key.

## Headers

- `Idempotency-Key` string, required

## Request body

- ApiPurchaseOrderRequest
  - `supplier_id` string, uuid, required
  - `order_date` string, date, required
  - `expected_date` string, date
  - `warehouse_id` string, uuid, required
  - `notes` string
  - `items` object[], required
    - `product_id` string, uuid, required
    - `ordered_quantity` number, required
    - `expected_unit_cost` integer

## Response `200`

Orden de compra creada exitosamente

- ApiPurchaseOrderWriteResponse
  - `request_id` string, required
  - `data` object, required
    - `purchase_order` ApiSharedObject92f376ac7c, required
      - `object` 'purchase_order', required
      - `id` string, uuid, required
      - `order_number` integer, required
      - `formatted_order_number` string, nullable, required
      - `status` 'draft' | 'sent' | 'partially_received' | 'received' | 'closed' | 'cancelled', required
      - `order_date` string, date, required
      - `expected_date` string, date, nullable, required
      - `currency` string, required
      - `supplier` ApiSharedObjectaa12edb924, required
        - `id` string, uuid, required
        - `name` string, required
        - `description` string, nullable, required
        - `email` string, nullable, required
        - `phone` string, nullable, required
        - `tax_id_type` string, nullable, required
        - `tax_id` string, nullable, required
        - `tax_category` string, nullable, required
        - `payment_term_id` string, nullable, required
        - `payment_term_days` integer, nullable, required — Cantidad de días hasta el vencimiento. Usá 0 para Contado. Se prefiere sobre paymentTermId.
        - `address` string, nullable, required
        - `apartment` string, nullable, required
        - `city` string, nullable, required
        - `province` string, nullable, required
        - `postal_code` string, nullable, required
      - `warehouse` ApiSharedObject8aeeceaf0f, required
        - `id` string, uuid, required
        - `name` string, required
      - `created_at` string, date-time, required
      - `warehouse_id` string, uuid, required
      - `notes` string, nullable, required
      - `items` ApiSharedObject6e43ba6466[], required
        - `id` string, uuid, required
        - `ordered_quantity` number, required
        - `received_quantity` number, required
        - `expected_unit_cost` integer, nullable, required
        - `product` ApiSharedObjectf4b2e97eb9, required
          - `id` string, uuid, required
          - `name` string, required
          - `sku` string, nullable, required
          - `product_type` 'product' | 'service' | 'combo' | 'kit', required
          - `variant_options` object, nullable, required
          - `option_names` string[], nullable, required
    - `idempotent_replay` boolean, required
  - `warnings` unknown[], required
    - unknown

## Other responses

- `400` — Solicitud inválida
- `401` — API key faltante o inválida
- `403` — Scopes insuficientes
- `404` — Orden de compra no encontrada
- `409` — Conflicto de idempotencia o de negocio
- `429` — Límite de solicitudes excedido para la organización
- `500` — Error interno del servidor

---

[API](https://skmtc.net/lapyme/apis/la-pyme-api.md) · [All operations](https://skmtc.net/lapyme/apis/la-pyme-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lapyme/la-pyme-api/versions/414f57f28498/schema)
