This document provides sample API requests for testing all new features.
All protected routes require JWT token in header:
Authorization: Bearer <your_jwt_token>
POST http://localhost:4000/api/v1/stripe/create-checkout-session
Authorization: Bearer <token>
Content-Type: application/json
{
"coursesId": ["course_id_1", "course_id_2"],
"couponCode": "SAVE20" // optional
}POST http://localhost:4000/api/v1/stripe/verify
Authorization: Bearer <token>
Content-Type: application/json
{
"sessionId": "cs_test_xxx"
}GET http://localhost:4000/api/v1/stripe/history
Authorization: Bearer <token>GET http://localhost:4000/api/v1/cart
Authorization: Bearer <token>POST http://localhost:4000/api/v1/cart/add
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id_here"
}DELETE http://localhost:4000/api/v1/cart/remove
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id_here"
}DELETE http://localhost:4000/api/v1/cart/clear
Authorization: Bearer <token>GET http://localhost:4000/api/v1/wishlist
Authorization: Bearer <token>POST http://localhost:4000/api/v1/wishlist/toggle
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id_here"
}POST http://localhost:4000/api/v1/quiz/create
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id",
"subSectionId": "lecture_id",
"title": "React Basics Quiz",
"description": "Test your React knowledge",
"questions": [
{
"questionText": "What is JSX?",
"options": ["JavaScript XML", "Just X", "Java Syntax", "None"],
"correctAnswer": 0,
"points": 10
},
{
"questionText": "What is useState?",
"options": ["A hook", "A function", "A class", "A component"],
"correctAnswer": 0,
"points": 10
}
],
"passingScore": 60,
"duration": 30,
"attemptLimit": 3
}GET http://localhost:4000/api/v1/quiz/<quiz_id>
Authorization: Bearer <token>POST http://localhost:4000/api/v1/quiz/submit
Authorization: Bearer <token>
Content-Type: application/json
{
"quizId": "quiz_id",
"answers": [
{
"questionIndex": 0,
"selectedAnswer": 0
},
{
"questionIndex": 1,
"selectedAnswer": 0
}
],
"timeTaken": 300
}GET http://localhost:4000/api/v1/quiz/results/<quiz_id>
Authorization: Bearer <token>POST http://localhost:4000/api/v1/discussion/create
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id",
"subSectionId": "lecture_id",
"content": "How do I implement state management?",
"parentId": null // null for new thread, or discussion_id for reply
}GET http://localhost:4000/api/v1/discussion?subSectionId=<lecture_id>
Authorization: Bearer <token>GET http://localhost:4000/api/v1/discussion/<discussion_id>/replies
Authorization: Bearer <token>POST http://localhost:4000/api/v1/discussion/<discussion_id>/like
Authorization: Bearer <token>POST http://localhost:4000/api/v1/discussion/<discussion_id>/pin
Authorization: Bearer <token>POST http://localhost:4000/api/v1/certificate/generate
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id"
}GET http://localhost:4000/api/v1/certificate/my-certificates
Authorization: Bearer <token>GET http://localhost:4000/api/v1/certificate/verify/<certificate_id>GET http://localhost:4000/api/v1/certificate/download/<certificate_id>
Authorization: Bearer <token>GET http://localhost:4000/api/v1/analytics/instructor
Authorization: Bearer <token>GET http://localhost:4000/api/v1/analytics/course/<course_id>
Authorization: Bearer <token>GET http://localhost:4000/api/v1/admin/analytics
Authorization: Bearer <token>GET http://localhost:4000/api/v1/admin/courses/pending
Authorization: Bearer <token>PUT http://localhost:4000/api/v1/admin/courses/approve/<course_id>
Authorization: Bearer <token>PUT http://localhost:4000/api/v1/admin/courses/reject/<course_id>
Authorization: Bearer <token>
Content-Type: application/json
{
"reason": "Course content needs improvement in module 3."
}PUT http://localhost:4000/api/v1/admin/courses/disable/<course_id>
Authorization: Bearer <token>DELETE http://localhost:4000/api/v1/admin/reviews/<review_id>
Authorization: Bearer <token>GET http://localhost:4000/api/v1/admin/users?role=student&page=1&limit=20
Authorization: Bearer <token>PUT http://localhost:4000/api/v1/admin/users/<user_id>/toggle-status
Authorization: Bearer <token>POST http://localhost:4000/api/v1/course/createRating
Authorization: Bearer <token>
Content-Type: application/json
{
"courseId": "course_id",
"rating": 5,
"review": "Excellent course! Learned a lot."
}GET http://localhost:4000/api/v1/course/getReviews/<course_id>PUT http://localhost:4000/api/v1/course/updateReview/<review_id>
Authorization: Bearer <token>
Content-Type: application/json
{
"rating": 4,
"review": "Updated: Very good course."
}DELETE http://localhost:4000/api/v1/course/deleteReview/<review_id>
Authorization: Bearer <token>POST http://localhost:4000/api/v1/coupon/new
Authorization: Bearer <token>
Content-Type: application/json
{
"code": "SAVE20",
"discountPercent": 20,
"discountType": "percent",
"expiryDate": "2026-12-31",
"maxUsage": 100,
"minPurchaseAmount": 50,
"isActive": true
}GET http://localhost:4000/api/v1/coupon/applyDiscount?coupon=SAVE20&amount=100&courseId=xxx{
"baseUrl": "http://localhost:4000/api/v1",
"token": "your_jwt_token_here"
}Authorization: Bearer {{token}}
Content-Type: application/json
Save requests as a Postman collection for easy testing.
// Student
{
"email": "student@test.com",
"password": "password123",
"accountType": "student"
}
// Instructor
{
"email": "instructor@test.com",
"password": "password123",
"accountType": "instructor"
}
// Admin
{
"email": "admin@test.com",
"password": "password123",
"accountType": "admin"
}Card Number: 4242 4242 4242 4242
Expiry: Any future date (e.g., 12/28)
CVC: Any 3 digits (e.g., 123)
{
"success": true,
"message": "Operation successful",
"data": { /* response data */ }
}{
"success": false,
"message": "Error message here"
}-
Setup:
- Start backend server
- Get JWT token (login)
- Set token in headers
-
Test Cart Flow:
GET /cart → Add course → GET /cart → Remove → Clear -
Test Wishlist Flow:
GET /wishlist → Toggle course → GET /wishlist -
Test Payment Flow:
Add to cart → Create checkout → Pay → Verify → Check enrollment -
Test Quiz Flow:
Create quiz → Get quiz → Submit → Get results -
Test Discussion Flow:
Create thread → Reply → Like → Pin
Monitor terminal for errors and request logs.
Use MongoDB Compass to check data creation.
Use Stripe CLI to test webhook locally:
stripe listen --forward-to localhost:4000/api/v1/stripe/webhookVerify all .env variables are set correctly.
- Stripe Testing: https://stripe.com/docs/testing
- MongoDB Queries: https://www.mongodb.com/docs/manual/
- Postman Docs: https://learning.postman.com/
Happy Testing! 🧪