NominexDocs
Referencia de la APIDepartamentos

Crear

Crea uno o más departamentos en tu organización.

Descripcion general

Este endpoint permite crear uno o varios departamentos dentro de tu organización. Acepta tanto un objeto como un arreglo de hasta 100 objetos, y la respuesta refleja la forma del cuerpo enviado. El único campo obligatorio por fila es name; el resto son opcionales. Los departamentos pueden anidarse mediante parent_department_number para formar una jerarquía, y opcionalmente vincularse a un centro de costos vía cost_center_code o inline mediante cost_center. Una solicitud exitosa devuelve 201 con los departamentos creados, incluyendo los campos generados por el servidor (id, department_number, depth, created_at, updated_at).

Endpoint

POSThttps://app.integranom.com/api/v1/departments

Solicitud unica — minima


Envía un objeto único con solo name. El departamento se crea como raíz (sin padre), sin código, sin centro de costos vinculado y activo por defecto.

{ "name": "Recursos Humanos" }

Solicitud unica — anidada bajo un padre


Para anidar un departamento bajo otro existente, envía parent_department_number con el número del padre. La API calcula depth y resuelve el parent_id por ti.

{
  "name": "Reclutamiento",
  "code": "RH-REC",
  "description": "Subárea de reclutamiento",
  "parent_department_number": 1,
  "sort_order": 10
}

Solicitud unica — con centro de costos inline


Cuando el departamento se vincula a un centro de costos (vía cost_center_code o inline con cost_center), el centro de costos es la fuente de verdad para los siguientes campos del departamento: name, code, description, is_active, sort_order. Cualquier valor que el usuario envíe para esos campos se ignora silenciosamente y el departamento se escribe con los valores del CC.

Observa la respuesta: aunque se envió "name": "Ventas" y "code": "VEN", el departamento se guardó con "name": "Centro de costos Ventas" y "code": "CC-VEN" porque esos son los valores del centro de costos.

{
  "name": "Ventas",
  "code": "VEN",
  "parent_department_number": 1,
  "cost_center": {
    "code": "CC-VEN",
    "name": "Centro de costos Ventas",
    "is_active": true
  }
}

Solicitud por lote (1–100 departamentos)


Envía un arreglo de hasta 100 departamentos en el mismo endpoint, el modo lote se activa al enviar un arreglo como cuerpo. Si cualquier fila falla la validación, ningún departamento se crea y la respuesta lista los problemas por fila.

Referencias entre filas no permitidas. Una fila no puede usar parent_department_number para apuntar a otra fila del mismo lote — los padres deben existir antes de la solicitud. Para construir árboles de varios niveles, crea los nodos raíz en una solicitud y los hijos en una segunda. De la misma forma, un cost_center inline no puede compartirse entre filas: cada fila crea su propio CC.

[
  { "name": "Marketing", "code": "MKT" },
  { "name": "Finanzas", "code": "FIN", "parent_department_number": 1 }
]

Reglas de los campos

CampoTipoRequeridoNotas
namestringSíNo vacío tras recortar espacios. (Sobrescrito silenciosamente si el departamento se vincula a un CC.)
codestringNo≤ 60 caracteres, se almacena en mayúsculas, único por organización. (Sobrescrito silenciosamente si el departamento se vincula a un CC.)
descriptionstringNoTexto libre. (Sobrescrito silenciosamente si el departamento se vincula a un CC.)
parent_department_numberinteger positivoNoDebe ser el department_number de un departamento existente en la misma organización. No se permiten referencias dentro del lote.
cost_center_codestringNoCódigo de un CC existente; se almacena en mayúsculas. Mutuamente excluyente con cost_center.
cost_centerobjectNoCrea un CC nuevo y vincula este departamento a él (forma abajo). Mutuamente excluyente con cost_center_code. En modo lote, cada fila crea su propio CC — no se pueden compartir entre filas.
is_activebooleanNoPor defecto true. (Sobrescrito silenciosamente si el departamento se vincula a un CC.)
sort_orderinteger ≥ 0NoPor defecto 0. (Sobrescrito silenciosamente si el departamento se vincula a un CC.)

Forma de cost_center (creación inline)

CampoTipoRequeridoNotas
codestringSíSe almacena en mayúsculas, ≤ 60, único por organización.
namestringSíNo vacío tras recortar espacios.
descriptionstringNo
parent_cost_center_codestringNoCódigo de un CC existente en la organización.
sort_orderinteger ≥ 0NoPor defecto 0.

Espejo de campos con el centro de costos

Cuando el departamento se vincula a un centro de costos (al crear, sea vía cost_center_code o cost_center), el CC es dueño de estos campos en el departamento: name, code, description, sort_order. Los valores que el usuario envíe para esos campos se ignoran y el departamento se escribe con los valores del CC.

Forma de las respuestas

201 — solicitud única

Cuando el cuerpo es un objeto, la respuesta es el objeto del departamento creado.

{
  "id": "ck...",
  "department_number": 5,
  "parent_id": "ck...",
  "depth": 1,
  "name": "Ventas",
  "code": "VEN",
  "description": null,
  "cost_center_id": null,
  "is_active": true,
  "sort_order": 0,
  "created_at": "2026-05-24T10:00:00.000Z",
  "updated_at": "2026-05-24T10:00:00.000Z"
}

201 — solicitud por lote

Cuando el cuerpo es un arreglo, la respuesta envuelve los resultados en summary + created[].

{
  "summary": { "total": 2, "created": 2 },
  "created": [
    { "id": "ck...", "department_number": 6, "...": "..." },
    { "id": "ck...", "department_number": 7, "...": "..." }
  ]
}

Errores

400 — validación fallida (solicitud única)

Para fallas de validación de campos, errors es un objeto indexado por campo:

{
  "message": "Validation failed.",
  "errors": { "name": ["Ingresa el nombre."] }
}

400 — validación fallida (solicitud por lote)

Reporte por fila. Ningún departamento del lote fue creado.

{
  "message": "Validation failed for 2 department(s). No departments were created.",
  "summary": { "total": 3, "with_errors": 2 },
  "errors": [
    {
      "index": 0,
      "department": { "name": "Ventas", "code": "VEN" },
      "issues": [
        {
          "field": "parent_department_number",
          "code": "PARENT_DEPARTMENT_NOT_FOUND",
          "message": "No department with number '99' in this organization."
        }
      ]
    },
    {
      "index": 2,
      "department": { "name": "Compras", "code": "VEN" },
      "issues": [
        {
          "field": "code",
          "code": "DUPLICATE_CODE_IN_BATCH",
          "message": "Code 'VEN' appears multiple times in this batch."
        }
      ]
    }
  ]
}
  • index — posición 0-based de la fila que falló dentro del arreglo enviado.
  • department.name / department.code — extraídos de tu entrada para que identifiques la fila sin contar.
  • issues[] — todos los problemas de esa fila listados juntos para corregirlos antes de reintentar.

409 — condición de carrera

Se devuelve con el código CONCURRENT_MODIFICATION cuando otra solicitud reclama un code (o modifica un CC referenciado) entre el momento en que validamos el tuyo y el momento en que escribimos. En modo lote, la transacción completa hace rollback — ningún departamento es creado. Reintenta la misma solicitud.

Vocabulario de códigos de error

Estos códigos aparecen dentro de issues[].code (o como code en el cuerpo de error en single) y son estables — tu cliente puede ramificar lógica con base en ellos:

CodigoSignificado
INVALID_INPUTFalla genérica de validación de campos (formato, longitud, tipo).
PARENT_DEPARTMENT_NOT_FOUNDparent_department_number no coincide con un departamento existente.
COST_CENTER_NOT_FOUNDcost_center_code no coincide con un CC existente.
COST_CENTER_PARENT_NOT_FOUNDcost_center.parent_cost_center_code no coincide con un CC existente.
DUPLICATE_CODEcode ya existe en la base de datos para esta organización.
DUPLICATE_CODE_IN_BATCHDos o más filas del lote envían el mismo code.
DUPLICATE_COST_CENTER_CODEEl cost_center.code inline ya existe en la base de datos.
DUPLICATE_COST_CENTER_CODE_IN_BATCHDos o más filas envían el mismo cost_center.code inline.
CONCURRENT_MODIFICATIONSeñal de reintento por condición de carrera (respuesta 409).
Abrir Nominex