Referencia de la API¶
Turbo EA expone una API REST completa que impulsa todo lo que se puede hacer en la interfaz web. Puede usarla para automatizar actualizaciones de inventario, integrarse con pipelines CI/CD, construir paneles personalizados o llevar datos EA a otras herramientas (BI, GRC, ITSM, hojas de cálculo).
La misma API está documentada de forma interactiva mediante la Swagger UI integrada en FastAPI, de modo que administradores y desarrolladores pueden explorar cada endpoint, inspeccionar los esquemas de petición/respuesta y probar llamadas directamente desde el navegador.
URL base¶
Todos los endpoints de la API viven bajo el prefijo /api/v1:
https://su-dominio.example.com/api/v1
En local (configuración Docker por defecto):
http://localhost:8920/api/v1
La única excepción es el endpoint de salud, montado en /api/health (sin prefijo de versión).
Referencia interactiva de la API (Swagger UI)¶
FastAPI genera automáticamente una especificación OpenAPI 3 a partir del código del backend y sirve junto a ella una Swagger UI interactiva. Esta es la fuente única de verdad para cada endpoint, parámetro y forma de respuesta.
| URL | Descripción |
|---|---|
/api/docs |
Swagger UI: explorar, buscar y probar endpoints desde el navegador |
/api/redoc |
ReDoc: vista alternativa de solo lectura de la documentación |
/api/openapi.json |
Esquema OpenAPI 3 en bruto (útil para generadores de código como openapi-generator-cli) |
Disponible solo en modo desarrollo
Por motivos de seguridad, los endpoints de documentación de la API están deshabilitados en producción. Solo se sirven cuando ENVIRONMENT=development está definido en su archivo .env. En despliegues de producción, el esquema OpenAPI no se expone públicamente, pero la API en sí funciona exactamente igual.
Para explorar la referencia de la API de una instancia de producción, levante una instancia local de Turbo EA en modo desarrollo (el esquema es idéntico entre despliegues de la misma versión) o cambie temporalmente ENVIRONMENT=development, reinicie el backend y revierta el cambio cuando termine.
Probar endpoints desde la Swagger UI¶
- Abra
/api/docsen su navegador. - Haga clic en Authorize en la parte superior derecha.
- Pegue un JWT válido (sin el prefijo
Bearer) en el campobearerAuthy confirme. - Despliegue cualquier endpoint, haga clic en Try it out, complete los parámetros y pulse Execute.
Swagger envía la petición desde su navegador con su token, así que cualquier cosa que se pueda hacer mediante la API es accesible desde esta página: útil para tareas administrativas puntuales y para verificar el comportamiento de los permisos.
Autenticación¶
Todos los endpoints excepto /auth/*, el chequeo de salud y los portales web públicos requieren un JSON Web Token enviado en la cabecera Authorization:
Authorization: Bearer <access_token>
Obtener un token¶
POST /api/v1/auth/login con su correo y contraseña:
curl -X POST https://su-dominio.example.com/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "password": "su-contraseña"}'
La respuesta contiene un access_token:
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer"
}
Los tokens son válidos durante 24 horas por defecto (ACCESS_TOKEN_EXPIRE_MINUTES). Use POST /api/v1/auth/refresh para extender una sesión sin reintroducir credenciales.
Usuarios SSO
Si su organización utiliza inicio de sesión único, no podrá iniciar sesión con correo y contraseña. Pida a un administrador que cree una cuenta de servicio con contraseña local para la automatización, o capture el JWT desde el session storage del navegador tras un inicio SSO normal (solo para desarrollo).
Usar el token¶
curl https://su-dominio.example.com/api/v1/cards \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Permisos¶
La API aplica las mismas reglas RBAC que la interfaz web. Cada endpoint que muta datos comprueba tanto el rol de aplicación del llamante como cualquier rol de parte interesada que tenga sobre la ficha afectada. No existen «permisos de API» separados ni atajos de cuenta de servicio: los scripts de automatización corren con los permisos del usuario cuyo token usan.
Si una petición falla con 403 Forbidden, el token es válido pero al usuario le falta el permiso requerido. Consulte la página Usuarios y roles para ver el registro de permisos.
Grupos de endpoints comunes¶
La referencia completa está en Swagger; la siguiente tabla es un mapa rápido de los grupos más usados:
| Prefijo | Propósito |
|---|---|
/auth |
Inicio de sesión, registro, callback SSO, refresco de token, datos del usuario actual |
/cards |
CRUD de fichas (entidad central), jerarquía, historial, aprobación, exportación CSV |
/relations |
CRUD de relaciones entre fichas |
/metamodel |
Tipos de ficha, campos, secciones, subtipos, tipos de relación |
/reports |
KPI del panel, portafolio, matriz, ciclo de vida, dependencias, coste, calidad de datos |
/bpm |
Gestión de procesos de negocio: diagramas, elementos, versiones de flujo, evaluaciones |
/ppm |
Gestión de portafolio de proyectos: iniciativas, informes de estado, EDT, tareas, costes, riesgos |
/turbolens |
Análisis impulsado por IA (proveedores, duplicados, seguridad, IA de arquitectura) |
/risks |
Registro de riesgos EA (Fase G de TOGAF) |
/diagrams |
Diagramas DrawIO |
/soaw |
Documentos Statement of Architecture Work |
/adr |
Architecture Decision Records |
/users, /roles |
Administración de usuarios y roles (solo admin) |
/settings |
Ajustes de la aplicación (logo, divisa, SMTP, IA, interruptores de módulos) |
/servicenow |
Sincronización bidireccional con la CMDB de ServiceNow |
/events, /notifications |
Pista de auditoría y notificaciones de usuario (incluido el flujo SSE) |
Paginación, filtrado y ordenación¶
Los endpoints de listado aceptan un conjunto coherente de parámetros de consulta:
| Parámetro | Descripción |
|---|---|
page |
Número de página (empieza en 1) |
page_size |
Elementos por página (por defecto 50, máximo 200) |
sort_by |
Campo de ordenación (por ejemplo name, updated_at) |
sort_dir |
asc o desc |
search |
Filtro de texto libre (donde se admita) |
Los filtros específicos de cada recurso están documentados por endpoint en Swagger (p. ej. /cards admite type, status, parent_id, approval_status).
Eventos en tiempo real (Server-Sent Events)¶
GET /api/v1/events/stream es una conexión SSE de larga duración que envía eventos a medida que ocurren (ficha creada, actualizada, aprobada, etc.). La interfaz web la usa para refrescar contadores y listas sin sondeo. Cualquier cliente HTTP compatible con SSE puede suscribirse: útil para construir paneles en tiempo real o puentes de notificación externos.
Generación de código¶
Como la API está totalmente descrita por OpenAPI 3, puede generar clientes con tipado estático en cualquier lenguaje principal:
# Descargar el esquema desde una instancia de desarrollo
curl http://localhost:8920/api/openapi.json -o turbo-ea-openapi.json
# Generar un cliente Python
openapi-generator-cli generate \
-i turbo-ea-openapi.json \
-g python \
-o ./turbo-ea-client-py
# … o TypeScript, Go, Java, C#, etc.
Para automatización en Python, lo más sencillo suele ser httpx o requests con llamadas escritas a mano: la API es lo bastante pequeña como para que rara vez compense un generador.
Limitación de tasa¶
Los endpoints sensibles a la autenticación (login, registro, restablecimiento de contraseña) están limitados con slowapi para protegerse de ataques de fuerza bruta. Los demás endpoints no están limitados por defecto; si necesita ralentizar un script de automatización pesado, hágalo del lado del cliente o detrás de su proxy inverso.
Versionado y estabilidad¶
- La API se versiona mediante el prefijo
/api/v1. Un cambio incompatible introduciría un/api/v2en paralelo. - Dentro de
v1, los cambios aditivos (nuevos endpoints, nuevos campos opcionales) pueden llegar en versiones menores y de parche. Las eliminaciones o cambios de contrato se reservan para un cambio de versión mayor. - La versión actual se reporta en
GET /api/healthpara que la automatización pueda detectar actualizaciones.
Resolución de problemas¶
| Problema | Solución |
|---|---|
/api/docs devuelve 404 |
Swagger UI está deshabilitada en producción. Defina ENVIRONMENT=development y reinicie el backend, o use una instancia de desarrollo para explorar el esquema. |
401 Unauthorized |
El token falta, está mal formado o ha expirado. Reautentíquese vía /auth/login o /auth/refresh. |
403 Forbidden |
El token es válido pero al usuario le falta el permiso requerido. Compruebe el rol en Usuarios y roles. |
422 Unprocessable Entity |
Falló la validación de Pydantic. El cuerpo de la respuesta lista los campos inválidos y el motivo. |
| Errores CORS desde una app de navegador | Añada el origen del frontend a ALLOWED_ORIGINS en .env y reinicie el backend. |