Version 1.0.1
Release Date: May 5, 2026
Quiz Query API Cleanup
POST /api/v1/quizzes/query now uses a body-only request shape for pagination and filters. This avoids long URLs and keeps richer quiz filters in one JSON payload.
What Changed
- Moved private quiz query pagination from URL query params into the request body:
page,perPage - Moved private quiz query filters from URL query params into the request body:
status,accessType,availability,accessCode - Kept exact filters under
filters, includingids,categories,tags,metadata,availableFrom, andavailableUntil - Added
idsfiltering for private and public quiz query endpoints - Updated the frontend clients to call
/api/v1/quizzes/querywithout query-string filters
Before
POST /api/v1/quizzes/query?page=1&perPage=100&access_type=private&status=published
{
"query": "exam"
}
After
POST /api/v1/quizzes/query
{
"page": 1,
"perPage": 100,
"status": "published",
"accessType": "private",
"query": "exam",
"filters": {
"ids": [12, 18],
"metadata": {
"assign_to": "student:214"
},
"availableFrom": "2026-05-05T10:00:00Z",
"availableUntil": "2026-05-05T10:00:00Z"
}
}
Scheduled Availability Filters
Quiz query availability filters now describe and use scheduled-window search semantics more clearly.
availableFromandavailableUntilinsidefilterssearch scheduled quizzes whose availability overlaps the requested windowalwaysquizzes are not matched by scheduled-window filters because they do not have an availability windowGET /api/v1/quizzesnow exposes bothavailable_fromandavailable_untilquery params in Scalar docs
Event Search IDs Filter
POST /api/v1/events/search now supports filtering events by ID list in the JSON body.
{
"ids": [
"018f6c2a-8d28-7b4d-9c2b-f2b6c0b85a44",
"018f6c2a-8d28-7b4d-9c2b-f2b6c0b85a45"
],
"page": 1,
"perPage": 20
}
Event search also keeps its existing date overlap behavior:
from+to: events overlapping the requested windowstatus: "available": events active at the current time
Event list and search responses now include quiz context fields for client-side grouping and display:
quiz_categoryquiz_tags
Metadata Filter Improvements
Quiz and event metadata filters now support a single string lookup against both scalar and array metadata values.
For example, this filter:
{
"metadata": {
"assign_to": "student:214"
}
}
matches either of these metadata shapes:
{ "assign_to": "student:214" }
{ "assign_to": ["student:214", "class:139"] }
Question Validation Limits
Question answer rubric and explanation limits were expanded for longer instructor guidance.
- Question
correct_answernow supports up to 1500 characters - Question
explanationnow supports up to 1500 characters - Question template
correct_answernow supports up to 1500 characters - Added a database migration to align stored limits with API validation
Breaking Changes
POST /api/v1/quizzes/queryno longer accepts pagination or quiz filters in URL query params. Send them in the JSON body instead.