/v1/console and provides admin-level management for the MIND platform. All console endpoints require specific permissions granted through the RBAC system.
Authorization
Console endpoints use permission-based authorization. Each endpoint requires a specific module permission:| Module | Controls |
|---|---|
USER_MANAGEMENT | User CRUD, activate/deactivate |
ROLE_MANAGEMENT | Role CRUD, permission matrix |
TENANT_MANAGEMENT | Tenant CRUD, branding, SSO, AI config |
CASE_STUDIES | Case study CRUD, avatars, voices, attaching documents |
KNOWLEDGE_BASES | Vector collections + documents (cross-domain) |
FEEDBACK | Student feedback dashboard |
PROGRAMMES | Academic programmes that scope which case studies users can access |
can_view, can_create, can_edit, can_delete. Granting KNOWLEDGE_BASES.can_view to a faculty role, for example, lets that user browse documents in any collection without being able to upload or delete.
If a user’s role lacks the required permission, the API returns:
Base URL
All console endpoints use the prefix:How retrieval is organised
The knowledge base is a small set of building blocks shared across domains:- Collections are named vector groupings (
case-studies,assessments, …). Each collection is one Qdrant collection on disk. Create as many as you need withPOST /knowledge-base/collections. - Documents live in exactly one collection. Each document gets a stable id when it’s uploaded; that id is what other domains reference (and what’s stored on every vector as
source_id). - Domains that need RAG hold a list of document ids. A case study’s
document_ids, for example, is the set of documents the agent will retrieve from for that case study’s sessions. Empty list means no RAG.
- Browse the available collections —
GET /knowledge-base/collections. - Look at what’s in one —
GET /knowledge-base/collections/{name}/documents— and pick existing documents to reuse, or skip ahead to upload. - Either:
- Attach existing docs to the case study —
POST /case-studies/{id}/documents/attach. - Or upload-and-attach a new file in one shot —
POST /case-studies/{id}/documents(lands in the default collection,KB_COLLECTION_NAME).
- Attach existing docs to the case study —
- Detach when no longer needed —
DELETE /case-studies/{id}/documents/{doc_id}. Detach-only; the document survives for reuse.
Programmes and access scoping
Students typically belong to a programme —MPH, MBA, MIT, MPA — and case studies declare which programmes may access them. The model is intentionally simple:
- A programme is a tagged group identified by an uppercase code.
- A user’s
programme_codesis a list of those codes (a faculty member can span multiple, a student usually has one). - A case study’s
programme_codesis the set of programmes allowed to see and start sessions for it. - Empty list on a case study = open to all programmes. Existing case studies keep working without any tagging.
GET /v1/case-studies (the student-facing list) filters to case studies whose programme_codes intersect the requester’s, plus the open ones. POST /v1/sessions checks the same intersection, so a student can’t bypass the list filter by guessing an id. Console routes are unfiltered — admins and faculty see everything.
The frontend can read a user’s programme_codes and resolved permissions in one call via GET /v1/users/me, then gate UI elements without per-action permission checks.