A peer-to-peer payment application inspired by Venmo. Users can register, send money to other users, request payments, and track their transaction history.
- User registration and JWT-based authentication
- Account balance management (deposits, withdrawals)
- Send money to other registered users with balance validation
- Request payments from other users
- Approve, reject, or cancel pending transfer requests
- View transaction history filtered by sender or receiver
- Backend: Java 11, Spring Boot, Spring Security (JWT)
- Database: PostgreSQL
- Build: Maven
Three core tables:
tenmo_user— credentials and authenticationaccount— user balances (each new account starts at $1,000)transfer— transaction records with status tracking (pending, approved, rejected, cancelled)
All endpoints except registration and login require a valid JWT token.
Accounts
GET /account/balance— get current balancePUT /account/deposit— deposit fundsPUT /account/withdraw— withdraw funds
Transfers
POST /transfer/send— send money to a userPOST /transfer/request— request money from a userPUT /transfer/approve— approve a pending requestPUT /transfer/reject— reject a pending requestPUT /transfer/cancel— cancel a sent requestGET /transfer/find— look up a transfer by IDGET /transfer/find_transfer— list transfers by account
- Create a PostgreSQL database called
tenmo - Run
database/tenmo.sqlto create the schema - Start the server:
The server runs on port 8080 by default.
cd tenmo-server ./mvnw spring-boot:run