API — Introduction
La API de Zentto es una interfaz REST que expone toda la funcionalidad del ERP para integraciones externas, aplicaciones móviles y el propio frontend modular.
URL base
Section titled “URL base”| Entorno | URL |
|---|---|
| Producción | https://api.zentto.net |
| Desarrollo | http://localhost:4000 |
Todas las rutas de la API tienen el prefijo /api:
https://api.zentto.net/api/auth/loginhttps://api.zentto.net/api/productshttps://api.zentto.net/api/invoicesArquitectura
Section titled “Arquitectura”La API está construida con:
- Node.js + Express + TypeScript.
- Stored Procedures: toda la lógica de datos reside en SP (SQL Server o PostgreSQL).
- Helpers de DB:
callSp(),callSpOut(),callSpTx()enweb/api/src/db/query.ts. - Dual database: soporta SQL Server y PostgreSQL, controlado por
DB_TYPEen.env.
Convenciones
Section titled “Convenciones”Formato de respuesta
Section titled “Formato de respuesta”Todas las respuestas siguen un formato consistente:
{ "ok": true, "data": { ... }, "message": "Operación exitosa"}En caso de error:
{ "ok": false, "message": "Descripción del error", "errors": ["detalle1", "detalle2"]}Códigos HTTP
Section titled “Códigos HTTP”| Código | Significado |
|---|---|
| 200 | Operación exitosa |
| 201 | Recurso creado |
| 400 | Solicitud inválida (validación) |
| 401 | No autenticado |
| 403 | Sin permisos |
| 404 | Recurso no encontrado |
| 500 | Error interno del servidor |
Paginación
Section titled “Paginación”Los endpoints de listado soportan paginación:
GET /api/products?page=1&pageSize=20La respuesta incluye metadatos de paginación:
{ "ok": true, "data": [...], "totalCount": 150, "page": 1, "pageSize": 20}Fechas
Section titled “Fechas”Todas las fechas se manejan en UTC-0. El middleware datetime.ts convierte automáticamente:
- Request: fechas del cliente se convierten a UTC antes de procesar.
- Response: fechas UTC se convierten a la zona horaria de la empresa antes de enviar.
Rate limiting
Section titled “Rate limiting”La API implementa límites de tasa para prevenir abuso:
| Contexto | Límite |
|---|---|
| General | 100 requests / minuto por IP |
| Autenticación | 10 intentos / minuto por IP |
| Exportaciones | 5 requests / minuto por usuario |
Al exceder el límite, la API responde con código 429 Too Many Requests y un header Retry-After indicando los segundos de espera.
Contrato OpenAPI
Section titled “Contrato OpenAPI”La especificación completa de la API se mantiene en web/contracts/openapi.yaml. Este contrato se actualiza antes de cualquier cambio en el frontend, garantizando que ambos lados estén sincronizados.
Secciones
Section titled “Secciones”| Sección | Descripción |
|---|---|
| Autenticación | JWT, refresh tokens y API keys |
| Endpoints | Lista completa de endpoints por módulo |