A multi-tenant, cloud-native system for managing South African occupational qualifications, learner enrolments, assessments, and QCTO MIS reporting — built on Cloudflare Workers.
✨ Features
Multi-tenant isolated data per provider
POPIA-compliant SA ID hashing
Assessment & moderation tracking
Automated QCTO01/QCTO02 exports
Statement of Results generation
Background export processing
Role-based access (7 roles)
Audit trail with PII sanitization
🚀 Quick Start
1
Create your tenant
POST /tenants (public, no auth required)
2
Save your credentials
Store the API key and tenant ID securely (shown only once!)
Store the API key and tenant ID securely (shown only once!)
3
Add authentication headers
Authorization: Bearer <api-key>
4
Include tenant context
X-Tenant-Id: <tenant-id>
📡 API Endpoints
Tenants
POST/tenants (public)
GET/tenants/:id
Programmes
POST/programmes
GET/programmes
GET/programmes/:id
Learners
POST/learners
POST/learners/bulk (CSV import)
GET/learners
GET/learners/:id
Enrolments & Assessments
POST/enrolments
GET/enrolments/:id
POST/assessments
GET/assessments/:id
QCTO Exports
POST/exports/:type (QCTO01, QCTO02)
GET/exports/:id
GET/exports/:id/link
Statement of Results
POST/sor/generate
GET/sor/:learnerId/render
🔠Authentication
Method: Bearer token (API key)
Required Headers:
Authorization: Bearer <your-api-key>
X-Tenant-Id: <your-tenant-id>
X-Tenant-Id: <your-tenant-id>
Public Endpoints: GET /, GET /health, POST /tenants