/healthSin authVerifica que el servicio esté activo.
Respuesta 200:
{ "status": "ok", "uptimeSeconds": 4821 }Una API REST real de cuentas y transferencias, pensada para que practiques automatización: login con JWT, paginación, transferencias asíncronas (pending → completed), idempotencia y errores de validación.
Base URL
https://novus-fintech-demo-api.onrender.comCredenciales de prueba
novus_demo / DemoNovus#2026Si borraste o modificaste los datos de prueba, usa POST /admin/reset para restaurar las cuentas y transferencias semilla (cuentas acc-001, acc-002, acc-003).
/healthSin authVerifica que el servicio esté activo.
Respuesta 200:
{ "status": "ok", "uptimeSeconds": 4821 }/auth/loginSin authObtiene un token JWT para usar en el resto de endpoints.
Body:
{ "username": "novus_demo", "password": "DemoNovus#2026" }
Respuesta 200:
{ "token": "eyJhbGciOi...", "expiresIn": "1h" }
Error 401 (credenciales inválidas):
{ "code": "INVALID_CREDENTIALS", "message": "..." }/accountsBearer JWTLista las cuentas, con paginación.
Query params: ?page=1&pageSize=10
Respuesta 200:
{
"items": [
{ "id": "acc-001", "accountNumber": "191-0000123-0-45",
"holderName": "...", "currency": "PEN", "balance": 1500.50,
"createdAt": "2026-01-01T00:00:00Z" }
],
"page": 1, "pageSize": 10, "total": 3
}/accounts/{accountId}Bearer JWTDetalle de una cuenta específica.
Error 404:
{ "code": "ACCOUNT_NOT_FOUND", "message": "..." }/accounts/{accountId}/transfersBearer JWTHistorial de transferencias enviadas/recibidas por una cuenta.
Query params: ?page=1&pageSize=10
Respuesta 200: misma forma de paginación que /accounts,
con items tipo Transfer (ver /transfers abajo)./transfersBearer JWTCrea una transferencia entre dos cuentas. Queda en estado 'pending' y pasa a 'completed' automáticamente poco después — ideal para practicar polling.
Headers (opcional): Idempotency-Key: <cualquier string único>
Body:
{ "fromAccountId": "acc-001", "toAccountId": "acc-002", "amount": 100.00, "currency": "PEN" }
Respuesta 201 (creada):
{ "id": "tr-3f6b2e6a-...", "fromAccountId": "acc-001", "toAccountId": "acc-002",
"amount": 100.00, "currency": "PEN", "status": "pending",
"createdAt": "...", "completedAt": null }
Si reenvías la misma Idempotency-Key, responde 200 con la misma
transferencia y el header "idempotent-replay: true" (no la duplica).
Errores:
400 MISSING_FIELDS / SAME_ACCOUNT / INVALID_AMOUNT
404 ACCOUNT_NOT_FOUND
422 INSUFFICIENT_FUNDS / CURRENCY_MISMATCH/transfers/{transferId}Bearer JWTConsulta el estado de una transferencia — útil para hacer polling hasta que pase de 'pending' a 'completed'.
Error 404:
{ "code": "TRANSFER_NOT_FOUND", "message": "..." }/admin/resetX-Admin-TokenRestaura las cuentas y transferencias al estado semilla original. Útil para resetear el entorno antes de una sesión de práctica.
Respuesta 200:
{ "message": "Datos restaurados", "accounts": 3, "transfers": 0 }GET /transfers/:id hasta ver status: "completed"; probar reenviar la misma Idempotency-Key y validar que no se duplica; forzar los errores 400/404/422 a propósito para verificar que la API responde con el código correcto.