Skip to main content
This page tracks notable changes to the public MyUstadia API. The full source-of-truth lives in the FastAPI app and is mirrored to this site automatically. The OpenAPI spec itself is regenerated on every push to the mahara backend’s main branch and lands here as a PR titled docs(api): refresh openapi spec from mahara@<sha>. Browse the API Reference for current endpoint shapes.

How to read this page

  • Breaking entries change request or response shapes in ways that require client updates
  • Added entries introduce new endpoints, fields, or behaviors
  • Changed entries adjust behavior or wording without breaking existing clients
  • Fixed entries are bug fixes that align actual behavior with documented behavior

Versioning

The current API version is v1 (path prefix /api/v1/). Breaking changes will introduce /api/v2/ and the old version will remain operational for at least 12 months.

History

Entries below are added at each notable backend release. The team will append to this page over time.

2026-07

Breaking

  • is_unlimited and metered_billing_enabled removed from GET /api/v1/billing. Every account is now always metered; there is no unlimited plan and no enforcement flag. The quota_seconds block gains over_quota (boolean): true when remaining seconds are at or below the start floor, at which point new course launches and preset creation return 429 quota_exceeded until the quota is raised. Clients reading the removed keys should switch to over_quota and percent_consumed.

Added

  • English questionnaire. The preset questionnaire and course brief are now fully available in English at parity with French: pass ?language=en (default fr) on the questions/* and brief/* endpoints. Question prompts, help text, answer option labels, and structured field labels all localize.

2026-06 (v2 launch)

Added

  • Preset terminology. Courses are now created under a preset (one per client company or visual theme). The preset holds the brand, slide style, voice style, and the company sales-profile questionnaire. Two preset types are supported: company (default, full profile) and theme (branding only, no questionnaire).
  • Seconds-based billing quota. GET /api/v1/billing returns a quota_seconds block with quota_seconds, consumed_seconds, remaining_seconds, percent_consumed (0-100), is_unlimited, and metered_billing_enabled. There is no free tier; all generation consumes from the seconds bucket. See Billing.
  • Review checkpoints. The generation pipeline now exposes fine-grained review gates: source_review, outline_review, slide_review, audio_review, quiz_review, module_video_review, preset_source_review, brand_review. Each can be set to auto-approve (skip) or left as a manual gate at account level (PUT /api/v1/account/review-settings) or per course (GET /api/v1/courses/{id}/review-settings). See Review Checkpoints.
  • Sandbox mode. sk_test_ keys enable a no-cost integration environment that returns pre-built demo data without running real generation. Sandbox courses never consume quota. See Sandbox.
  • external_ref idempotency. Providing the same external_ref on a second course-create returns the existing course rather than creating a duplicate.
  • Brief question skip. Optional (non-blocking) brief questions can be skipped by setting "skip": true in the answers payload.

Changed

  • Preset brand/generate is synchronous. Unlike slide-style/generate and voice-style/generate (which return 202 and require polling), brand/generate returns the artifact directly in the response. Do not poll setup-status after calling brand/generate.
  • slide-style and voice-style are optional. A preset reaches ready on brand alone (plus questionnaire for company presets). Slide and voice style generation are refinements, not blockers.

Note

GET /api/v1/courses/{id}/quiz/final and POST /api/v1/courses/{id}/quiz/grade-final exist in the API but are not part of the v1 contract. Their behavior may change before the contract is finalized.