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 | Sí | 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 | Sí | Fecha de inicio. |
end_date |
date/null | No |
Fecha de fin. null significa contrato abierto. |
daily_hours |
integer | Sí | 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 | Sí | 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()).dataimport 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
-
422sinamefalta. -
422siexternal_idya existe. -
422si el contrato solapa otro contrato del recurso. -
422si el contrato inicial supera el límite de recursos activos del plan.