---
title: "Cerrar y cobrar una cuenta"
method: POST
path: "/service_tabs/{service_tab_id}/closure"
tags: ["serviceTabs"]
---

# Cerrar y cobrar una cuenta

`POST /service_tabs/{service_tab_id}/closure`

Cierra la cuenta: deja de aceptar items y se cobra el total.

Con `channel: payment_link` (el valor por defecto) la respuesta trae un
`checkout_url` que el cliente puede pagar con cualquier método que tengas
habilitado. Con `channel: saved_card` se cobra de inmediato la tarjeta
guardada; si el banco pide autenticación, la cuenta queda en `closing` y
el `checkout_url` es donde el cliente la completa.

Pagar ese checkout marca la cuenta como `paid`, sin importar el canal.

Usa un `Idempotency-Key` único por cierre. Si la respuesta es `422`, la
llave queda reservada — el cobro pudo haber llegado al procesador antes
del error — así que un reintento con la misma llave responde `409`. Usa
una llave nueva para volver a intentar.

## Path parameters

- `service_tab_id` string, required

## Headers

- `X-SECRET-KEY` string, required

## Request body

- object
  - `channel` 'payment_link' | 'saved_card' — Cómo se cobra la cuenta
  - `payment_method_id` string — Método de pago guardado a cobrar con `channel: saved_card`. Por defecto, el de la cuenta abierta.

## Response `201`

Cuenta cerrada

- ServiceTab
  - `id` string — ID de la cuenta abierta
  - `status` 'open' | 'closing' | 'paid' | 'voided' | 'abandoned' — Estado de la cuenta. `open` acepta items; `closing` ya está cerrada y espera el pago; `paid` se cobró; `voided` se anuló sin cobrar; `abandoned` se dejó vencer.
  - `display_name` string — Nombre con el que el comercio identifica la cuenta (mesa, cliente, cuarto)
  - `phone` string, nullable — Teléfono del cliente al momento de abrir la cuenta
  - `customer_id` string — ID del cliente dueño de la cuenta
  - `currency` string — Moneda de la cuenta
  - `total_in_cents` integer — Total consumido hasta ahora, en centavos
  - `payment_strategy` 'card_on_file' | 'preauthorization' — `card_on_file` cobra al cerrar la tarjeta guardada del cliente. `preauthorization` mantiene un hold del monto estimado y solo se puede activar desde el dashboard, porque requiere una autorización real del procesador.
  - `opening_commitment` 'none' | 'manual_amount' | 'product' | 'products' — Qué se comprometió al abrir la cuenta. Se infiere de la solicitud: `products` si mandaste `items`, `manual_amount` si mandaste `estimated_amount`, `none` si no mandaste ninguno.
  - `items` ServiceTabItem[] — Líneas vigentes de la cuenta (los items anulados no aparecen)
    - `id` string — ID del item, firmado y estable mientras el item exista
    - `price_id` string — ID del precio cobrado en esta línea
    - `name` string — Nombre del producto
    - `quantity` integer — Cantidad
    - `amount_in_cents` integer — Total de la línea (precio × cantidad), en centavos
    - `currency` string — Moneda de la línea
  - `authorized_amount_in_cents` integer — Monto preautorizado con hold sobre la tarjeta, en centavos. `0` cuando no hay preautorización.
  - `authorization_expires_at` string, date-time, nullable — Momento en que expira el hold de la preautorización
  - `checkout_url` string, nullable — Checkout que cierra la cuenta; pagarlo la marca como `paid`. Solo aparece mientras la cuenta se está cobrando (`closing` o `paid`): si un cobro con tarjeta se declina, la cuenta se reabre y el checkout de ese intento no se publica, porque el cliente no podría pagarlo.
  - `opened_at` string, date-time — Momento en que se abrió la cuenta
  - `closed_at` string, date-time, nullable — Momento en que se cerró la cuenta
  - `created_at` string, date-time

## Other responses

- `422` — No se pudo cerrar o cobrar la cuenta

---

[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/f494a078482c/schema)
