# Vincular centro de costos (/docs/developers/api-reference/departments/link-cost-center)

## Descripcion general [#descripcion-general]

Este endpoint crea un **nuevo centro de costos** copiando los campos actuales del departamento (`name`, `code`, `description`, `is_active`, `sort_order`) y vincula ambos.

A grandes rasgos, hace tres cosas en una sola transacción:

1. Lee los campos actuales del departamento (`name`, `code`, `description`, `is_active`, `sort_order`).
2. Crea un CC nuevo con esos valores. Si envías `code_override`, ese valor gana sobre el `code` del departamento.
3. Vincula el departamento al CC recién creado (`cost_center_id` se asigna). Si usaste `code_override`, también se actualiza el `code` del departamento para mantener la invariante de los campos espejo.

## Endpoint [#endpoint]

`POST https://app.integranom.com/api/v1/departments/{department_number}/cost-center`

**Path param:** `department_number` — entero positivo, el número de departamento dentro de la organización.

## Caso minimo — el departamento ya tiene code [#caso-minimo--el-departamento-ya-tiene-code]

***

Cuando el departamento ya tiene `code`, el cuerpo puede ser un objeto vacío. El CC nuevo se crea como raíz, con los valores actuales del departamento.

```json
{}
```

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/departments/5/cost-center" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
```

**Respuesta**

```json
{
"id": "ck...",
"cost_center_number": 12,
"parent_id": null,
"depth": 0,
"name": "Ventas",
"code": "VEN",
"description": "Sales root",
"is_active": true,
"sort_order": 0,
"created_at": "2026-05-24T10:00:00.000Z",
"updated_at": "2026-05-24T10:00:00.000Z"
}
```

## Anidar el nuevo CC bajo un CC padre [#anidar-el-nuevo-cc-bajo-un-cc-padre]

***

Envía `parent_cost_center_code` para colocar el CC nuevo bajo otro CC existente en el árbol de centros de costos.

```json
{ "parent_cost_center_code": "ROOT" }
```

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/departments/5/cost-center" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "parent_cost_center_code": "ROOT" }'
```

**Respuesta**

```json
{
"id": "ck...",
"cost_center_number": 12,
"parent_id": "ck...",
"depth": 1,
"name": "Ventas",
"code": "VEN",
"description": "Sales root",
"is_active": true,
"sort_order": 0,
"created_at": "2026-05-24T10:00:00.000Z",
"updated_at": "2026-05-24T10:00:00.000Z"
}
```

## El departamento no tiene code — usa `code_override` [#el-departamento-no-tiene-code--usa-code_override]

***

Cuando el `code` del departamento es `null`, **debes** enviar `code_override`. Ese valor se asigna al CC nuevo y también se sincroniza al departamento (para que ambos compartan el mismo `code`, como exige la invariante de los campos espejo).

Sin `code_override`, la solicitud falla con `400 MISSING_CODE`.

```json
{ "code_override": "VEN-X" }
```

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/departments/5/cost-center" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "code_override": "VEN-X" }'
```

**Respuesta**

```json
{
"id": "ck...",
"cost_center_number": 12,
"parent_id": null,
"depth": 0,
"name": "Ventas",
"code": "VEN-X",
"description": "Sales root",
"is_active": true,
"sort_order": 0,
"created_at": "2026-05-24T10:00:00.000Z",
"updated_at": "2026-05-24T10:00:00.000Z"
}
```

## Campos del cuerpo [#campos-del-cuerpo]

| Campo                     | Tipo   | Requerido   | Notas                                                                                                                                                            |
| ------------------------- | ------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `parent_cost_center_code` | string | No          | Se almacena en mayúsculas. Si se envía, el CC nuevo se coloca bajo ese CC en el árbol de centros de costos.                                                      |
| `code_override`           | string | Condicional | **Requerido** cuando el `code` actual del departamento es `null`. Asigna el `code` al CC nuevo (y al departamento, para mantener el espejo). Máx. 60 caracteres. |

## Forma de la respuesta [#forma-de-la-respuesta]

`201 Created` — el centro de costos recién creado:

```json
{
  "id": "ck...",
  "cost_center_number": 12,
  "parent_id": "ck...",
  "depth": 1,
  "name": "Ventas",
  "code": "VEN",
  "description": "Sales root",
  "is_active": true,
  "sort_order": 0,
  "created_at": "2026-05-24T10:00:00.000Z",
  "updated_at": "2026-05-24T10:00:00.000Z"
}
```

## Errores [#errores]

| Status | Código / mensaje                                   | Causa                                                                     |
| ------ | -------------------------------------------------- | ------------------------------------------------------------------------- |
| `400`  | `MISSING_CODE`                                     | El `code` del departamento es `null` y no enviaste `code_override`.       |
| `400`  | `"Invalid 'parent_cost_center_code'…"`             | El `parent_cost_center_code` no existe en la organización.                |
| `404`  | `"Department not found."`                          | No existe un departamento con ese `department_number` en la organización. |
| `409`  | `"A cost center with this 'code' already exists…"` | Carrera de duplicado en el `code` del CC al escribir.                     |