v0.10.0 — the second API
The second API. Skilljar has two, and until now this server spoke only to v2.
This release adds V1Backend and the first capability served by it — learner progress:
find_learner— look up a learner by email, and get the id both APIs uselist_learner_progress— how far a learner has got in every course they are enrolled inget_learner_progress— one learner, one course, on one domain
Why v1 at all
ADR-002 governs it: v2 owns every capability v2 has; v1 is used only for what v2 lacks. No fallback, no dual-routing — and that is now a passing test rather than a rule, asserting the two backends' method sets are disjoint.
Learner progress qualifies. v2's enrolment record carries score, status and dates but no lesson counts, no credits, no re-enrolment history — so "how far through this course is this learner, in lessons" is answerable only through v1.
Two things probing found that Skilljar's v1 document does not say
Per-lesson progress does not exist. The documented endpoint returns 404 on the live API, and so does every alternative route. Both progress tools say "COUNTS ONLY, NOT WHICH LESSONS" so it cannot be mistaken for missing data.
The by-id fetch resolves by the underlying course, not the publication. A course published to two domains returns the wrong one, with a 200 and nothing to indicate a substitution — 53 of one learner's 54 enrolments matched, which is what made it dangerous. get_learner_progress selects from the listing instead.
Configuration
The v1 capabilities need CSA_SKILLJAR_V1_API_KEY — a separate credential from the v2 client id and secret. Without it those three tools report the variable to set, and the whole v2 surface keeps working.
87 tools, 1074 tests. Python 3.10–3.14, Apache-2.0.