iblai-api-milestone
Read and write an organization's catalog milestones: completion records for courses, resources, programs, and pathways, and skill points scoped to a block, a course, the platform, or a user (with bulk and group updates). Use when querying or recording user progress and skill-point totals.
Auth & conventions
- Base URL:
https://api.iblai.app/dm— these are Data Manager (DM) endpoints, so the/dmprefix is required; the/api/catalog/milestones/…paths below are appended to it (e.g.https://api.iblai.app/dm/api/catalog/milestones/completions/course/manage/). - Header:
Authorization: Api-Token $IBLAI_API_KEYon every request. - Path vars:
{org}=$IBLAI_ORG(a.k.a.platform_key),{username}=$IBLAI_USERNAME. - DELETE is destructive — confirm with the user first.
- Not connected yet? Run
/iblai-api-loginfirst to populateIBLAI_ORG,IBLAI_USERNAME, andIBLAI_API_KEY.
Reads
Completions
Course
- GET
/api/catalog/milestones/completions/course/manage/— retrieve one course completion. Params:course_id,user_id. Returnscompletion_percentage,completed,completion_date,completion_data, grading fields. - GET
/api/catalog/milestones/completions/course/catalog/— all course completions for one user, keyed by course id. Params:user_id; optionalfield_key(e.g.completion_percentage,completion_data) returns just that field per course.
Resource
- GET
/api/catalog/milestones/completions/resource/manage/— retrieve one resource completion. Params:resource_id,user_id. Returnsresource_type,completion_percentage,completed,completion_data.
Program
- GET
/api/catalog/milestones/completions/program/query/— query a user's program completion. Params:program_key(required, urlencoded), and one ofuser_id/username. Returns{ "count", "completion_percentage" }(completion_percentageis 0.0–1.0).
Pathway
- GET
/api/catalog/milestones/completions/pathway/query/— query a user's pathway completion. Params:pathway_uuid(required), and one ofuser_id/username. Returns{ "count", "completion_percentage" }(completion_percentageis 0.0–1.0).
Skill points
Block
- GET
/api/catalog/milestones/skill_points/block/— skill points for a block. Param:block_id(URL-encoded). Returns a{ skill: points }map.
Course
- GET
/api/catalog/milestones/skill_points/course/— skill points for a course. Param:course_id(URL-encoded). Returns a{ skill: points }map.
Platform
- GET
/api/catalog/milestones/skill_points/platform/— list platform skill-point records. Params:platform_key(orplatform_org) required; optionalquery,sort(default-id). Returns a paginated{ count, next_page, previous_page, results[] }, each result carryingusername,skill,skill_id,skill_points.
User
- GET
/api/catalog/milestones/skill_points/user/— aggregated skill points for one user. Params:user_id/username. Returns a{ skill: { course_points, block_points, platform_points, total_points } }map.
Writes
Completions
Course
- POST
/api/catalog/milestones/completions/course/manage/— create/update a course completion. Body acceptscourse_id,user_id, and anyCourseCompletionfield:{ "course_id": "course-v1:edX+DemoX+Demo_Course", "user_id": 42, "completed": true, "completion_percentage": 95.3 }
Resource
- POST
/api/catalog/milestones/completions/resource/manage/— create/update a resource completion. Body:resource_id(int, required),user_id(int, required), optionalcompleted,completion_percentage(0.0–1.0),completion_date,completion_data:{ "resource_id": 11, "user_id": 42, "completed": true, "completion_percentage": 1.0 }
Skill points
Block
- POST
/api/catalog/milestones/skill_points/block/— set a block's skill points:{ "block_id": "block-v1:test+test+test+type@html+block@2d68d2674abb47b5b676e822741acc25", "point_data": { "test-skill": 4.5, "another-skill": 6.2 } }
Course
- POST
/api/catalog/milestones/skill_points/course/— set a course's skill points:{ "course_id": "course-v1:test+test+test", "point_data": { "test-skill": 63.0, "another-skill": 45.0 } }
Platform
- POST
/api/catalog/milestones/skill_points/platform/— update a user's platform skill points. Body:username,platform_key,point_data, optionaloverwrite(defaulttrue):{ "username": "student1", "platform_key": "test-platform", "point_data": { "test-skill": 63.0, "another-skill": 45.0 }, "overwrite": false } - DELETE
/api/catalog/milestones/skill_points/platform/— delete one platform skill-point record. Params:skill_point_id(required),platform_key(orplatform_org). Destructive — confirm with the user first. - POST
/api/catalog/milestones/skill_points/platform/bulk/— bulk update platform skill points (platform-admin access). Body:skill_point_data(required; array of per-user entries — each entry takesusername/user_id,point_data, optionaloverwrite), optional top-levelplatform_keyapplied to every entry:{ "platform_key": "test-platform", "skill_point_data": [ { "username": "student1", "point_data": { "test-skill": 63.0 }, "overwrite": false }, { "user_id": 7, "point_data": { "skill-1": 31.0 }, "overwrite": false } ] } - POST
/api/catalog/milestones/skill_points/platform/group/— update platform skill points for a group. Body:group_id,platform_key,point_data, optionaloverwrite:{ "group_id": 123, "platform_key": "test-platform", "point_data": { "test-skill": 63.0, "another-skill": 45.0 }, "overwrite": false }
Example
Look up a user's course completion:
curl -G \
"https://api.iblai.app/dm/api/catalog/milestones/completions/course/manage/" \
-H "Authorization: Api-Token $IBLAI_API_KEY" \
--data-urlencode "course_id=course-v1:edX+DemoX+Demo_Course" \
--data-urlencode "user_id=10"
Notes
- Id formats: course ids are opaque keys like
course-v1:edX+DemoX+Demo_Course; block ids likeblock-v1:test+test+test+type@html+block@<hash>; program keys likeprogram-v1:main+test; pathways use a UUID (pathway_uuid). URL-encode these in query strings (:→%3A,+→%2B,@→%40). platform_keyis the org key ($IBLAI_ORG) on the wire for skill-point operations.overwrite(defaulttrue) on platform/bulk/group updates replaces the user's existing points for the given skills; setfalseto merge/add.- The course
catalog/read returns all of a single user's course completions at once; passfield_keyto slice out one field per course. - Platform bulk updates require platform-admin level access.