iblai/api

iblai-api-management

Administer an ibl.ai organization via the platform API - manage Users (list, activate, promote/demote, bulk role sync, set policies), edX roles (full catalog: global/course/org), Groups, RBAC Roles and Policies, Teams (user-groups + team access), and Alerts (watched groups/users/watchers).

First seen Jul 15, 2026

Installation

$ npx skills add iblai/api --skill iblai-api-management

Summary

  • Administer an ibl.ai organization via the platform API - manage Users (list, activate, promote/demote, bulk role sync, set policies), edX roles (full catalog: global/course/org), Groups, RBAC Roles and Policies, Teams (user-groups + team access), and Alerts (watched groups/users/watchers).
  • Use for organization-level user and access administration.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from iblai/api · top by installs.

npx skills add iblai/api

Browse all from iblai/api

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 15
License LICENSE
Default branch main
Open issues 1
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 9,338 B
  • docs SUMMARY.md 377 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 6 installs

SKILL.md

iblai-api-management

Administer an organization from the API: manage Users, Groups, Roles, Policies, Teams, and Alerts for organization-level user and access administration.

Auth & conventions

  • Base URL: https://api.iblai.app
  • Header: Authorization: Api-Token $IBLAIAPIKEY on every request.
  • Path vars: {org} = $IBLAIORG (a.k.a. platformkey),

{username} = $IBLAI_USERNAME.

  • Host: these endpoints live on the DM host under /api/core/…. The

exception is edX user roles (list / promote-demote / bulk sync), which flip to the edX LMS/CMS host - see the Users > Roles (edX) entries below. The org field on those calls is the edX course-organization short name, not the ibl.ai org key - see the reference doc linked in ## Reference material.

  • Not connected yet? Run /iblai-api-login first to populate IBLAI_ORG,

IBLAIUSERNAME, and IBLAIAPI_KEY.

Reads

Users

  • GET …/core/platform/users/?platformkey={org}&platformorg={org}&query={q}&page={n}&pagesize=10&returnpolicies=true — user list + policies.

Roles (edX)

  • GET https://studio.learn.iblai.app/api/ibl/users/manage/roles/?username={username} - list a user's edX roles (global + course + org). Identify the user with username, email, or user_id. Full role catalog (what each role key means, which need course/org) and endpoint detail in [references/edx-roles-reference.md](references/edx-roles-reference.md).

Groups

…/core/rbac/groups/

  • GET …/groups/?platformkey={org}&includeusers=true[&name=&email=&owner=&username=&page=&page_size=] — list.
  • GET …/groups/{id}/ — detail.

Roles

…/core/rbac/roles/ (all calls include includeglobalroles=true)

  • GET …/roles/?includeglobalroles=true&platformkey={org}[&name=&page=&pagesize=] — list.
  • GET …/roles/{id}/?includeglobalroles=true&platform_key={org} — detail.

Policies

…/core/rbac/policies/

  • GET …/policies/?platformkey={org}&includegroups=true&includeusers=true[&roleid=&group=&name=&username=&email=&page=&page_size=] — list.
  • GET …/policies/{id}/?platform_key={org} — detail.

Teams

…/core/user-groups/ plus team access (…/core/rbac/teams/access/)

  • GET …/user-groups/?platformkey={org}[&includeusers=&name=&withpermissions=&page=&pagesize=] — list.
  • GET …/user-groups/{id}/?platform_key={org} — detail.
  • GET …/core/rbac/teams/access/?platformkey={org}&usergroupid={id} — list a team's access policies.

Writes

Users

Roles (edX)

  • POST https://studio.learn.iblai.app/api/ibl/users/manage/roles/ - promote/demote, i.e. assign or unassign one role:

``json { "username": "string (required)", "role": "e.g. org-instructor (required - see role catalog)", "course": "course id - required for course roles", "org": "edX course-org short name - required for org roles", "active": "boolean (optional, default true - true assigns, false removes)" } ` General roles (staff, support-staff, course-creator) take neither course nor org. course-creator is CMS-only (the LMS host rejects it with 400). Full role catalog - what each key means and its scope requirement - is in [references/edx-roles-reference.md`](references/edx-roles-reference.md).

  • POST https://studio.learn.iblai.app/api/ibl/users/manage/roles/sync/ - bulk-replace a batch of role assignments for one user in a single atomic request (all entries validated first; all succeed or all roll back). Body and response shape, plus inactive-user and idempotency behavior, in the reference doc above.
  • POST …/core/users/platforms/ — activate/deactivate:

``json { "userid": "number (required)", "platformkey": "string (required)", "active": "boolean (required)" } ``

  • PUT …/core/platform/users/policies/ — set policies (array):

``json [ { "userid": "number (required)", "platformkey": "string (required)", "policiestoset": "string[] (required, may be [])" } ] ``

Groups

…/core/rbac/groups/

  • POST …/groups/ — create:

``json { "name": "string (required)", "platform_key": "string (required)", "description": "string", "users": "number[]" } ``

  • PUT …/groups/{id}/ — update (same shape).
  • DELETE …/groups/{id}/?platform_key={org} — delete. Destructive — confirm with the user first.

Roles

…/core/rbac/roles/ (all calls include includeglobalroles=true)

  • POST …/roles/?includeglobalroles=true — create:

``json { "name": "string (required)", "platformkey": "string (required)", "actions": "string[] (RBAC action strings, e.g. Ibl.Mentor/Mentors/read)", "dataactions": "string[]" } ` The permission list is actions (+ optional data_actions), not permissions. See /iblai-api-rbac` for the full role/policy model (action namespaces, resource paths).

  • PUT / PATCH …/roles/{id}/?includeglobalroles=true — update (same shape).
  • DELETE …/roles/{id}/?includeglobalroles=true&platform_key={org} — delete. Destructive — confirm with the user first.

Policies

…/core/rbac/policies/

  • POST …/policies/ — create:

``json { "name": "string (required)", "platform_key": "string (required)", "role": "number role id (required)", "resources": "string[]", "users": "number[]", "groups": "number[]" } ``

  • PUT / PATCH …/policies/{id}/ — update (same shape).
  • DELETE …/policies/{id}/?platform_key={org} — delete. Destructive — confirm with the user first.

Teams

…/core/user-groups/ plus team access (…/core/rbac/teams/access/)

  • POST …/user-groups/ — create:

``json { "name": "string (required)", "platform_key": "string (required)", "description": "string", "users": "number[]" } ``

  • PUT …/user-groups/{id}/ — update (same shape).
  • DELETE …/user-groups/{id}/ — delete. Destructive — confirm with the user first.
  • POST …/core/rbac/teams/access/ — set team access:

``json { "platformkey": "string (required)", "usergroupid": "number (required)", "groups": "[{groupid, role}]", "users": "[{userid, role}]" } ``

Alerts

…/core/watched-groups/

  • GET / POST …/watched-groups/ — list / create watched group.
  • GET / PATCH / DELETE …/watched-groups/{id}/ — watched group detail / update / delete. DELETE is destructive — confirm with the user first.
  • GET / POST …/watched-groups/{watchedGroupPk}/watched-users/ — list / add watched users.
  • DELETE …/watched-users/{id}/ — remove watched user. Destructive — confirm with the user first.
  • GET / POST …/watched-groups/{watchedGroupPk}/watchers/ — list / add watchers.
  • PATCH / DELETE …/watchers/{id}/ — update / remove watcher (notification-event flags in body). DELETE is destructive — confirm with the user first.

Example

List the first page of organization users with their policies:

curl -s \
  "https://api.iblai.app/dm/api/core/platform/users/?platform_key=$IBLAI_ORG&platform_org=$IBLAI_ORG&page=1&page_size=10&return_policies=true" \
  -H "Authorization: Api-Token $IBLAI_API_KEY"

Notes

  • Most endpoints require platform_key={org} as a query param even on POST/PUT

bodies that also carry it — send both.

  • The edX user-roles calls (list, promote/demote, bulk sync) are the only

ones on the edX LMS/CMS host and take no platform_key; every other endpoint here is on the DM host under /api/core/…. Prefer the CMS host (studio.learn.iblai.app) for edX roles - it accepts every role key, including course-creator, which the LMS host rejects.

  • edX roles (this section) and DM rbac/roles (the Roles subsection

below) are two unrelated systems that happen to share the word "role" - an edX role key like org-instructor is not a DM RBAC role id, and vice versa.

  • Policies bind a role (RBAC role id) to resources, users, and groups —

create the Role first, then reference its id when creating the Policy.

  • DELETE on any sub-section is destructive — confirm with the user before

removing groups, roles, policies, teams, watched groups/users, or watchers.

Reference material

  • [references/edx-roles-reference.md](references/edx-roles-reference.md) - full edX role catalog (every global/course/org role key and what it grants), the list/assign/bulk-sync endpoint bodies and responses, and gotchas (inactive-user grant skipping, idempotency, course-creator's CMS-only restriction, Open edX release gates on course-limited-staff).