# Cerrar (/docs/developers/api-reference/payroll-calculation/close)

## Descripcion general [#descripcion-general]

Este endpoint **cierra** el periodo: da la corrida por definitiva y deja tanto la corrida como el periodo en estado `closed`. Es el último paso del flujo de cálculo.

Solo se puede cerrar un periodo en estado `calculated`, y el cálculo debe estar **al día**: si se capturó o cambió algo después del último cálculo, el cierre se rechaza con `STALE_CALCULATION` — recalcula y vuelve a cerrar. Cerrar es **definitivo**: la API no expone la reapertura.

Al cerrar, el periodo **congela** su historial de asistencia y marca las incidencias que consumió. A partir de ahí, cualquier incidencia capturada dentro de sus fechas se convierte en un **ajuste retroactivo** que corrige la diferencia en el siguiente periodo (ver [capturar incidencias](/docs/developers/api-reference/payroll-calculation/capture-incidences)); no reescribe la nómina ya pagada.

En una corrida ordinaria, el cierre también registra en el saldo de vacaciones de cada empleado un movimiento de uso, con días negativos y fechado en el día, por cada día de vacaciones pagado desde incidencias capturadas directamente; los días respaldados por una solicitud de tiempo libre aprobada se omiten porque la aprobación ya los registró. Si la corrida paga ajustes retroactivos de periodos ordinarios ya cerrados, el cierre también concilia sus vacaciones: un día capturado tarde se registra, y uno editado o eliminado se revierte con un movimiento de signo contrario. Así, un cambio a un día de vacaciones de un periodo cerrado mueve el saldo cuando se cierra la nómina que paga su ajuste retroactivo.

Después de responder, el cierre abre en segundo plano la corrida del siguiente periodo del mismo calendario (o, tras el último del año fiscal, el primero del siguiente), siempre que ese periodo ya esté generado y no esté cerrado, que ningún periodo posterior del calendario tenga ya una corrida y que la API key tenga también el permiso **Calcular nómina**; por eso cerrar un periodo anterior no abre uno intermedio. Si la apertura no se puede completar, el cierre no se afecta y la respuesta es la misma: la bitácora de la corrida cerrada muestra el evento **Siguiente periodo sin abrir**. Las corridas extraordinarias y los finiquitos no descuentan vacaciones ni abren ninguna corrida.

Cerrar no timbra los recibos: el timbrado ante el SAT es un paso aparte, con [timbrar](/docs/developers/api-reference/payroll-calculation/stamp).

Los resultados siguen siendo consultables después del cierre: el [detalle del periodo](/docs/developers/api-reference/payroll-calculation/detail) y la [exportación a Excel](/docs/developers/api-reference/payroll-calculation/export-excel) funcionan igual con un periodo cerrado.

No lleva cuerpo. Requiere que la API key tenga el permiso **Cerrar nómina**.

## Endpoint [#endpoint]

`POST https://app.integranom.com/api/v1/payroll-calendars/{payroll_calendar_number}/periods/{period_number}/close`

**Path params:**

* `payroll_calendar_number` — entero positivo, el número del calendario.
* `period_number` — el periodo, con el formato `{fiscal_year}-{sequence_number}` (por ejemplo `2026-14`).

## Cierra el periodo [#cierra-el-periodo]

***

Marca la corrida y el periodo como cerrados y registra la fecha de cierre en la bitácora de la corrida.

## Campos de la respuesta [#campos-de-la-respuesta]

| Campo                | Tipo           | Descripcion                                     |
| -------------------- | -------------- | ----------------------------------------------- |
| `period_number`      | string         | El periodo cerrado.                             |
| `payroll_run_number` | integer        | Número de la corrida.                           |
| `status`             | string         | Siempre `closed` cuando la llamada tiene éxito. |
| `closed_at`          | string (fecha) | Momento del cierre.                             |

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/payroll-calendars/1/periods/2026-14/close" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json"
```

**Respuesta**

```json
{
"period_number": "2026-14",
"payroll_run_number": 14,
"status": "closed",
"closed_at": "2026-07-31T18:16:07.787Z"
}
```

## Errores [#errores]

| Status | Código                    | Causa                                                                                                                                                                                                                                                           |
| ------ | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | —                         | `payroll_calendar_number` o `period_number` inválidos en la URL.                                                                                                                                                                                                |
| `401`  | —                         | API key ausente o inválida.                                                                                                                                                                                                                                     |
| `403`  | —                         | La API key no tiene el permiso **Cerrar nómina**.                                                                                                                                                                                                               |
| `404`  | —                         | El calendario o el periodo no existen en esta organización.                                                                                                                                                                                                     |
| `409`  | `NOT_CALCULATED`          | El periodo no está calculado (o nunca se abrió). Córrelo primero con [calcular](/docs/developers/api-reference/payroll-calculation/calculate).                                                                                                                  |
| `409`  | `CLOSED`                  | El periodo ya está cerrado.                                                                                                                                                                                                                                     |
| `409`  | `STALE_CALCULATION`       | Se capturó o cambió algo después del último cálculo. Recalcula con [recalcular](/docs/developers/api-reference/payroll-calculation/recalculate) y vuelve a cerrar.                                                                                              |
| `409`  | `HOUSING_INSURANCE_STALE` | Quién debe el seguro de vivienda INFONAVIT del bimestre cambió después del último cálculo (por ejemplo, se cerró el primer periodo del bimestre). Recalcula con [recalcular](/docs/developers/api-reference/payroll-calculation/recalculate) y vuelve a cerrar. |