openapi: 3.0.3 info: title: Seeker Of Light API version: 1.0.0 description: A structured learning platform for spiritual growth and personal development paths: /accounts/change_password/: put: operationId: accounts_change_password_update description: An endpoint for changing password. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/PasswordChange' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PasswordChange' multipart/form-data: schema: $ref: '#/components/schemas/PasswordChange' required: true security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PasswordChange' description: '' patch: operationId: accounts_change_password_partial_update description: An endpoint for changing password. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedPasswordChange' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedPasswordChange' multipart/form-data: schema: $ref: '#/components/schemas/PatchedPasswordChange' security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PasswordChange' description: '' /accounts/confirm_email/{uidb64}/{token}/: post: operationId: accounts_confirm_email_create parameters: - in: path name: token schema: type: string required: true - in: path name: uidb64 schema: type: string required: true tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/EmailVerification' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/EmailVerification' multipart/form-data: schema: $ref: '#/components/schemas/EmailVerification' required: true security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/EmailVerification' description: '' /accounts/login/: post: operationId: accounts_login_create description: |- Takes a set of user credentials and returns an access and refresh JSON web token pair to prove the authentication of those credentials. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenObtainPair' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenObtainPair' multipart/form-data: schema: $ref: '#/components/schemas/TokenObtainPair' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenObtainPair' description: '' /accounts/profile/: get: operationId: accounts_profile_retrieve description: An endpoint for the user to view and update their profile. tags: - accounts security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserProfile' description: '' put: operationId: accounts_profile_update description: An endpoint for the user to view and update their profile. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/UserProfile' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UserProfile' multipart/form-data: schema: $ref: '#/components/schemas/UserProfile' required: true security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserProfile' description: '' patch: operationId: accounts_profile_partial_update description: An endpoint for the user to view and update their profile. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedUserProfile' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedUserProfile' multipart/form-data: schema: $ref: '#/components/schemas/PatchedUserProfile' security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserProfile' description: '' /accounts/refresh/: post: operationId: accounts_refresh_create description: |- Takes a refresh type JSON web token and returns an access type JSON web token if the refresh token is valid. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/TokenRefresh' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TokenRefresh' multipart/form-data: schema: $ref: '#/components/schemas/TokenRefresh' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenRefresh' description: '' /accounts/register/: post: operationId: accounts_register_create description: User registration view using CreateAPIView for conciseness. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/UserRegistration' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UserRegistration' multipart/form-data: schema: $ref: '#/components/schemas/UserRegistration' required: true security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '201': content: application/json: schema: $ref: '#/components/schemas/UserRegistration' description: '' /accounts/reset_password/: post: operationId: accounts_reset_password_create description: An endpoint for initiating a password reset. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/PasswordReset' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PasswordReset' multipart/form-data: schema: $ref: '#/components/schemas/PasswordReset' required: true security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PasswordReset' description: '' /accounts/reset_password/confirm/{uidb64}/{token}: post: operationId: accounts_reset_password_confirm_create description: View for confirming a password reset. parameters: - in: path name: token schema: type: string required: true - in: path name: uidb64 schema: type: string required: true tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/PasswordResetConfirm' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PasswordResetConfirm' multipart/form-data: schema: $ref: '#/components/schemas/PasswordResetConfirm' required: true security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PasswordResetConfirm' description: '' /content/bookmarks/: get: operationId: content_bookmarks_list tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Bookmark' description: '' /content/lessons/{id}/: get: operationId: content_lessons_retrieve description: Retrieve lesson details with user progress parameters: - in: path name: id schema: type: integer required: true tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Lesson' description: '' /content/levels/: get: operationId: content_levels_list description: List active levels with unlock status tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Level' description: '' /content/levels/{id}/: get: operationId: content_levels_retrieve description: Retrieve single level details parameters: - in: path name: id schema: type: integer required: true tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/Level' description: '' /content/levels/{id}/lessons/: get: operationId: content_levels_lessons_list description: List lessons for a specific level parameters: - in: path name: id schema: type: integer required: true tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] - {} responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Lesson' description: '' /content/progress/{lesson_id}/: post: operationId: content_progress_create description: Create or update user progress for a lesson parameters: - in: path name: lesson_id schema: type: integer required: true tags: - content requestBody: content: application/json: schema: $ref: '#/components/schemas/UserProgress' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UserProgress' multipart/form-data: schema: $ref: '#/components/schemas/UserProgress' security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/UserProgress' description: '' put: operationId: content_progress_update description: Create or update user progress for a lesson parameters: - in: path name: lesson_id schema: type: integer required: true tags: - content requestBody: content: application/json: schema: $ref: '#/components/schemas/UserProgress' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UserProgress' multipart/form-data: schema: $ref: '#/components/schemas/UserProgress' security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserProgress' description: '' patch: operationId: content_progress_partial_update description: Create or update user progress for a lesson parameters: - in: path name: lesson_id schema: type: integer required: true tags: - content requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedUserProgress' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedUserProgress' multipart/form-data: schema: $ref: '#/components/schemas/PatchedUserProgress' security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserProgress' description: '' /content/progress/next/: get: operationId: content_progress_next_retrieve description: Get user's next recommended lesson tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Level' description: '' /content/progress/summary/: get: operationId: content_progress_summary_list description: Get user's progress summary across all levels tags: - content security: - jwtAuth: [] - tokenAuth: [] - cookieAuth: [] responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/UserLevelProgress' description: '' components: schemas: Bookmark: type: object properties: id: type: integer readOnly: true title: type: string description: Lesson title maxLength: 100 content: type: string description: Main content (HTML/text or file reference) order_index: type: integer maximum: 9223372036854775807 minimum: 0 format: int64 description: Order within level (1-based index) required: - content - id - order_index - title ContentTypeEnum: enum: - text - video - quiz type: string description: |- * `text` - Text Content * `video` - Video Lesson * `quiz` - Interactive Quiz CountryEnum: enum: - AF - AX - AL - DZ - AS - AD - AO - AI - AQ - AG - AR - AM - AW - AU - AT - AZ - BS - BH - BD - BB - BY - BE - BZ - BJ - BM - BT - BO - BQ - BA - BW - BV - BR - IO - BN - BG - BF - BI - CV - KH - CM - CA - KY - CF - TD - CL - CN - CX - CC - CO - KM - CG - CD - CK - CR - CI - HR - CU - CW - CY - CZ - DK - DJ - DM - DO - EC - EG - SV - GQ - ER - EE - SZ - ET - FK - FO - FJ - FI - FR - GF - PF - TF - GA - GM - GE - DE - GH - GI - GR - GL - GD - GP - GU - GT - GG - GN - GW - GY - HT - HM - VA - HN - HK - HU - IS - IN - ID - IR - IQ - IE - IM - IL - IT - JM - JP - JE - JO - KZ - KE - KI - KW - KG - LA - LV - LB - LS - LR - LY - LI - LT - LU - MO - MG - MW - MY - MV - ML - MT - MH - MQ - MR - MU - YT - MX - FM - MD - MC - MN - ME - MS - MA - MZ - MM - NA - NR - NP - NL - NC - NZ - NI - NE - NG - NU - NF - KP - MK - MP - 'NO' - OM - PK - PW - PS - PA - PG - PY - PE - PH - PN - PL - PT - PR - QA - RE - RO - RU - RW - BL - SH - KN - LC - MF - PM - VC - WS - SM - ST - SA - SN - RS - SC - SL - SG - SX - SK - SI - SB - SO - ZA - GS - KR - SS - ES - LK - SD - SR - SJ - SE - CH - SY - TW - TJ - TZ - TH - TL - TG - TK - TO - TT - TN - TR - TM - TC - TV - UG - UA - AE - GB - UM - US - UY - UZ - VU - VE - VN - VG - VI - WF - EH - YE - ZM - ZW type: string description: |- * `AF` - Afghanistan * `AX` - Åland Islands * `AL` - Albania * `DZ` - Algeria * `AS` - American Samoa * `AD` - Andorra * `AO` - Angola * `AI` - Anguilla * `AQ` - Antarctica * `AG` - Antigua and Barbuda * `AR` - Argentina * `AM` - Armenia * `AW` - Aruba * `AU` - Australia * `AT` - Austria * `AZ` - Azerbaijan * `BS` - Bahamas * `BH` - Bahrain * `BD` - Bangladesh * `BB` - Barbados * `BY` - Belarus * `BE` - Belgium * `BZ` - Belize * `BJ` - Benin * `BM` - Bermuda * `BT` - Bhutan * `BO` - Bolivia * `BQ` - Bonaire, Sint Eustatius and Saba * `BA` - Bosnia and Herzegovina * `BW` - Botswana * `BV` - Bouvet Island * `BR` - Brazil * `IO` - British Indian Ocean Territory * `BN` - Brunei * `BG` - Bulgaria * `BF` - Burkina Faso * `BI` - Burundi * `CV` - Cabo Verde * `KH` - Cambodia * `CM` - Cameroon * `CA` - Canada * `KY` - Cayman Islands * `CF` - Central African Republic * `TD` - Chad * `CL` - Chile * `CN` - China * `CX` - Christmas Island * `CC` - Cocos (Keeling) Islands * `CO` - Colombia * `KM` - Comoros * `CG` - Congo * `CD` - Congo (the Democratic Republic of the) * `CK` - Cook Islands * `CR` - Costa Rica * `CI` - Côte d'Ivoire * `HR` - Croatia * `CU` - Cuba * `CW` - Curaçao * `CY` - Cyprus * `CZ` - Czechia * `DK` - Denmark * `DJ` - Djibouti * `DM` - Dominica * `DO` - Dominican Republic * `EC` - Ecuador * `EG` - Egypt * `SV` - El Salvador * `GQ` - Equatorial Guinea * `ER` - Eritrea * `EE` - Estonia * `SZ` - Eswatini * `ET` - Ethiopia * `FK` - Falkland Islands (Malvinas) * `FO` - Faroe Islands * `FJ` - Fiji * `FI` - Finland * `FR` - France * `GF` - French Guiana * `PF` - French Polynesia * `TF` - French Southern Territories * `GA` - Gabon * `GM` - Gambia * `GE` - Georgia * `DE` - Germany * `GH` - Ghana * `GI` - Gibraltar * `GR` - Greece * `GL` - Greenland * `GD` - Grenada * `GP` - Guadeloupe * `GU` - Guam * `GT` - Guatemala * `GG` - Guernsey * `GN` - Guinea * `GW` - Guinea-Bissau * `GY` - Guyana * `HT` - Haiti * `HM` - Heard Island and McDonald Islands * `VA` - Holy See * `HN` - Honduras * `HK` - Hong Kong * `HU` - Hungary * `IS` - Iceland * `IN` - India * `ID` - Indonesia * `IR` - Iran * `IQ` - Iraq * `IE` - Ireland * `IM` - Isle of Man * `IL` - Israel * `IT` - Italy * `JM` - Jamaica * `JP` - Japan * `JE` - Jersey * `JO` - Jordan * `KZ` - Kazakhstan * `KE` - Kenya * `KI` - Kiribati * `KW` - Kuwait * `KG` - Kyrgyzstan * `LA` - Laos * `LV` - Latvia * `LB` - Lebanon * `LS` - Lesotho * `LR` - Liberia * `LY` - Libya * `LI` - Liechtenstein * `LT` - Lithuania * `LU` - Luxembourg * `MO` - Macao * `MG` - Madagascar * `MW` - Malawi * `MY` - Malaysia * `MV` - Maldives * `ML` - Mali * `MT` - Malta * `MH` - Marshall Islands * `MQ` - Martinique * `MR` - Mauritania * `MU` - Mauritius * `YT` - Mayotte * `MX` - Mexico * `FM` - Micronesia * `MD` - Moldova * `MC` - Monaco * `MN` - Mongolia * `ME` - Montenegro * `MS` - Montserrat * `MA` - Morocco * `MZ` - Mozambique * `MM` - Myanmar * `NA` - Namibia * `NR` - Nauru * `NP` - Nepal * `NL` - Netherlands * `NC` - New Caledonia * `NZ` - New Zealand * `NI` - Nicaragua * `NE` - Niger * `NG` - Nigeria * `NU` - Niue * `NF` - Norfolk Island * `KP` - North Korea * `MK` - North Macedonia * `MP` - Northern Mariana Islands * `NO` - Norway * `OM` - Oman * `PK` - Pakistan * `PW` - Palau * `PS` - Palestine, State of * `PA` - Panama * `PG` - Papua New Guinea * `PY` - Paraguay * `PE` - Peru * `PH` - Philippines * `PN` - Pitcairn * `PL` - Poland * `PT` - Portugal * `PR` - Puerto Rico * `QA` - Qatar * `RE` - Réunion * `RO` - Romania * `RU` - Russia * `RW` - Rwanda * `BL` - Saint Barthélemy * `SH` - Saint Helena, Ascension and Tristan da Cunha * `KN` - Saint Kitts and Nevis * `LC` - Saint Lucia * `MF` - Saint Martin (French part) * `PM` - Saint Pierre and Miquelon * `VC` - Saint Vincent and the Grenadines * `WS` - Samoa * `SM` - San Marino * `ST` - Sao Tome and Principe * `SA` - Saudi Arabia * `SN` - Senegal * `RS` - Serbia * `SC` - Seychelles * `SL` - Sierra Leone * `SG` - Singapore * `SX` - Sint Maarten (Dutch part) * `SK` - Slovakia * `SI` - Slovenia * `SB` - Solomon Islands * `SO` - Somalia * `ZA` - South Africa * `GS` - South Georgia and the South Sandwich Islands * `KR` - South Korea * `SS` - South Sudan * `ES` - Spain * `LK` - Sri Lanka * `SD` - Sudan * `SR` - Suriname * `SJ` - Svalbard and Jan Mayen * `SE` - Sweden * `CH` - Switzerland * `SY` - Syria * `TW` - Taiwan * `TJ` - Tajikistan * `TZ` - Tanzania * `TH` - Thailand * `TL` - Timor-Leste * `TG` - Togo * `TK` - Tokelau * `TO` - Tonga * `TT` - Trinidad and Tobago * `TN` - Tunisia * `TR` - Türkiye * `TM` - Turkmenistan * `TC` - Turks and Caicos Islands * `TV` - Tuvalu * `UG` - Uganda * `UA` - Ukraine * `AE` - United Arab Emirates * `GB` - United Kingdom * `UM` - United States Minor Outlying Islands * `US` - United States of America * `UY` - Uruguay * `UZ` - Uzbekistan * `VU` - Vanuatu * `VE` - Venezuela * `VN` - Vietnam * `VG` - Virgin Islands (British) * `VI` - Virgin Islands (U.S.) * `WF` - Wallis and Futuna * `EH` - Western Sahara * `YE` - Yemen * `ZM` - Zambia * `ZW` - Zimbabwe EmailVerification: type: object properties: email: type: string format: email required: - email Lesson: type: object properties: id: type: integer readOnly: true title: type: string description: Lesson title maxLength: 100 content: type: string description: Main content (HTML/text or file reference) content_type: allOf: - $ref: '#/components/schemas/ContentTypeEnum' description: |- Type of lesson content * `text` - Text Content * `video` - Video Lesson * `quiz` - Interactive Quiz duration: type: integer maximum: 9223372036854775807 minimum: 0 format: int64 nullable: true description: Estimated completion time (minutes) order_index: type: integer maximum: 9223372036854775807 minimum: 0 format: int64 description: Order within level (1-based index) video: type: string format: uri nullable: true maxLength: 250 user_progress: type: integer readOnly: true required: - content - id - order_index - title - user_progress Level: type: object properties: id: type: integer readOnly: true title: type: string description: Level title (e.g. 'Beginner', 'Intermediate') maxLength: 100 description: type: string nullable: true description: Brief overview of what this level covers order_index: type: integer maximum: 9223372036854775807 minimum: 0 format: int64 description: Order position (1-based index) is_active: type: boolean description: Is this level publicly accessible? unlock_threshold: type: integer maximum: 9223372036854775807 minimum: 0 format: int64 description: Minimum completed lessons from previous level to unlock is_unlocked: type: boolean readOnly: true required: - id - is_unlocked - order_index - title PasswordChange: type: object description: Serializer for password change endpoint. properties: old_password: type: string writeOnly: true new_password: type: string writeOnly: true new_password2: type: string writeOnly: true required: - new_password - new_password2 - old_password PasswordReset: type: object description: Serializer for requesting a password reset e-mail. properties: email: type: string format: email required: - email PasswordResetConfirm: type: object description: Serializer for confirming a password reset. properties: new_password: type: string new_password2: type: string required: - new_password - new_password2 PatchedPasswordChange: type: object description: Serializer for password change endpoint. properties: old_password: type: string writeOnly: true new_password: type: string writeOnly: true new_password2: type: string writeOnly: true PatchedUserProfile: type: object description: Serializer for user profile object. properties: id: type: integer readOnly: true email: type: string format: email readOnly: true title: Email address first_name: type: string maxLength: 30 last_name: type: string maxLength: 30 date_of_birth: type: string format: date nullable: true country: $ref: '#/components/schemas/CountryEnum' PatchedUserProgress: type: object properties: is_completed: type: boolean completed_at: type: string format: date-time readOnly: true nullable: true last_accessed: type: string format: date-time readOnly: true bookmarked: type: boolean TokenObtainPair: type: object properties: email: type: string writeOnly: true password: type: string writeOnly: true access: type: string readOnly: true refresh: type: string readOnly: true required: - access - email - password - refresh TokenRefresh: type: object properties: access: type: string readOnly: true refresh: type: string writeOnly: true required: - access - refresh UserLevelProgress: type: object properties: level_id: type: integer completed: type: integer total: type: integer percentage: type: integer required: - completed - level_id - percentage - total UserProfile: type: object description: Serializer for user profile object. properties: id: type: integer readOnly: true email: type: string format: email readOnly: true title: Email address first_name: type: string maxLength: 30 last_name: type: string maxLength: 30 date_of_birth: type: string format: date nullable: true country: $ref: '#/components/schemas/CountryEnum' required: - country - email - first_name - id - last_name UserProgress: type: object properties: is_completed: type: boolean completed_at: type: string format: date-time readOnly: true nullable: true last_accessed: type: string format: date-time readOnly: true bookmarked: type: boolean required: - completed_at - last_accessed UserRegistration: type: object properties: email: type: string format: email title: Email address maxLength: 254 password: type: string writeOnly: true maxLength: 128 password2: type: string writeOnly: true first_name: type: string maxLength: 30 last_name: type: string maxLength: 30 required: - email - first_name - last_name - password - password2 securitySchemes: cookieAuth: type: apiKey in: cookie name: sessionid jwtAuth: type: http scheme: bearer bearerFormat: JWT tokenAuth: type: apiKey in: header name: Authorization description: Token-based authentication with required prefix "Token"