{"openapi":"3.1.0","info":{"title":"ALL Applied AI Network API","version":"2.0.0","description":"Public data API for ALL Applied AI Network chapters. Every per-chapter module is readable without an API key through the chapter bundle, which is CORS-open and safe to call from a browser — the correct route for static sites and SPAs. The authenticated /api/v1/* endpoints exist for sites that run code on a server.","contact":{"name":"ALL Applied AI Network","url":"https://all-ai-network.org"}},"servers":[{"url":"https://dashboard.all-ai-network.org"}],"tags":[{"name":"Public","description":"No API key. CORS-open."},{"name":"Authenticated","description":"Bearer API key. Server-side only."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Chapter API key, requested from the dashboard's Website tab."}}},"security":[],"paths":{"/api/public/chapter/{slug}/bundle":{"get":{"operationId":"bundle","summary":"Chapter bundle","description":"Everything a chapter website needs in one round-trip: identity and counts, presentation config, events, leaderboard, badges, merch, projects, and social feeds. This is the endpoint most integrations should use.\n\nCORS-open and edge-cached ~30 seconds, so calling it on every page load is fine.\n\nRead events_scope to tell 'nothing upcoming' apart from 'no events at all'.\n\nconfig carries the chapter's dashboard theme and section toggles. A site with its own design should ignore both — they exist for template sites that opted into remote control.","tags":["Public"],"parameters":[{"name":"slug","in":"path","required":true,"description":"The chapter's slug, e.g. msoe-ai-club.","schema":{"type":"string"}},{"name":"events","in":"query","required":false,"description":"Which slice of the calendar to return. Defaults to upcoming — a chapter whose events are all in the past gets an empty array unless you ask for past or all.","schema":{"type":"string"}},{"name":"events_limit","in":"query","required":false,"description":"Cap on events returned. Defaults to 12 for upcoming, 100 otherwise; max 200.","schema":{"type":"integer"}}],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"examples":{"default":{"value":"{\n  \"chapter\": {\n    \"slug\": \"msoe-ai-club\",\n    \"name\": \"MSOE AI Club\",\n    \"university\": \"Milwaukee School of Engineering\",\n    \"member_count\": 515,\n    \"event_count\": 56\n  },\n  \"config\": { \"theme\": { \"primary\": \"#4f8fea\", \"accent\": \"#a855f7\" }, \"logo_url\": \"…\", \"sections\": { … } },\n  \"events\": [ … ],\n  \"events_scope\": \"upcoming\",\n  \"leaderboard\": [ { \"rank\": 1, \"name\": \"…\", \"points\": 88, \"badges\": [ … ] } ],\n  \"badges\": [ … ],\n  \"merch\": [ … ],\n  \"projects\": [\n    {\n      \"title\": \"NourishNet\",\n      \"year\": \"2023-2024\",\n      \"members\": [ { \"name\": \"Sydney Balboni\", \"role\": \"author\" } ],\n      \"files\":   [ { \"kind\": \"paper\", \"url\": \"https://arxiv.org/pdf/2407.00698\" } ]\n    }\n  ],\n  \"social_feeds\": { }\n}"}}}}},"404":{"description":"Chapter not found"}}}},"/api/public/learning-tree/{slug}":{"get":{"operationId":"learning_tree","summary":"Learning tree","description":"The network's shared curriculum graph merged with the chapter's own nodes, as nodes and edges.\n\nsource distinguishes shared network nodes from chapter-authored ones.\n\nHonour pos_x/pos_y where present — an officer arranged those by hand. Only auto-layout nodes that have none.\n\nprereqs can list more than one parent. This is a graph, not a strict tree; a renderer assuming a single parent silently drops edges.","tags":["Public"],"parameters":[{"name":"slug","in":"path","required":true,"description":"The chapter's slug.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"examples":{"default":{"value":"{\n  \"chapter\": { \"slug\": \"msoe-ai-club\", \"name\": \"MSOE AI Club\" },\n  \"nodes\": [\n    {\n      \"id\": \"foundations/what-is-ai\",\n      \"title\": \"What Is AI? The Real Story\",\n      \"summary\": \"…\",\n      \"body\": null,\n      \"prereqs\": [],\n      \"tags\": [\"foundations\"],\n      \"thumbnail\": \"https://…\",\n      \"difficulty\": \"beginner\",\n      \"pos_x\": -1240, \"pos_y\": 0,\n      \"source\": \"base\"\n    }\n  ],\n  \"edges\": [ { \"from\": \"…\", \"to\": \"…\" } ]\n}"}}}}},"404":{"description":"Chapter not found"}}}},"/api/public/config/{slug}":{"get":{"operationId":"config","summary":"Chapter site config","description":"Just the presentation config — theme, logo, section toggles, officers — without the rest of the bundle.\n\nUse the bundle instead if you also need data; it includes this.","tags":["Public"],"parameters":[{"name":"slug","in":"path","required":true,"description":"The chapter's slug.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Chapter not found"}}}},"/api/public/network/chapters":{"get":{"operationId":"network_chapters","summary":"Chapter directory","description":"Every chapter that has opted into network discovery, with its university and hub site.","tags":["Public"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Chapter not found"}}}},"/api/public/network-stats":{"get":{"operationId":"network_stats","summary":"Network statistics","description":"Aggregate, no-PII snapshot of the network: chapter count, member totals, and partner activity.","tags":["Public"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Chapter not found"}}}},"/api/v1/config":{"get":{"operationId":"v1_config","summary":"Hub-site configuration","description":"Fetch your chapter's theme colors, logo URL, and section toggles from the dashboard. Drives the site's CSS variables, header logo, and which components render.\n\nServer-side only — requires an API key. Static sites should use /api/public/chapter/{slug}/bundle instead, which needs no key.","tags":["Authenticated"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"}}}},"/api/v1/events":{"get":{"operationId":"v1_events","summary":"Upcoming events","description":"Render your chapter's next events on your homepage. Auto-updates as you add events in the dashboard.\n\nServer-side only — requires an API key. Static sites should use /api/public/chapter/{slug}/bundle instead, which needs no key.","tags":["Authenticated"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"}}}},"/api/v1/leaderboard":{"get":{"operationId":"v1_leaderboard","summary":"Leaderboard","description":"Show the top members by XP. Great for a homepage widget or a dedicated members page.\n\nServer-side only — requires an API key. Static sites should use /api/public/chapter/{slug}/bundle instead, which needs no key.","tags":["Authenticated"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"}}}},"/api/v1/chapter":{"get":{"operationId":"v1_chapter","summary":"Chapter stats","description":"Pull your chapter's name, university, member count, and event count — perfect for a hero banner or footer.\n\nServer-side only — requires an API key. Static sites should use /api/public/chapter/{slug}/bundle instead, which needs no key.","tags":["Authenticated"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"}}}},"/api/v1/badges":{"get":{"operationId":"v1_badges","summary":"Chapter badges","description":"Render the full catalog of recognition badges your chapter awards — with their name, description, icon, and how many members have earned each one.\n\nServer-side only — requires an API key. Static sites should use /api/public/chapter/{slug}/bundle instead, which needs no key.","tags":["Authenticated"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"}}}},"/api/v1/merch":{"get":{"operationId":"v1_merch","summary":"Merch catalog","description":"Display the rewards your chapter offers in exchange for earned points — T-shirts, stickers, workshop vouchers — so members know what they're working toward.\n\nServer-side only — requires an API key. Static sites should use /api/public/chapter/{slug}/bundle instead, which needs no key.","tags":["Authenticated"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"401":{"description":"Missing or invalid API key"}}}}}}