Skip to main content

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, including ids, categories, tags, metadata, availableFrom, and availableUntil
  • Added ids filtering for private and public quiz query endpoints
  • Updated the frontend clients to call /api/v1/quizzes/query without 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.

  • availableFrom and availableUntil inside filters search scheduled quizzes whose availability overlaps the requested window
  • always quizzes are not matched by scheduled-window filters because they do not have an availability window
  • GET /api/v1/quizzes now exposes both available_from and available_until query 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 window
  • status: "available": events active at the current time

Event list and search responses now include quiz context fields for client-side grouping and display:

  • quiz_category
  • quiz_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_answer now supports up to 1500 characters
  • Question explanation now supports up to 1500 characters
  • Question template correct_answer now supports up to 1500 characters
  • Added a database migration to align stored limits with API validation

Breaking Changes

  • POST /api/v1/quizzes/query no longer accepts pagination or quiz filters in URL query params. Send them in the JSON body instead.