Loading…
UIEE's public API exposes our full course catalogue (325 outlines), faculty network (18 members), 37 flagship programmes, real-time cohort schedules, and pricing in ZAR + USD. Free for accredited EdTech platforms, LMS providers, government portals, and corporate L&D teams.
UIEE exposes read-only JSON endpoints for our entire catalogue. Whether you're building an LMS marketplace, a corporate L&D dashboard, a government training portal, or a research aggregator, our API gives you production-ready access to Africa's largest executive education dataset.
Sync our 325 course outlines into your LMS as SCORM-compatible modules with one cron call.
Embed our programme catalogue on your intranet with live cohort dates and ZAR/USD pricing.
Power your national skills portal with our accredited SAP, leadership, and governance courses.
Pull faculty CVs, programme metadata, and cohort schedules for academic or market research.
Want to push leads back to UIEE, share your own training calendar with our marketplace, or co-deliver a programme? Visit the Partner Integration tab to propose a two-way integration. We support inbound webhooks (Zapier, Make.com, custom), OAuth2 client credentials, and signed SAML SSO for enterprise partners.
Last incident: none in the last 90 days
All endpoints return JSON. Base URL: https://ubuntuinstitute.co.za. Append your API key as ?key=YOUR_KEY or asAuthorization: Bearer YOUR_KEY.
/api/v1/courses.phpList all 325 course outlines. Filter by category, domain, duration, price band, or city.
?limit=20&offset=0&category=business-strategy&domain=finance&city=johannesburg{
"ok": true,
"count": 325,
"courses": [
{
"slug": "advanced-commercial-analysis",
"name": "Advanced Commercial Analysis",
"code": "ACA-001",
"category": "Finance & Insurance",
"domain": "finance",
"duration": "5 days",
"price_zar": 18000,
"price_usd": 950,
"cpe_credits": 40,
"cities": ["Johannesburg", "Nairobi"],
"modules": 5,
"url": "https://ubuntuinstitute.co.za/courses/advanced-commercial-analysis/"
}
]
}/api/v1/courses.php?slug={slug}Get a single course with full module breakdown, learning outcomes, and instructor.
?slug=advanced-commercial-analysis{
"ok": true,
"course": {
"slug": "advanced-commercial-analysis",
"name": "Advanced Commercial Analysis",
"modules": [
{ "title": "Day 1 — Foundations", "topics": ["...", "..."] }
],
"objectives": ["...", "..."],
"instructor": { "id": "nhamoyebonde", "name": "Blessing Nhamoyebonde" }
}
}/api/v1/programmes.phpList all 37 flagship programmes with ZAR/USD pricing, cohort dates, and ROI benchmarks.
?category=executive-leadership&limit=10/api/v1/programmes.php?slug={slug}Get a single programme with full outline, outcomes, and ROI calculator inputs.
?slug=pan-african-leadership-strategy/api/v1/faculty.phpList all 18 faculty members with titles, specialisations, and CV download URLs.
?specialisation=governance/api/v1/faculty.php?id={id}Get a single faculty member with full bio, CV, and linked courses.
?id=ajilore/api/v1/calendar.phpList upcoming cohort dates across 5 cities (Johannesburg, Nairobi, Lagos, Dubai, Mbabane).
?quarter=Q1-2027&city=Nairobi/api/v1/categories.phpList all 22 course categories with course counts and descriptions.
/api/v1/lead.phpPush a lead into UIEE's CRM. Triggers an automated welcome sequence + Zapier webhook.
Body: { "name", "email", "phone?", "organisation?", "course_slug?", "source" }/api/v1/apply.phpSubmit a programme application on behalf of a candidate. Returns a reference number.
Body: { "programme_slug", "name", "email", "phone", "country", "organisation" }/api/v1/invoices.php?ref={ref}Lookup an invoice by reference number (requires HMAC signature for PII protection).
?ref=UIEE-2026-0001&sig={hmac}/api/v1/health.phpService health check (no auth required). Returns uptime, version, and dependency status.
/api/v1/zoom/status.phpZoom integration status — verifies OAuth credentials and returns the connected Zoom account. Admin auth required.
/api/v1/zoom/meetings.php?action=listList all Zoom meetings for a UIEE training host. Admin auth required.
?action=list&user_id=me&type=scheduled&page_size=30/api/v1/zoom/meetings.php?action=getGet a single Zoom meeting with join URL, password, and dial-in numbers. Admin auth required.
?action=get&id=123456789/api/v1/zoom/meetings.phpCreate a Zoom meeting for a training session. Auto-enables waiting room, mute-on-entry, and cloud recording. Admin auth required.
Body: { "action":"create", "topic":"Strategic HR Leadership", "type":2, "start_time":"2026-11-16T09:00:00Z", "duration":300, "timezone":"Africa/Johannesburg", "agenda":"Day 1 — Foundations", "settings": { "waiting_room": true, "auto_recording": "cloud" } }/api/v1/zoom/meetings.phpAdd a registrant to a Zoom meeting (auto-sends confirmation email). Admin auth required.
Body: { "action":"add_registrant", "id":123456789, "email":"delegate@example.com", "first_name":"John", "last_name":"Doe", "country":"South Africa" }/api/v1/gmass/status.phpGMass integration status — returns from_email, daily_limit, tracking config. Admin auth required.
/api/v1/gmass/send.phpSend a single email via GMass (Gmail-based, higher deliverability than SMTP). Supports merge fields + attachments. Admin auth required.
Body: { "to_email":"delegate@example.com", "to_name":"John Doe", "subject":"Welcome to UIEE", "html_body":"<h1>Hi {{name}}</h1><p>...</p>", "merge_fields":[ {"name":"name","value":"John"} ] }/api/v1/gmass/bulk-send.phpSend the same email to multiple recipients via GMass. Auto-throttles to Gmail limits. Admin auth required.
Body: { "recipients":[ {"email":"a@x.com","name":"A"}, {"email":"b@x.com"} ], "subject":"...", "html_body":"..." }Every request requires an API key. Keys are issued per organisation and tied to a single contact email. Public endpoints (catalogue, faculty, calendar) accept the key as a query parameter; PII endpoints (invoices, leads) require the Bearer header pattern.
curl -X GET \
"https://ubuntuinstitute.co.za/api/v1/courses.php?limit=5&key=YOUR_API_KEY"curl -X GET \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://ubuntuinstitute.co.za/api/v1/invoices.php?ref=UIEE-2026-0001&sig=HMAC_SIGNATURE"const res = await fetch(
"https://ubuntuinstitute.co.za/api/v1/courses.php?limit=20",
{ headers: { Authorization: `Bearer ${'YOUR_API_KEY'}` } }
);
const data = await res.json();
console.log(data.courses);import requests
res = requests.get(
"https://ubuntuinstitute.co.za/api/v1/courses.php",
params={"limit": 20, "category": "business-strategy"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = res.json()
for course in data["courses"]:
print(course["name"], course["price_zar"])<?php
$ch = curl_init("https://ubuntuinstitute.co.za/api/v1/courses.php?limit=20");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
]);
$res = curl_exec($ch);
$data = json_decode($res, true);
foreach ($data["courses"] as $course) {
echo $course["name"] . " — R" . $course["price_zar"] . PHP_EOL;
}Each key is limited to 1,000 requests per hour and 10,000 per day. Responses include these headers so you can throttle client-side:
X-RateLimit-Limit — total requests allowed per hourX-RateLimit-Remaining — remaining this hourX-RateLimit-Reset — Unix timestamp when limit resetsWhen you exceed the limit, the API returns 429 Too Many Requests. Back off exponentially and retry.
Subscribe to real-time events. Webhooks are signed with HMAC-SHA256 using your API key as the secret — verify the X-UIEE-Signatureheader before processing.
course.publishedA new course outline was published or updated
{ "course": { "slug", "name", "url" } }cohort.scheduledA new cohort date was added to the calendar
{ "course_slug", "city", "dates", "quarter" }cohort.cancelledA cohort was cancelled — refunds issued
{ "course_slug", "city", "dates", "reason" }programme.updatedA flagship programme's outline or pricing changed
{ "slug", "name", "fields_changed": [...] }faculty.addedA new faculty member joined UIEE
{ "id", "name", "specialisation", "cv_url" }application.receivedA new application was submitted (push only)
{ "ref", "programme", "name", "email" }const crypto = require("crypto");
function verifySignature(rawBody, signature, apiKey) {
const expected = crypto
.createHmac("sha256", apiKey)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected, "hex"),
Buffer.from(signature, "hex")
);
}
// Express middleware
app.post("/uiee-webhook", (req, res) => {
const sig = req.headers["x-uiee-signature"];
if (!verifySignature(req.rawBody, sig, process.env.UIEE_API_KEY)) {
return res.status(401).send("Invalid signature");
}
const event = JSON.parse(req.rawBody);
console.log("Received: " + event.type);
res.status(200).send("OK");
});Official SDKs for JavaScript and Python. PHP and Go coming soon. All SDKs handle rate limiting, retries, and signature verification automatically.
npm install @uiee/api-clientimport { UIEE } from "@uiee/api-client";
const uiee = new UIEE({ apiKey: process.env.UIEE_API_KEY });
// Fetch 20 leadership courses
const { courses } = await uiee.courses.list({
domain: "leadership",
limit: 20,
});
// Get a single course with full outline
const { course } = await uiee.courses.get("advanced-commercial-analysis");
// Subscribe to webhook events
uiee.webhooks.on("course.published", (event) => {
console.log("New course:", event.course.name);
});pip install uiee-apifrom uiee import UIEE
uiee = UIEE(api_key=os.environ["UIEE_API_KEY"])
# Fetch 20 leadership courses
res = uiee.courses.list(domain="leadership", limit=20)
for course in res.courses:
print(course.name, course.price_zar)
# Get a single course with full outline
course = uiee.courses.get("advanced-commercial-analysis")
print(course.modules)composer require uiee/api-client<?php
require "vendor/autoload.php";
use UIEE\ApiClient;
$uiee = new ApiClient(getenv("UIEE_API_KEY"));
// Fetch 20 leadership courses
$res = $uiee->courses()->list([
"domain" => "leadership",
"limit" => 20,
]);
foreach ($res["courses"] as $course) {
echo $course["name"] . PHP_EOL;
}No install — system cURL# List all courses (with API key)
curl -X GET \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://ubuntuinstitute.co.za/api/v1/courses.php?limit=10"
# Get one course detail
curl -X GET \
"https://ubuntuinstitute.co.za/api/v1/courses.php?slug=advanced-commercial-analysis&key=YOUR_API_KEY"UIEE's Zoom integration lets admins create meetings, list upcoming sessions, and register delegates — all via API. Uses Server-to-Server OAuth (the modern replacement for the deprecated JWT auth).
GET /api/v1/zoom/status.phpVerifies OAuth credentials and returns the connected Zoom account email + ID.
POST /api/v1/zoom/meetings.phpCreates a Zoom meeting with waiting room, mute-on-entry, and cloud recording enabled.
UIEE's GMass integration sends bulk email campaigns through Gmail (avendalimited@gmail.com), delivering higher inbox placement than traditional SMTP. Used as the primary sender in the bulk mail engine, with SMTP as automatic fallback. Supports merge fields, attachments, and native open/click tracking.
GET /api/v1/gmass/status.phpConnection check + config.
POST /api/v1/gmass/send.phpOne email with merge fields.
POST /api/v1/gmass/bulk-send.phpMany recipients, auto-throttled.
Two-way integrations go beyond read-only API access. Tell us what you want to build and we'll scope a partnership agreement covering data sharing, co-marketing, and revenue split (where applicable).