Key Features
This page provides a comprehensive overview of pyjiit's capabilities and features. It describes what the library can do, organized by functional area. For implementation details of individual features, see the Core API Reference. For understanding the underlying architecture, see System Architecture.
Feature Overview
pyjiit provides programmatic access to the JIIT Webportal through a Python API. The library exposes functionality through the Webportal class, which acts as the main interface to all webportal operations. Features are organized into several functional areas:
| Feature Category | Capabilities | Key Methods |
|---|---|---|
| Authentication | Login, session management, token handling | student_login, get_captcha |
| Academic Data | Attendance, registrations, exam schedules | get_attendance, get_registered_subjects_and_faculties |
| Marks & Grades | Exam results, grade cards, SGPA/CGPA | download_marks, get_grade_card, get_sgpa_cgpa |
| Student Info | Bank details, session data | get_student_bank_info |
| Financial | Fees, fines, pending payments | get_fee_summary, get_fines_msc_charges |
| Account Management | Password changes, captcha | set_password, get_captcha |
| Security | Encrypted payloads, secure headers | Automatic via encryption module |
| Error Handling | Type-safe exceptions | APIError, LoginError, SessionExpired, NotLoggedIn |
Sources: pyjiit/wrapper.py1-489 README.rst9-17
Authentication and Session Management
Login System
The library implements a two-phase authentication flow that mirrors the JIIT Webportal's security model. Authentication requires three components:
- Username - Student enrollment number
- Password - Webportal password
- Captcha - Captcha verification object

Sources: pyjiit/wrapper.py111-143 docs/usage.rst30-53
Session Object
Upon successful login, a WebportalSession object is created and stored in Webportal.session. This object contains:
| Attribute | Description | Source Location |
|---|---|---|
token |
JWT bearer token for authenticated requests | Line 53 |
expiry |
Token expiration timestamp | Lines 54-55 |
instituteid |
Institute identifier (e.g., "128") | Line 48 |
memberid |
Student member ID | Line 49 |
clientid |
Client identifier (e.g., "JAYPEE") | Line 57 |
name |
Student name | Line 59 |
userid |
User ID | Line 51 |
The session automatically provides authentication headers via the get_headers() method, which includes the bearer token and a dynamically generated LocalName header for each request.
Sources: pyjiit/wrapper.py38-68
Protected Method Decorator
The @authenticated decorator enforces session requirements for protected methods:

This ensures that methods requiring authentication cannot be called before student_login() is invoked, providing early error detection.
Sources: pyjiit/wrapper.py19-36
Captcha Handling
The library provides two mechanisms for captcha verification:
- Dynamic captcha generation via
get_captcha()- returns aCaptchaobject with base64-encoded image - Static captcha via
pyjiit.default.CAPTCHA- pre-solved captcha that works due to the webportal's captcha implementation not being IP-bound
Sources: pyjiit/wrapper.py145-154 pyjiit/default.py1-10 docs/usage.rst49-52
Academic Data Retrieval
Attendance Management
Attendance queries follow a two-step metadata-then-data pattern:

Key Methods:
-
get_attendance_meta()- ReturnsAttendanceMetawith available headers and semesters- Endpoint:
/StudentClassAttendance/getstudentInforegistrationforattendence - Contains
headerslist andsemesterslist - Helper methods:
latest_header(),latest_semester()
- Endpoint:
-
get_attendance(header, semester)- Returns detailed attendance data- Endpoint:
/StudentClassAttendance/getstudentattendancedetail - Uses encrypted payload serialization
- Note: Response time typically exceeds 10 seconds due to server processing
- Endpoint:
Sources: pyjiit/wrapper.py173-211 docs/usage.rst71-108
Subject Registration Data

Key Methods:
-
get_registered_semesters()- Returns list ofSemesterobjects representing all registered semesters- Endpoint:
/reqsubfaculty/getregistrationList - Each semester has
registration_idandregistration_code
- Endpoint:
-
get_registered_subjects_and_faculties(semester)- ReturnsRegistrationsobject containing:subjects- List ofRegisteredSubjectobjects with faculty, credits, subject detailstotal_credits- Total course credits for the semester- Endpoint:
/reqsubfaculty/getfaculties
Data Model: Each RegisteredSubject includes employee_name, subject_code, subject_desc, credits, subject_component_code (e.g., "L" for lecture, "T" for tutorial), and registration status.
Sources: pyjiit/wrapper.py233-269 pyjiit/registration.py1-44 docs/usage.rst111-133
Exam Events and Schedules

Key Methods:
-
get_semesters_for_exam_events()- Returns semesters that have exam events- Endpoint:
/studentcommonsontroller/getsemestercode-withstudentexamevents
- Endpoint:
-
get_exam_events(semester)- Returns list ofExamEventobjects for a semester- Endpoint:
/studentcommonsontroller/getstudentexamevents - Each event has
exam_event_code,exam_event_desc,exam_event_id
- Endpoint:
-
get_exam_schedule(exam_event)- Returns detailed schedule for an exam event- Endpoint:
/studentsttattview/getstudent-examschedule
- Endpoint:
Sources: pyjiit/wrapper.py273-328 pyjiit/exam.py1-24
Marks and Grade Management
Marks Retrieval

Key Methods:
-
get_semesters_for_marks()- Returns semesters with available marks- Endpoint:
/studentcommonsontroller/getsemestercode-exammarks
- Endpoint:
-
download_marks(semester)- Downloads marks PDF- Endpoint:
/studentsexamview/printstudent-exammarks/{instituteid}/{registration_id}/{registration_code} - Returns raw PDF content as bytes (not JSON response)
- Direct HTTP GET with streaming
- Endpoint:
Sources: pyjiit/wrapper.py331-367
Grade Card and GPA

Key Methods:
-
get_semesters_for_grade_card()- Returns semesters with available grade cards- Endpoint:
/studentgradecard/getregistrationList
- Endpoint:
-
get_grade_card(semester)- Returns grade card data- Internally calls
__get_program_and_branch_id()first - Endpoint:
/studentgradecard/showstudentgradecard
- Internally calls
-
get_sgpa_cgpa(stynumber=0)- Returns SGPA and CGPA datastynumberparameter specifies semester number (0 for all)- Endpoint:
/studentsgpacgpa/getallsemesterdata
Sources: pyjiit/wrapper.py370-438
Financial Information
Fee and Fine Queries
Key Methods:
-
get_fee_summary()- Returns complete fee summary- Endpoint:
/studentfeeledger/loadfeesummary - Provides overview of all fee transactions
- Endpoint:
-
get_fines_msc_charges()- Returns pending fines and miscellaneous charges- Endpoint:
/collectionpendingpayments/getpendingpaymentsdata - Note: Returns "NO APPROVED REQUEST FOUND" error when no pending payments exist
- Application should handle this as a normal case, not an error
- Endpoint:

Sources: pyjiit/wrapper.py441-470
Additional Features
Subject Choices
get_subject_choices(semester)- Returns subject preference/choice data- Endpoint:
/studentchoiceprint/getsubjectpreference - Includes allocated subjects marked with
subjectrunning == "Y"
- Endpoint:
Sources: pyjiit/wrapper.py473-488
Student Bank Information
get_student_bank_info()- Returns student's registered bank details- Endpoint:
/studentbankdetails/getstudentbankinfo - Requires authentication
- Endpoint:
Sources: pyjiit/wrapper.py157-170
Account Management
set_password(old_pswd, new_pswd)- Changes webportal password- Endpoint:
/clxuser/changepassword - Raises
AccountAPIErroron failure - Requires both old and new password confirmation
- Endpoint:
Sources: pyjiit/wrapper.py214-229 docs/usage.rst55-68
Security Features
Automatic Payload Encryption
All sensitive API requests automatically use encrypted payloads via the encryption module:

Key Security Mechanisms:
- Daily Key Rotation - Encryption key changes at 00:00 IST daily
- LocalName Header - Unique per-request obfuscation header
- AES-CBC Encryption - All sensitive payloads encrypted before transmission
- Automatic Serialization - Methods like
student_login,get_attendance,get_registered_semestersautomatically serialize payloads
For detailed security implementation, see Security and Encryption.
Sources: pyjiit/wrapper.py3-14 pyjiit/wrapper.py128-137 pyjiit/wrapper.py207-208
Exception Handling
Exception Hierarchy
pyjiit provides fine-grained exception types for different error scenarios:

Exception Usage by Feature
| Method | Primary Exception | Trigger Condition |
|---|---|---|
student_login |
LoginError |
Invalid credentials or authentication failure |
set_password |
AccountAPIError |
Password change rejection |
All @authenticated methods |
NotLoggedIn |
Called before student_login() |
| All authenticated requests | SessionExpired |
HTTP 401 or expired token |
| All methods | APIError |
Generic API response errors |
Error Detection: The internal __hit() method centralizes error checking:
- HTTP 401 status →
SessionExpired responseStatus != "Success"→ Custom exception (specified by caller) orAPIError
For detailed exception documentation, see Exception Handling.
Sources: pyjiit/wrapper.py82-108 pyjiit/exceptions.py1-31 docs/usage.rst138-142
Feature Map by Endpoint
This diagram maps major features to their corresponding Webportal methods and API endpoints:

Sources: pyjiit/wrapper.py1-489