Skip to content

API Endpoints - Portal de Clientes

Documentacion completa de todos los endpoints REST disponibles para el Portal de Clientes.

Estado: Planificado

Base URL: /portal/*

Autenticacion: Todos los endpoints (excepto los de /auth/*) requieren header Authorization: Bearer {jwt_token}

Grupos de Endpoints

Autenticacion (/portal/auth/*)

Registro, login y gestion de credenciales. Estos endpoints son publicos (no requieren JWT).

MetodoEndpointDescripcion
POST/portal/auth/registerAuto-registro con DNI/CUIT + password
POST/portal/auth/loginLogin con credenciales + tenant_id/sucursal_id
POST/portal/auth/forgot-passwordSolicitar codigo de recuperacion por email
POST/portal/auth/reset-passwordRestablecer password con codigo
POST/portal/auth/refresh-tokenRenovar JWT con refresh token

Cuenta Corriente (/portal/cuenta/*)

Consulta de estado de cuenta y deudas. Requieren JWT.

MetodoEndpointDescripcion
GET/portal/mi-cuentaResumen de cuenta del usuario autenticado
GET/portal/deudasListado de deudas pendientes

Pagos (/portal/pagos/*)

Pagos online con gateways externos. Requieren JWT excepto el webhook.

MetodoEndpointDescripcion
POST/portal/pagos/iniciarIniciar pago online con gateway
POST/portal/pagos/webhookWebhook del gateway (publico, validado por firma)
GET/portal/pagos/historialHistorial de pagos del usuario

Cupones (/portal/cupones/*)

Generacion y consulta de cupones de pago. Requieren JWT.

MetodoEndpointDescripcion
POST/portal/cupones/generarGenerar cupon de pago con codigo de barras
GET/portal/cupones/mis-cuponesListar cupones del usuario autenticado
GET/portal/cupones/{codigo_barras}Detalle de un cupon por codigo

Ver endpoints.md para documentacion detallada de cada endpoint con schemas de request/response.

Headers Requeridos

Endpoints protegidos (con JWT)

http
Authorization: Bearer {jwt_token}
Content-Type: application/json

Endpoints publicos (auth)

http
Content-Type: application/json

NO se usa header X-Client-Domain. El tenant se resuelve desde el JWT (endpoints protegidos) o desde el body del request (login/register).

Resolucion de Tenant

El tenant se resuelve de forma diferente segun el contexto:

  • Login/Register: El frontend envia tenant_id + sucursal_id en el body (valores de .env del deploy Docker)
  • Endpoints protegidos: Se extraen tenant_id + sucursal_id del JWT
  • Webhook: El payment_id del payload permite ubicar el tenant desde portal_payments
mermaid
sequenceDiagram
    participant F as Frontend
    participant M as Middleware
    participant C as Controller
    participant DB as PostgreSQL

    F->>M: Request + JWT
    M->>M: Decodificar JWT
    M->>M: Extraer tenant_id, sucursal_id
    M->>DB: Resolver DB desde ini.sistema (tenant_id)
    M->>DB: Resolver schema (sucXXXX) desde sucursal_id
    M->>C: Request con conexion configurada

Formato de Respuestas

Respuesta exitosa

json
{
  "success": true,
  "data": {}
}

Respuesta de error

json
{
  "success": false,
  "error": "Mensaje descriptivo",
  "code": "ERROR_CODE"
}

Codigos de Error

CodigoDescripcion
400Parametros invalidos o request malformado
401JWT invalido, expirado o credenciales incorrectas
403Usuario no autorizado para este recurso
404Recurso no encontrado
409Conflicto (ej: email ya registrado)
422Validacion de negocio fallida
429Rate limit excedido
500Error interno del servidor

Seguridad

  • Rate Limiting: Login 5/min por IP, API 100/min por usuario
  • CORS: Configurado por deploy Docker (origen fijo por tenant)
  • Input Validation: Validacion estructural en middleware, validacion de negocio en services
  • Webhook Security: Firma especifica por gateway, idempotencia via external_id

Documentos Detallados