API Documentation
            Base URL: 
Authentication: Session-based (GFAVIP Simple SSO)
        https://learning.gfavip.comAuthentication: Session-based (GFAVIP Simple SSO)
Authentication
GET /login
            Redirects to GFAVIP Wallet SSO for authentication
Response:
Redirects to: wallet.gfavip.com/api/auth/sso/authorize
GET /callback
            SSO callback endpoint - handles user registration/login
Query Parameters:
- user_id- SSO user ID
- email- User email
- username- Username
- tier- Membership tier (free/paid/team/superadmin)
- token- SSO token
Courses
GET /api/courses
            List all courses
Response:
[
  {
    "id": 1,
    "title": "Course Title",
    "description": "Course description",
    "instructor_id": 2,
    "instructor_name": "Instructor Name",
    "min_completion_pct": 80,
    "certificate_toggle": true
  }
]
            POST /api/courses
                Requires: Instructor/Admin
            Create a new course
Request Body:
{
  "title": "Course Title",
  "description": "Course description",
  "min_completion_pct": 80,
  "certificate_toggle": true
}
                Response:
{
  "id": 1,
  "message": "Course created successfully"
}
            GET /api/courses/:id
            Get course details with modules and lessons
Response:
{
  "id": 1,
  "title": "Course Title",
  "modules": [
    {
      "id": 1,
      "title": "Module 1",
      "lessons": [
        {
          "id": 1,
          "title": "Lesson 1",
          "video_url": "https://...",
          "attachment_url1": "https://..."
        }
      ]
    }
  ]
}
            Enrollment
POST /api/student/enroll
                Requires: Login
            Enroll in a course (handles pricing & payment)
Query Parameters:
?course_id=1
Response (Free Course):
{
  "message": "Enrolled successfully"
}
                Response (Paid Course):
{
  "checkout_url": "https://checkout.gfavip.com/pay/..."
}
            Admin Endpoints
GET /api/admin/applications
                Requires: Admin
            Get instructor applications
Query Parameters:
?status=pending|approved|rejected
PUT /api/admin/applications/:id
                Requires: Admin
            Approve/reject instructor application
Request Body:
{
  "status": "approved" | "rejected"
}
            Webhooks
POST /webhooks/payment
            Payment webhook from checkout.gfavip.com
Headers:
X-Webhook-Signature: HMAC-SHA256 signature
Events:
- invoice.paid- Auto-enrolls student
- invoice.failed- Cancels enrollment
- invoice.expired- Cancels enrollment
- invoice.cancelled- Cancels enrollment