Register a new user
Request Body:{ "name": "Budi", "email": "budi@example.com", "password": "password123" }Response:
{ "success": true, "message": "User created successfully. Please check your email for verification.", "user": { "id": "xxx", "email": "budi@example.com", "name": "Budi", "role": "user" } }
Login and get a JWT token
Request Body:{ "email": "budi@example.com", "password": "password123" }Response:
{ "success": true, "message": "Login successful", "token": "jwt-token", "user": { "id": "xxx", "email": "budi@example.com", "name": "Budi", "role": "user", "isVerified": "true", "authType": "local", "avatar": "" } }
Get the profile of the logged-in user
Headers:Authorization: Bearer <token>Response:
{ "success": true, "user": { "id": "xxx", "name": "Budi", "email": "budi@example.com", "role": "user" } }
Verify email from token
Response:{ "success": true, "message": "Email successfully verified." }
Get all users (Admin only)
Headers:Authorization: Bearer <admin_token>Response:
{ "success": true, "users": [ { "id": "xxx", "name": "Budi", "email": "budi@example.com", "role": "user" } ] }
Get user details (Admin or the user themselves)
Headers:Authorization: Bearer <token>Response:
{ "success": true, "user": { "id": "xxx", "name": "Budi", "email": "budi@example.com", "role": "user" } }
Update user (Admin or the user themselves)
Headers:Authorization: Bearer <token>Request Body:
{ "name": "Budi Update", "email": "budi@baru.com" }Response:
{ "success": true, "message": "User updated successfully", "user": { "id": "xxx", "name": "Budi Update", "email": "budi@baru.com", "role": "user" } }
Delete user (Admin only)
Headers:Authorization: Bearer <admin_token>Response:
{ "success": true, "message": "User deleted successfully" }
Create a new playlist (Max 10 playlists per user)
Headers:Authorization: Bearer <token>Request Body:
{ "title": "JavaScript Learning Path" }Response:
{ "success": true, "message": "Playlist created successfully", "playlist": { "id": "xxx", "title": "JavaScript Learning Path", "owner": "user_id", "roadmaps": [] } }
Get all playlists of the user
Headers:Authorization: Bearer <token>Response:
{ "success": true, "playlists": [ { "id": "xxx", "title": "JavaScript Learning Path", "owner": "user_id", "roadmaps": [] } ] }
Update playlist (Owner or Admin only)
Headers:Authorization: Bearer <token>Request Body:
{ "title": "Updated JavaScript Learning Path" }Response:
{ "success": true, "message": "Playlist updated successfully", "playlist": { "id": "xxx", "title": "Updated JavaScript Learning Path", "owner": "user_id" } }
Delete playlist (Owner or Admin only)
Headers:Authorization: Bearer <token>Response:
{ "success": true, "message": "Playlist deleted successfully" }
Create a new roadmap in a playlist (Owner or Admin only)
Headers:Authorization: Bearer <token>Request Body:
{ "title": "Beginner" }Response:
{ "success": true, "message": "Roadmap created successfully", "roadmap": { "id": "xxx", "title": "Beginner", "videos": [] } }
Get all roadmaps in a playlist
Headers:Authorization: Bearer <token>Response:
{ "success": true, "roadmaps": [ { "id": "xxx", "title": "Beginner", "videos": [] } ] }
Get a specific roadmap detail
Headers:Authorization: Bearer <token>Response:
{ "success": true, "roadmap": { "id": "xxx", "title": "Beginner", "videos": [ { "videoId": "xyz123", "title": "JavaScript Tutorial for Beginners", "url": "https://youtube.com/watch?v=xyz123", "progress": "Not Started" } ] } }
Update roadmap (Owner or Admin only)
Headers:Authorization: Bearer <token>Request Body:
{ "newTitle": "Beginner Level" }Response:
{ "success": true, "message": "Roadmap updated successfully", "roadmap": { "id": "xxx", "title": "Beginner Level", "videos": [] } }
Delete roadmap (Owner or Admin only)
Headers:Authorization: Bearer <token>Response:
{ "success": true, "message": "Roadmap deleted successfully" }
Search for videos from the YouTube API
Headers:Authorization: Bearer <token>Query Parameters:
q=javascript // search queryResponse:
{ "success": true, "videos": [ { "videoId": "xyz123", "title": "JavaScript Tutorial for Beginners", "description": "Learn JavaScript from scratch", "thumbnail": "https://i.ytimg.com/vi/xyz123/default.jpg", "channelTitle": "Coding Channel", "publishedAt": "2023-01-01T00:00:00Z" } ] }
Add a video to a roadmap (Max 3 videos per roadmap)
Headers:Authorization: Bearer <token>Request Body:
{ "videoData": { "videoId": "xyz123", "videoTitle": "JavaScript Tutorial for Beginners", "videoUrl": "https://youtube.com/watch?v=xyz123" } }Response:
{ "success": true, "message": "Video added successfully", "video": { "videoId": "xyz123", "title": "JavaScript Tutorial for Beginners", "url": "https://youtube.com/watch?v=xyz123", "progress": "Not Started" } }
Update video progress (In Progress/Completed)
Headers:Authorization: Bearer <token>Request Body:
{ "videoId": "xyz123", "progress": "Completed" }Response:
{ "success": true, "message": "Video progress updated successfully", "video": { "videoId": "xyz123", "progress": "Completed" } }
Delete video from roadmap
Headers:Authorization: Bearer <token>Response:
{ "success": true, "message": "Video deleted successfully" }
The following features are planned for future implementation:
All responses are sent in JSON format.