---
title: "Crear venta"
method: POST
path: "/api/v1/sales"
tags: ["API"]
---

# Crear venta

`POST /api/v1/sales`

Registra una venta y devuelve la operación creada junto con sus efectos fiscales, de stock, pagos y contabilidad. Idempotency-Key solo protege reintentos; si necesitás guardar una referencia externa visible, enviá integration_source e integration_id en el cuerpo.

## Headers

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

## Request body

- ApiSaleTransactionRequest
  - `customer_id` string, uuid
  - `customer_tax_category_override` string
  - `voucher_type` union, required
    - integer
    - 201
    - 206
    - 211
  - `point_of_sale_id` string, uuid, required
  - `register_id` string, uuid
  - `operator_id` string, uuid
  - `integration_source` string — Fuente de integracion externa para buscar/conciliar la venta. Debe enviarse junto con integrationId.
  - `integration_id` string — ID de referencia externa visible en la venta. Debe enviarse junto con integrationSource; no se deriva del header Idempotency-Key.
  - `invoice_date` string, date, required
  - `due_date` string, date
  - `service_from` string, date
  - `service_to` string, date
  - `currency` 'PES' | 'DOL', required
  - `exchange_rate` number
  - `same_currency_payment` boolean
  - `notes` string
  - `items` object[], required
    - `product_id` string, uuid
    - `warehouse_id` string, uuid
    - `unit_cost` integer
    - `name` string
    - `product_type` 'product' | 'service'
    - `tax_rate_id` integer
    - `is_exempt` boolean
    - `quantity` number, required
    - `unit_price` integer, required
    - `discount` ApiSharedObject16c3799d74
      - `type` 'percentage' | 'amount', required
      - `value` number, required
    - `notes` string
    - `account_id` string, uuid
    - `line_type` 'product' | 'shipping' | 'custom'
    - `cost_center1_id` string, uuid
    - `cost_center2_id` string, uuid
    - `cost_center3_id` string, uuid
  - `discount_type` 'percentage' | 'amount'
  - `discount_value` number
  - `discount_amount` integer
  - `subtotal` integer
  - `tax_amount` integer
  - `total` integer
  - `exempt_amount` integer
  - `non_taxed_amount` integer
  - `tributes_amount` integer
  - `national_perception_amount` integer
  - `gross_income_perception_amount` integer
  - `gross_income_tax_breakdown` ApiSharedObject95929ea589[]
    - `province_id` integer, required
    - `amount` integer, required
  - `municipal_perception_amount` integer
  - `internal_tribute_amount` integer
  - `uncategorized_vat_perception_amount` integer
  - `other_tribute_amount` integer
  - `payment_methods` object[]
    - `method_id` string, uuid, required
    - `amount` integer, required
    - `description` string
    - `reference` string
    - `fee_amount` integer
    - `terminal_id` string, uuid
    - `card_batch_number` string
    - `card_coupon_number` string
    - `card_installment_plan_code` string
    - `card_brand` string
    - `register_id` string, uuid — ID de caja para pagos en efectivo. Usá cashSource en integraciones nuevas.
    - `safe_id` string, uuid — ID de caja fuerte para pagos en efectivo. Usá cashSource en integraciones nuevas.
    - `cash_source` object — Origen de efectivo para pagos cash. No combinar con registerId o safeId.
      - `type` 'register' | 'safe', required — Tipo de origen de efectivo: caja operativa o caja fuerte.
      - `id` string, uuid, required — ID de la caja o caja fuerte.
  - `is_full_amount_pending` boolean

## Response `200`

Venta creada exitosamente

- ApiSaleTransactionSuccessResponse
  - `request_id` string, required
  - `data` object, required
    - `sale` object, required
      - `sale_id` string, uuid, required
      - `customer_id` string, uuid, nullable, required
      - `voucher_type` string, required
      - `point_of_sale_id` string, uuid, required
      - `invoice_number` integer, nullable, required
      - `formatted_invoice_number` string, nullable, required
      - `invoice_status` 'not_required' | 'pending' | 'issued', required
      - `invoice_date` string, date, required
      - `due_date` string, date, required
      - `currency` string, required
      - `subtotal` integer, required
      - `tax_amount` integer, required
      - `total` integer, required
      - `exempt_amount` integer, required
      - `non_taxed_amount` integer, required
      - `tributes_amount` integer, required
      - `discount_amount` integer, required
      - `balance` number, required
      - `created_at` string, date-time, required
    - `normalized_sale` object, required
      - `customer_id` string, uuid, nullable, required
      - `customer_tax_category_override` string, nullable, required
      - `voucher_type` union, required
        - integer
        - 201
        - 206
        - 211
      - `point_of_sale_id` string, uuid, required
      - `register_id` string, uuid, nullable, required
      - `operator_id` string, uuid, nullable, required
      - `invoice_date` string, date, required
      - `due_date` string, date, required
      - `service_from` string, date, nullable, required
      - `service_to` string, date, nullable, required
      - `currency` 'PES' | 'DOL', required
      - `exchange_rate` number, nullable, required
      - `same_currency_payment` boolean, required
      - `notes` string, nullable, required
      - `subtotal` integer, required
      - `tax_amount` integer, required
      - `total` integer, required
      - `exempt_amount` integer, required
      - `non_taxed_amount` integer, required
      - `tributes_amount` integer, required
      - `national_perception_amount` integer, required
      - `gross_income_perception_amount` integer, required
      - `gross_income_tax_breakdown` ApiSharedObject95929ea589[], required
        - `province_id` integer, required
        - `amount` integer, required
      - `municipal_perception_amount` integer, required
      - `internal_tribute_amount` integer, required
      - `uncategorized_vat_perception_amount` integer, required
      - `other_tribute_amount` integer, required
      - `discount_type` 'percentage' | 'amount', required
      - `discount_value` number, nullable, required
      - `discount_amount` integer, required
      - `balance` number, required
      - `is_full_amount_pending` boolean, required
      - `items` ApiSharedObject55e2bcf4a7[], required
        - `product_id` string, uuid, nullable, required
        - `product_name` string, nullable, required
        - `sku` string, nullable, required
        - `warehouse_id` string, uuid, nullable, required
        - `name` string, nullable, required
        - `product_type` 'product' | 'service' | 'combo' | 'kit', required
        - `quantity` number, required
        - `unit_price` integer, required
        - `unit_cost` integer, nullable, required
        - `tax_rate_id` integer, nullable, required
        - `is_exempt` boolean, required
        - `discount` ApiSharedObject16c3799d74, required
          - `type` 'percentage' | 'amount', required
          - `value` number, required
        - `notes` string, nullable, required
        - `account_id` string, uuid, nullable, required
        - `line_type` 'product' | 'shipping' | 'custom', required
        - `cost_center1_id` string, uuid, nullable, required
        - `cost_center2_id` string, uuid, nullable, required
        - `cost_center3_id` string, uuid, nullable, required
      - `payment_methods` ApiSharedObjecte4ddc41067[], required
        - `method_id` string, uuid, required
        - `amount` integer, required
        - `description` string, nullable, required
        - `reference` string, nullable, required
        - `fee_amount` integer, nullable, required
        - `terminal_id` string, uuid, nullable, required
        - `card_batch_number` string, nullable, required
        - `card_coupon_number` string, nullable, required
        - `card_installment_plan_code` string, nullable, required
        - `card_brand` string, nullable, required
        - `cash_source` ApiSharedObjectf61e74f9c5, required
          - `type` 'register' | 'safe', required — Tipo de origen de efectivo: caja operativa o caja fuerte.
          - `id` string, uuid, required — ID de la caja o caja fuerte.
    - `projected_effects` object, required
      - `inventory` ApiSharedObject6a71e7888b, required
        - `will_affect_stock` boolean, required
        - `warehouse_ids` string[], required
        - `product_line_count` integer, required
        - `total_quantity` number, required
      - `accounting` ApiSharedObject9428e7100c, required
        - `will_create_sale_entry` boolean, required
        - `will_create_payment_entry` boolean, required
      - `fiscal` ApiSharedObject3563932f8e, required
        - `invoice_status` 'not_required' | 'pending', required
      - `payments` ApiSharedObject8e516a9b19, required
        - `will_create_payments` boolean, required
        - `payment_method_count` integer, required
        - `total_amount` number, required
        - `pending_amount` number, required
    - `idempotent_replay` boolean, 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)
