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()).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
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.