Changelog¶
- 2025-12-02:
-
User Verification: Added
rejection_reasonto thePOST /user/verification/action/{user_id}/endpoint. When rejecting a user's verification, a reason for the rejection can be provided in the request body. -
2025-11-28:
- Breaking Change: Updated the broadcast functionality to allow targeting both
staffandcandidateroles.- The
target_rolesfield on thePOST /broadcasts/endpoint has been changed from an array of strings to a JSON object. - The new structure is
{ "staff": ["role1", "role2"], "candidate": ["role3", "role4"] }. - This allows for more flexible and targeted communication.
- The
- Broadcast Logs: The
GET /broadcasts/{id}/endpoint response now includes arole_typefield in the logs, which will be eitherstafforcandidate. - 2025-11-19:
- User Verification:
- The
GET /user/verification/status/endpoint now returns a more granular, string-based status:email_not_verified,verified,pending,rejected, ornot_submitted. - The response for a
pendingstatus now includes averification_dataobject with more details. - The
POST /user/verification/action/{user_id}/endpoint now accepts either{"is_approved": true}or{"is_rejected": true}to action a verification request.
- The
- 2025-11-16:
-
Leaderboard: Added
"participated_at"field in Candidte -
2025-11-12:
- New Endpoint: Added
GET /registration/to provide public status on whether candidate and staff registrations are open. -
Removed Endpoint: Removed the
GET /root/endpoint as part of the URL refactoring. -
2025-11-10:
- User Management: Updated
GET /user/list/endpoint with more granular role-based access.moderatorandadminroles can now only view the list of candidates (profile=candidate).managerandsuperadminroles can view candidates, staff (profile=staff), and the generic user list.
- New Feature: Added
GET /user/list/endpoint to list all users with filtering by profile type (stafforcandidate), active status, and search term. This endpoint is available tomoderatorroles and higher. - Dashboard: Added
concluded_examsfield that indicates exams that have passed, which has a sub-fieldparticipationindicatingmissed,not_done, ordone. -
Profile: Added
statusfield to staff and candidate profiles, which is eitheractive,inactive,pending, ordeactivated. -
2025-11-09:
-
New Feature: Added
GET /stats/overview/endpoint to provide an overview of user statistics.- The endpoint is accessible to
moderatorroles and higher. - The data is generated asynchronously and cached for performance.
- If the data is not in the cache, the API returns a
202 Acceptedresponse.
- The endpoint is accessible to
-
2025-11-03:
-
Registration:
- Added
generate_passwordboolean field to the registration endpoints (/register/candidate/and/register/staff/). - If
generate_passwordistrue, thepasswordandpassword2fields are optional. The system will generate a secure password and email it to the user.
- Added
-
2025-11-01:
- Question Management:
- Added
POST /questions/bulk-archive/endpoint for bulk archiving of questions.
- Added
- Account Management:
- Updated
/account-management/{user_id}/endpoint to handlePATCHoperations (multipart). - Now contains
profile_picturefield, which also reflects across endpoint responses with"user"field.
- Updated
-
Exam:
- Now contains
statusfield, carrying any of the following values: draft,scheduled,ongoing,concluded,cancelled
- Now contains
-
2025-10-31
- Exam:
- Contains new fields
levelandstage_display. - Should be used in "Upload Exam" or "Edit Exams".
leveldefaults to1if not provided.- Use case:
Leaderboard
- Paired with stage to give
stage_display. - If two exams in the same stage have the same
level, the latest exam's leaderboard shows up instead and overrides the other from showing up.
- Paired with stage to give
- Contains new fields
- Pagination:
- Now contains more information, such as
has_previous. - Is better structured and puts into a new
"pagination"field for each paginated response.
- Now contains more information, such as
- API consistency:
- Standardized list responses to use the
resultskey instead oflistin theGET /questions/andGET /exams/endpoints.
- Standardized list responses to use the
- Leaderboard
POST /publish-leaderboard/:- Now
POST /leaderboard/publish/and requires no response body. GET /load-leaderboard/:- Now
GET /leaderboard/ - Lists available leaderboards.
- With query params (e.g.
stage=league,level=2), leaderboard for specific exam is loaded. - Includes
exam_details,top_three, andremaining_candidates. - Paginated.
GET /leaderboard/<stage>/<level>/candidate/<candidate_id>/is used to "View Details" of a specific candidate's submissions and performance on for that exam (and leaderboard).- Cached for 6 hours.
-
OTP:
POST /resend-email-otp/:- Now
POST /send-email-otp/and accepts a"resend"field.
-
2025-10-30
- User/profile data
- Profile object (e.g. candidate)
is_verifiedfield is renamed tois_user_verified. - User object (e.g. candidate.user) now contains
is_email_verifiedfield accros endpoints.
- Profile object (e.g. candidate)
-
User verification
is_verifiedis now renamed tois_approved. E.g. Manager approves user verification:"is_approved": true|"is_rejected": true
-
2025-10-29
- Leaderboard
- Breaking Change: Modified the leaderboard generation and retrieval process.
POST /leaderboard/publish/: Now requires no request body to specify which exam's leaderboard to generate and publish. The permission remainsadminand higher.GET /load-leaderboard/: Now fetches leaderboards based on user roles and can retrieve a specific exam's leaderboard using theexam_idquery parameter.- When
exam_idis provided, it returns the paginated list of ranked candidates for that exam. - When
exam_idis not provided, it returns a paginated list of available leaderboard snapshots (metadata only).
- When
- Addition: Added
statusandconcluded_atfields to theExamresponses.
-
Exams
GET /exams/{exam_id}/is now paginated.
-
2025-10-28
- The
metakey in the response ofGET /exams/andGET /questionsendpoints have been renamed toquestion_pool_data. - Implemented automatic revocation of staff registrations.
- If a newly registered staff member does not verify their email within 15 minutes, their account will be automatically deleted.
- This allows the email to be used for registration again.
- This feature does not apply to candidate registrations.
- Questions difficulty
mediumis renamed tomoderate.
Fri, 24th of Oct, 2025¶
- Exam Results & Candidate Details **Renamed
submitted_bytoscore_submitted_by - Candidate Details: Candidate exam records to include detailed
submissioninformation within theexams_takenlist. - Question Management:
Added
POST /questions/{question_id}/exams/endpoint to add/remove questions from exams.
Added POST /questions/bulk-add-to-exams/ endpoint for bulk association of questions with exams.
Tue, 22nd of Oct, 2025¶
- Staff: Added
POST /staff/invite/endpoint.
Wed, 15th of Oct, 2025¶
- API: Updated the response for
GET /questions/to include ametaobject with question counts by difficulty and pagination links. The question list is now under thelistkey. - API: Updated the
questionsfield in the response forGET /exams/{exam_id}/to include ametaobject with question counts by difficulty. - API:
date_created,date_updated, anddate_recordedhave been renamed tocreated_at,updated_at, andrecorded_atacross all endpoints' responses. - API: Updated the response for
GET /candidates/{candidate_id}/to include a more detailedrecordsobject containing performance stats and exam history. - Exam:
GET /exams/now includesscheduled_datein response. - Validation: Increased the
face_idupload limit to 5MB.id_cardandverification_documentremaim at 2MB limit.
Version 0.3.4¶
- API Docs: Added "Feature Walkthroughs & User Stories" section to provide better context for API usage.
- API Docs: Corrected permissions for several endpoints to match the codebase.
- API Docs: Corrected the response payload for the
GET /candidates/{candidate_id}/endpoint.
Version 0.3.3¶
- Breaking Change: Renamed
profile_phototoface_idacross all relevant endpoints and data models to better reflect its purpose in user verification. - API spec: This current API spec can now also be reached at
<base_url>/docs/spec(similar to Swagger).
Version 0.3.2¶
- Registration: Now takes flat rather than nested structure.
- Notifications: WebSocket method now requires
X-Api-KeyandAuthorizationheaders.
Version 0.3.0¶
- API Authentication: All endpoints now require use header
X-Api-Key: <api-key>, which may or may not be used alongsideAuthorization: Bearer <access-token>. - New role: Added
managerrole with alladminpermissions and somesuperadminpermissions. - "Me" Endpoints: Added dedicated endpoints (
/candidates/me/,/staff/me/) for authenticated users to easily retrieve their own profile details. - Login: Response now includes full profile (and not user details alone).
- RBAC: Only
managerandsuperadmincan view staff details.
Version 0.2.0¶
- Base URL is now
https://api.verboheit.org/v1/ - Custom Exception Handling: Introduced custom exception classes for more specific and consistent error responses.
Version 0.1.0¶
- Initial API release
- Complete user management system
- Exam administration features
- Leaderboard functionality
- Role-based access control
Last Updated: November 2025