Base URL
https://techledculture.com
Authorization: Bearer <licenceKey>Play Catalogue
/api/hmwi/playsReturns the full HMWI play catalogue (all 23 plays). Suitable for LMS integration.
Response
{
"plays": [
{
"slug": "courage-hackathon",
"title": "Courage Hackathon",
"format": "full",
"duration": "60–90 min",
"signalTags": ["Fear Mask", "Voice Suppression"],
"why": ["Teams that cannot ..."],
"steps": [ ... ],
...
},
...
]
}/api/hmwi/plays/:slugReturns a single play by its URL slug.
Parameters
| :slug | path | Play URL slug, e.g. courage-hackathon |
Response
{
"play": { "slug": "courage-hackathon", "title": "Courage Hackathon", ... }
}Licence Management
/api/hmwi/license-from-sessionResolves a Stripe checkout session ID to a licence key. Used immediately after purchase.
Parameters
| session_id | query | Stripe checkout session ID (from ?session_id= on success URL) |
Response
{ "licenseKey": "tlc-abc123...", "status": "pending" }/api/hmwi/license/:keyReturns the public status of a licence key (no branding data).
Parameters
| :key | path | Licence key (tlc-...) |
Response
{
"licenseKey": "tlc-...",
"tier": "five-teams",
"teamLimit": 5,
"status": "active",
"companyName": "Acme Corp",
"activatedAt": "2026-07-25T13:00:00Z"
}/api/hmwi/license/:key/brandingReturns the full branding configuration for a licence. Suitable for embedding from your domain. Cached for 60 s.
Parameters
| :key | path | Licence key |
Response
{
"licenseKey": "tlc-...",
"companyName": "Acme Corp",
"logoUrl": "https://acme.com/logo.svg",
"brandColors": { "primary": "#1d4ed8", "accent": "#7c3aed", "bg": "#ffffff" },
"terminologyOverrides": { "play": "activity", "signal": "indicator" },
"tier": "five-teams",
"teamLimit": 5,
"status": "active"
}/api/hmwi/license/:key/activateSets company branding on a licence and transitions it to active. Idempotent — safe to call again to update branding.
Parameters
| companyName | body (string, required) | Your organisation name |
| logoUrl | body (string, optional) | HTTPS URL to your logo (SVG or PNG) |
| brandColors | body (object, optional) | { primary, accent, bg } — CSS hex colours |
| terminologyOverrides | body (object, optional) | Key→value map, e.g. { "play": "activity" } |
Response
{ "ok": true, "license": { ... } }Example: fetch all plays from your LMS
// Fetch play catalogue — no auth required
const resp = await fetch("https://techledculture.com/api/hmwi/plays");
const { plays } = await resp.json();
// Fetch branding for your portal — no auth required
const brand = await fetch(
"https://techledculture.com/api/hmwi/license/tlc-abc123.../branding"
).then(r => r.json());
// Update branding (licence key in Bearer header)
await fetch(
"https://techledculture.com/api/hmwi/license/tlc-abc123.../activate",
{
method: "PATCH",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer tlc-abc123..."
},
body: JSON.stringify({
companyName: "Acme Corp",
logoUrl: "https://acme.com/logo.svg",
brandColors: { primary: "#e11d48", accent: "#7c3aed", bg: "#fff" },
terminologyOverrides: { play: "activity" }
})
}
);