Novus Technology
Laboratorio · API gratuita de práctica

Novus Fintech Demo API

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.

Datos para empezar

Base URL

https://novus-fintech-demo-api.onrender.com

Credenciales de prueba

novus_demo / DemoNovus#2026

Si 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).

Endpoints

GET/healthSin auth

Verifica que el servicio esté activo.

Respuesta 200:
{ "status": "ok", "uptimeSeconds": 4821 }
POST/auth/loginSin auth

Obtiene 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": "..." }
GET/accountsBearer JWT

Lista 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
}
GET/accounts/{accountId}Bearer JWT

Detalle de una cuenta específica.

Error 404:
{ "code": "ACCOUNT_NOT_FOUND", "message": "..." }
GET/accounts/{accountId}/transfersBearer JWT

Historial 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).
POST/transfersBearer JWT

Crea 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
GET/transfers/{transferId}Bearer JWT

Consulta el estado de una transferencia — útil para hacer polling hasta que pase de 'pending' a 'completed'.

Error 404:
{ "code": "TRANSFER_NOT_FOUND", "message": "..." }
POST/admin/resetX-Admin-Token

Restaura 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 }
Ideas para practicar: automatizar el flujo completo login → crear transferencia → hacer polling de 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.
← Volver a Laboratorio