---
title: "Registrar una venta cobrada en efectivo"
method: POST
path: "/cash_sales"
tags: ["cashSales"]
---

# Registrar una venta cobrada en efectivo

`POST /cash_sales`

Registra una venta cobrada en efectivo. No mueve dinero por Recurrente:
no se descuenta comisión, no impacta el balance del merchant, y no se
genera transacción en el ledger. Si pasas `tax_id`, se intenta emitir la
factura electrónica (DTE) automáticamente.

La respuesta devuelve el ID del recurso unificado (`in_…`). Persiste ese
ID para reconciliar el evento `intent.succeeded` y para consultar el
estado actual mediante `GET /intents/{id}`. También aparece como
`checkout.latest_intent.id`; solo el `id` superior del evento legacy
`cash_intent.succeeded` usa el ID concreto del `CashIntent` (`ca_…`).

`tax_invoice_url` en los webhooks refleja el estado del DTE al momento de
la entrega. Puede ser `null` si la emisión todavía no concluyó o falló y
luego se recupera. Ese cambio no genera un segundo webhook de éxito;
recupera la URL actual con `GET /intents/{id}`.

Si operas una plataforma, envía `X-ACCOUNT-ID` tanto al crear como al
consultar para que la venta y su DTE pertenezcan a la cuenta conectada y
se emitan bajo su NIT. `X-CUSTOM-ACCOUNT-ID` no selecciona el contexto de
lectura.

## Headers

- `X-SECRET-KEY` string, required

## Request body

- object
  - `amount_in_cents` integer, required — Monto en centavos
  - `currency` 'GTQ' | 'USD' — Moneda. Default — la moneda principal de la cuenta.
  - `description` string — (Opcional) Descripción visible en el recibo y la actividad
  - `tax_id` string — (Opcional) NIT del cliente. Si la cuenta tiene facturación electrónica configurada, se emite el DTE automáticamente.

## Response `201`

Venta en efectivo registrada

- CashSalesCreateCashSaleResponse201
  - `id` string — ID del intent unificado. Úsalo con `GET /intents/{id}` y con el `id` superior de los eventos `intent.*`.
  - `status` string
  - `amount_in_cents` integer
  - `currency` string
  - `description` string
  - `tax_id` string, nullable
  - `created_at` string, date-time

## Other responses

- `401` — Autenticación inválida
- `422` — Validación falló (por ejemplo, límite de transacción excedido)

---

[API](https://skmtc.dev/recurrente/apis/referencia-api.md) · [All operations](https://skmtc.dev/recurrente/apis/referencia-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/recurrente/referencia-api/revisions/da12dce50f30/schema)
