Backend: API y seguridad
Alcance
Este documento describe el estado actual de la API. No necesariamente representa el estado ideal deseado.
Convenciones generales
- no existe prefijo global como
/apio/v1 - la paginacion tipica usa
pageypageSize - el maximo usual de
pageSizees100
Headers importantes
| Header | Para que sirve |
|---|---|
Authorization | Lleva el Firebase ID token de la sesion |
businessId | Define el tenant activo en rutas privadas multiempresa |
x-internal-task-token | Protege endpoints internos de automatizacion |
Autenticacion
La API usa Firebase Admin para validar Authorization: Bearer <token>.
Cuando el token es valido:
- se resuelve la identidad del usuario
- se inyecta contexto de autenticacion en la request
Validacion de businessId
En rutas privadas que no esten exentas, el backend exige businessId.
No se valida solo la presencia del header. Tambien se valida:
- existencia del negocio
- existencia del plan
- suscripcion activa
- plan activo
Rate limiting
El sistema incluye un rate limit en memoria con estas caracteristicas documentadas:
- ventana de 1 segundo
- maximo de 10 requests por segundo
- clave basada en origen, metodo y path
Modulos API expuestos
| Base path | Operaciones tipicas |
|---|---|
/auth | login y registro |
/business | CRUD de negocio y reconciliacion de usage |
/branches | CRUD de sedes |
/services | CRUD de servicios |
/modules | catalogo funcional |
/permissions | permisos base |
/roles | roles del sistema |
/business-memberships | membresias, rol y sede |
/users | consulta y actualizacion de usuarios |
/appointments | agenda operativa |
/bookings | reserva comercial y pagos |
/reviews | reseñas |
/metrics | metricas agregadas |
/plans | planes de la plataforma |
/push-notifications | registro y baja de dispositivos |
/whatsapp | mensajeria interna automatizada |
Estado actual de acceso
Rutas publicas o publicadas por prefijo
Segun la configuracion actual, existen prefijos o endpoints que hoy quedan publicos, por ejemplo:
/auth/branches/services/appointments/modules/permissions/rolesGET /bookingsPOST /bookingsPUT /bookings*GET /usersGET /reviewsPOST /reviews
Esto es importante porque forma parte del comportamiento real del sistema y debe revisarse con criterio de seguridad.
Rutas privadas sin businessId
Algunas mutaciones privadas quedan exentas del header businessId, por ejemplo:
- mutaciones de negocios
- mutaciones de planes
- alta de ciertas memberships por documento
- suscripciones push
Endpoints internos
Dos flujos documentados dependen de x-internal-task-token:
POST /whatsapp/send-message/:typePOST /business/usage/reconcile-today
Aunque alguno de esos endpoints pueda aparecer dentro de rutas tratadas como publicas, su proteccion real depende de ese token interno.
Filtros importantes
Appointments
Admite filtros como:
businessIdidemployeeIdbookingIdstartDateendDatesameDateincludeDeletes
Bookings
Admite filtros como:
idbusinessIdclientIdconsecutivestatusincludeDeletes
Metrics
Admite filtros como:
metricTypesentityTypebusinessIdbranchIdemployeeIdtimeframestartDateendDate
Riesgos y observaciones
- hay superficie publica mayor a la que normalmente se esperaria en una API privada
- no existe especificacion formal OpenAPI
- el rate limit es en memoria y no se comparte entre replicas
- seguridad de tareas internas depende de configurar bien el token interno