---
title: "Crear compra"
method: POST
path: "/api/v1/purchases"
tags: ["API"]
---

# Crear compra

`POST /api/v1/purchases`

Registra una compra y devuelve la operación creada junto con sus efectos de stock y contabilidad.

## Headers

- `Idempotency-Key` string, required
- `X-Request-Id` string

## Request body

- ApiPurchaseTransactionRequest
  - `supplier_id` string, uuid
  - `voucher_type` integer, required
  - `import_document_role` 'commercial_invoice' | 'customs_dispatch' | 'customs_dispatch_reversal'
  - `import_source_purchase_id` string, uuid — ID de la factura comercial asociada al despacho aduanero.
  - `import_nationalization_status` 'pending_nationalization' | 'partially_nationalized' | 'fully_nationalized'
  - `customs_dispatch_number` string — Numero de despacho aduanero informado por el proveedor. Hasta 32 caracteres.
  - `supplier_invoice_number` string — Numero de comprobante del proveedor. Hasta 120 caracteres.
  - `invoice_date` string, date — Fecha del comprobante en formato YYYY-MM-DD.
  - `account_date` string, date — Fecha contable de la compra en formato YYYY-MM-DD.
  - `due_date` string, date — Fecha de vencimiento en formato YYYY-MM-DD.
  - `payment_term_id` 'days_7' | 'days_15' | 'days_30' | 'days_45' | 'days_60' | 'days_90' | 'days_30_60' | 'days_30_60_90'
  - `payment_term_days` integer, nullable — Cantidad de días hasta el vencimiento. Usá 0 para Contado. Se prefiere sobre paymentTermId.
  - `vat_perception_amount` integer
  - `national_tax_amount` integer
  - `gross_income_tax_amount` integer
  - `gross_income_tax_breakdown` ApiSharedObject95929ea589[]
    - `province_id` integer, required
    - `amount` integer, required
  - `municipal_tax_amount` integer
  - `internal_tax_amount` integer
  - `other_tax_amount` integer
  - `warehouse_id` string, uuid, nullable
  - `products_received` boolean
  - `update_product_variant_cost` boolean
  - `items` ApiSharedObject65e544dba2[]
    - `product_id` string, uuid
    - `name` string
    - `quantity` number, required
    - `unit_cost` integer, required
    - `subtotal` integer
    - `total` integer
    - `tax_rate_id` integer
    - `is_exempt` boolean
    - `discount_percentage` number
    - `purchase_order_item_id` string, uuid
    - `vat_category` 'goods' | 'fixed_assets' | 'leases' | 'services'
    - `account_id` string, uuid — ID de cuenta contable imputable de Activo o Gasto para este renglon.
    - `cost_center1_id` string, uuid
    - `cost_center2_id` string, uuid
    - `cost_center3_id` string, uuid
  - `subtotal` integer
  - `tax_amount` integer
  - `total` integer
  - `discount` integer
  - `exempt_amount` integer
  - `non_taxed_amount` integer
  - `base_amount` integer
  - `vat_breakdown` ApiSharedObjectfb7405a472[]
    - `tax_rate_id` integer, required
    - `base_amount` integer, required
    - `tax_amount` integer, required
  - `manual_account_allocations` ApiSharedObjectbea003a73d
    - `gravado21` string, uuid
    - `gravado27` string, uuid
    - `gravado105` string, uuid
    - `gravado25` string, uuid
    - `gravado5` string, uuid
    - `non_taxed_amount` string, uuid
    - `exento` string, uuid
    - `base_amount` string, uuid
  - `notes` string
  - `currency` 'PES' | 'DOL', required
  - `exchange_rate` number
  - `pdf_path` string
  - `vat_category` 'goods' | 'fixed_assets' | 'leases' | 'services'
  - `status` 'draft' | 'confirmed'

## Response `200`

Compra creada exitosamente

- ApiPurchaseTransactionSuccessResponse
  - `request_id` string, required
  - `data` object, required
    - `purchase_id` string, uuid, required
    - `receipt_created` boolean, required
    - `idempotent_replay` boolean, required
    - `normalized_purchase` object, required
      - `supplier_id` string, uuid, nullable, required
      - `voucher_type` integer, required
      - `supplier_invoice_number` string, nullable, required — Numero de comprobante del proveedor. Hasta 120 caracteres.
      - `invoice_date` string, nullable, required — Fecha del comprobante en formato YYYY-MM-DD.
      - `account_date` string, nullable, required — Fecha contable de la compra en formato YYYY-MM-DD.
      - `due_date` string, nullable, required — Fecha de vencimiento en formato YYYY-MM-DD.
      - `payment_term_id` 'days_7' | 'days_15' | 'days_30' | 'days_45' | 'days_60' | 'days_90' | 'days_30_60' | 'days_30_60_90', required
      - `payment_term_days` integer, nullable, required — Cantidad de días hasta el vencimiento. Usá 0 para Contado. Se prefiere sobre paymentTermId.
      - `import_document_role` 'commercial_invoice' | 'customs_dispatch' | 'customs_dispatch_reversal', required
      - `import_source_purchase_id` string, uuid, nullable, required — ID de la factura comercial asociada al despacho aduanero.
      - `import_nationalization_status` 'pending_nationalization' | 'partially_nationalized' | 'fully_nationalized', required
      - `customs_dispatch_number` string, nullable, required — Numero de despacho aduanero informado por el proveedor. Hasta 32 caracteres.
      - `warehouse_id` string, uuid, nullable, required
      - `products_received` boolean, required
      - `update_product_variant_cost` boolean, required
      - `currency` 'PES' | 'DOL', required
      - `exchange_rate` number, required
      - `subtotal` integer, nullable, required
      - `tax_amount` integer, nullable, required
      - `total` integer, nullable, required
      - `discount` integer, nullable, required
      - `exempt_amount` integer, nullable, required
      - `non_taxed_amount` integer, nullable, required
      - `base_amount` integer, nullable, required
      - `vat_perception_amount` integer, nullable, required
      - `national_tax_amount` integer, nullable, required
      - `gross_income_tax_amount` integer, nullable, required
      - `municipal_tax_amount` integer, nullable, required
      - `internal_tax_amount` integer, nullable, required
      - `other_tax_amount` integer, nullable, required
      - `notes` string, nullable, required
      - `pdf_path` string, nullable, required
      - `manual_account_allocations` object, required
      - `items` ApiSharedObjectbf19ed87b4[], required
        - `product_id` string, uuid, nullable, required
        - `product_name` string, nullable, required
        - `sku` string, nullable, required
        - `name` string, nullable, required
        - `quantity` number, required
        - `unit_cost` integer, required
        - `subtotal` integer, nullable, required
        - `total` integer, nullable, required
        - `tax_rate_id` integer, nullable, required
        - `is_exempt` boolean, required
        - `discount_percentage` number, nullable, required
        - `purchase_order_item_id` string, uuid, nullable, required
        - `vat_category` 'goods' | 'fixed_assets' | 'leases' | 'services', required
        - `account_id` string, uuid, nullable, required
        - `account_name` string, nullable, required
        - `cost_center1_id` string, uuid, nullable, required
        - `cost_center1_name` string, nullable, required
        - `cost_center2_id` string, uuid, nullable, required
        - `cost_center2_name` string, nullable, required
        - `cost_center3_id` string, uuid, nullable, required
        - `cost_center3_name` string, nullable, required
    - `projected_effects` object, required
      - `inventory` ApiSharedObjectdafaa4a9ee, required
        - `will_receive_products` boolean, required
        - `will_create_receipt` boolean, required
        - `will_increase_direct_stock` boolean, required
        - `warehouse_id` string, uuid, nullable, required
        - `product_line_count` integer, required
        - `total_quantity` number, required
        - `purchase_order_ids` string[], required
      - `accounting` ApiSharedObject3c43192c61, required
        - `will_create_journal_entry` boolean, required
        - `currency` 'PES' | 'DOL', required
        - `exchange_rate` number, required
  - `warnings` ApiSharedObjectc671832641[], required
    - `code` string, required
    - `message` string, required
    - `field` string

## Other responses

- `400` — Solicitud inválida
- `401` — API key faltante o inválida
- `403` — Scopes insuficientes
- `409` — Conflicto de idempotencia
- `412` — Business precondition not satisfied
- `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)
