API de Integraciones
La API REST de Kordia (/api/v1) y MCP (/mcp) comparten operaciones y reglas de dominio. REST requiere Starter o Pro; MCP es exclusivo de Pro. La suscripción debe estar en estado active, comprobado en cada petición, y la API key debe tener los scopes necesarios.
Especificación: GET /api/openapi.json.
Referencia por área
- Proyectos: listar, crear, leer, actualizar, archivar, reactivar y borrar.
- Recursos: listar, crear, leer, actualizar y borrar.
- Etiquetas: listado, consulta y CRUD.
- Asignaciones: listado, consulta y CRUD y candidatos/preview de planificación.
- Contratos: CRUD, preview de creación/actualización/borrado y resolución de conflictos.
- Informes: horas, disponibilidad y presupuestos por etiquetas.
- Organización: consultar y actualizar.
- Miembros e invitaciones: listar, invitar, roles, retirar y revocar.
- Autenticación y scopes, errores y conectar MCP.
Cada referencia indica campos requeridos/opcionales, tipos, envelopes y códigos de respuesta. Los ejemplos HTTP usan IDs ilustrativos: sustitúyelos por los de tu organización y añade Bearer. Envía JSON con Content-Type: application/json. Los IDs son enteros positivos (REST también admite cadenas enteras); fechas YYYY-MM-DD, timestamps ISO 8601 y costes como decimal string, por ejemplo "52.50", no números binarios en coma flotante.
Alcance operativo
| Área | Operaciones |
|---|---|
| Proyectos | Listar, consultar, crear, actualizar, archivar, reactivar y borrar |
| Recursos, contratos y etiquetas | Listar, consultar, crear, actualizar y borrar |
| Asignaciones | Consultar, planificar, crear, actualizar y borrar |
| Informes | Horas mensuales, disponibilidad y desglose por etiquetas |
| Organización | Consultar y actualizar nombre y horas anuales por defecto |
| Miembros | Listar miembros/invitaciones, invitar, cambiar roles, retirar y revocar |
La cuenta personal, checkout/facturación y eliminación de organizaciones permanecen en la UI. No se promete paridad literal con toda la interfaz.
Rutas
Todas llevan el prefijo /api/v1.
| Método | Ruta |
|---|---|
| GET / POST | /projects, /resources, /contracts, /tags, /assignments |
| GET / PATCH / PUT / DELETE | Las mismas colecciones con /:id |
| POST | /projects/:id/archive, /projects/:id/unarchive |
| POST | /planning/assignments, /contracts/preview, /contracts/:id/preview |
| GET | /reports/:kind/:id, /reports/availability, /organization, /members |
| PATCH | /organization, /members/:id |
| POST | /invitations |
| DELETE | /members/:id, /invitations/:id |
Flujo recomendado
- Un administrador crea una clave desde API keys, seleccionando los scopes mínimos.
- Importa proyectos y recursos; añade contratos para disponer de capacidad.
- Usa
/planning/assignmentsconproject_id,start_date,end_dateydaily_hoursototal_hours. Sinresource_idbusca candidatos por disponibilidad (query,tag_ids,limityafter_idopcionales). Continúa connext_after_idcomoafter_id, incluso si una página devuelvecandidatesvacío. Conresource_id, sin filtros de candidatos, devuelve el reparto calculado sin guardar. No es un optimizador global. - Inspecciona la desviación del preview antes de guardar con
POST /assignments, por ejemplo{"project_id":10,"resource_id":7,"start_date":"2026-06-01","end_date":"2026-06-30","total_hours":80}. Puede devolver varios segmentos endata.assignments. En modo total, preview y escritura incluyenrequested_total_hours,planned_total_hours,deviation_hours,tolerance_hoursyexact;total_hourses el total planificado. El planificador compartido con la UI admite tolerancia de 0.01 horas sin superar el total solicitado. La disponibilidad se revalida al guardar; revisa también el resultado de escritura. - Antes de cambiar un contrato, llama
POST /contracts/5/previewcon{"operation":"update","daily_hours":4}. Revisadata.conflicts; para resolverlos explícitamente usaPATCH /contracts/5con{"daily_hours":4,"conflict_policy":"resolve","entry_ids":[42]}, sustituyendo IDs por conflictos actuales. El valor por defecto esreject; los bloqueos de proyectos archivados no se eluden. - Consulta
GET /reports/project_hours/10?year=2026. Otros tipos:resource_hours,availability(ID de recurso opcional; sin ID incluye toda la organización) ytag_breakdown(ID de proyecto). Usayearofrom/to, no ambos.
Se conservan las validaciones de capacidad contractual, solapes, ventanas de proyecto, costes, archivos y límites del plan. Ajustes de organización y miembros requieren un creador de clave que siga siendo administrador, además del scope.
Respuestas e importaciones repetibles
Los éxitos devuelven data; las listas están paginadas:
{"data":[],"meta":{"limit":50,"offset":0,"total":0}}
Usa limit (1–100) y offset. Proyectos y recursos aceptan external_id opcional, único por organización y entidad; puedes consultarlo con GET /resources?external_id=employee-456. No es un upsert ni idempotencia automática. No reintentes mutaciones a ciegas tras un timeout: consulta primero el estado.