Crear recurso

Crea un recurso dentro de la organización asociada a la API key. El contrato inicial es opcional, pero recomendado cuando el sistema externo ya conoce la capacidad de la persona.

POST /api/v1/resources

Si el contrato inicial falla, Kordia revierte la operación completa y no guarda un recurso incompleto.

Body

Campo Tipo Requerido Descripción
name string Nombre visible del recurso.
external_id string No Identificador del sistema externo. Único por organización.
tag_ids array integer No Etiquetas de recurso existentes en la organización.
contract object No Contrato inicial.

Contract

Campo Tipo Requerido Descripción
start_date date Fecha de inicio.
end_date date/null No Fecha de fin. null significa contrato abierto.
daily_hours integer Capacidad diaria.
annual_convention_hours integer No Horas anuales de convenio. Si falta, se usa el valor por defecto de la organización.
cost_per_hour decimal string Coste por hora.
curl https://app.example.com/api/v1/resources \
  -X POST \
  -H "Authorization: Bearer $KORDIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ana García",
    "external_id": "employee-456",
    "tag_ids": [3],
    "contract": {
      "start_date": "2026-06-01",
      "end_date": null,
      "daily_hours": 8,
      "annual_convention_hours": 1800,
      "cost_per_hour": "50.00"
    }
  }'
const response = await fetch("https://app.example.com/api/v1/resources", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.KORDIA_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    name: "Ana García",
    external_id: "employee-456",
    tag_ids: [3],
    contract: {
      start_date: "2026-06-01",
      end_date: null,
      daily_hours: 8,
      annual_convention_hours: 1800,
      cost_per_hour: "50.00"
    }
  })
})

const resource = (await response.json()).data
import os
import requests

response = requests.post(
    "https://app.example.com/api/v1/resources",
    headers={"Authorization": f"Bearer {os.environ['KORDIA_API_KEY']}"},
    json={
        "name": "Ana García",
        "external_id": "employee-456",
        "tag_ids": [3],
        "contract": {
            "start_date": "2026-06-01",
            "end_date": None,
            "daily_hours": 8,
            "annual_convention_hours": 1800,
            "cost_per_hour": "50.00",
        },
    },
)

resource = response.json()["data"]
Req.post!(
  "https://app.example.com/api/v1/resources",
  headers: [authorization: "Bearer #{System.fetch_env!("KORDIA_API_KEY")}"],
  json: %{
    name: "Ana García",
    external_id: "employee-456",
    tag_ids: [3],
    contract: %{
      start_date: "2026-06-01",
      end_date: nil,
      daily_hours: 8,
      annual_convention_hours: 1800,
      cost_per_hour: "50.00"
    }
  }
).body["data"]

Respuesta

Status: 201 Created

{
  "data": {
    "id": 7,
    "external_id": "employee-456",
    "name": "Ana García",
    "tags": [],
    "contracts": [
      {
        "id": 5,
        "start_date": "2026-06-01",
        "end_date": null,
        "daily_hours": 8,
        "annual_convention_hours": 1800,
        "cost_per_hour": "50.00"
      }
    ]
  }
}

Errores habituales

  • 422 si name falta.
  • 422 si external_id ya existe.
  • 422 si el contrato solapa otro contrato del recurso.
  • 422 si el contrato inicial supera el límite de recursos activos del plan.