{"openapi":"3.1.0","info":{"title":"Datová akademie — veřejné API","version":"1.0.0","description":"Veřejné, čtecí (read-only) REST API katalogu kurzů, termínů, slovníku pojmů a návodů Datové akademie. Bez nutnosti autentizace, CORS povolen pro všechny origin. Určeno pro AI agenty/asistenty i vlastní integrace. Ke každé obsahové stránce navíc existuje markdown zrcadlo — přidejte `.md` za adresu (např. `/kurzy/<slug>.md`), nebo pošlete hlavičku `Accept: text/markdown`.","contact":{"email":"info@datova-akademie.cz"}},"servers":[{"url":"https://datova-akademie.cz","description":"Produkční server"}],"paths":{"/api/v1/courses":{"get":{"summary":"Seznam kurzů","description":"Vrátí všechny publikované kurzy s cenou, termíny a lektory. Lze filtrovat podle technologie, úrovně a tematické oblasti.","x-llm-hint":"Použijte pro procházení celého katalogu kurzů nebo filtrování podle technologie (r, python, excel…) či úrovně (beginner, intermediate, advanced).","parameters":[{"name":"technology","in":"query","required":false,"schema":{"type":"string"},"description":"Filtr podle technologie (např. r, python, excel, powerbi, statistica, qgis)."},{"name":"level","in":"query","required":false,"schema":{"type":"string","enum":["beginner","intermediate","advanced"]},"description":"Filtr podle úrovně."},{"name":"area","in":"query","required":false,"schema":{"type":"string"},"description":"Filtr podle tematické oblasti (např. statistika, biostatistika, geodata)."}],"responses":{"200":{"description":"Seznam kurzů odpovídající zadaným filtrům.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Course"}},"count":{"type":"integer","description":"Počet položek v `items`."},"generatedAt":{"type":"string","format":"date-time","description":"Kdy byla odpověď vygenerována."}}}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Bez obsahu, jen CORS hlavičky."}}}},"/api/v1/courses/{slug}":{"get":{"summary":"Detail jednoho kurzu","description":"Vrátí kompletní detail kurzu včetně osnovy, FAQ, cílové skupiny a předpokladů.","x-llm-hint":"Použijte, když už znáte slug kurzu (z /api/v1/courses nebo z URL) a potřebujete plný detail včetně osnovy a FAQ.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Slug kurzu."}],"responses":{"200":{"description":"Detail kurzu.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseDetail"}}}},"404":{"description":"Kurz s tímto slugem neexistuje.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Bez obsahu, jen CORS hlavičky."}}}},"/api/v1/sessions":{"get":{"summary":"Vypsané termíny napříč kurzy","description":"Vrátí vypsané termíny všech kurzů od zadaného data (výchozí: dnešek), vzestupně seřazené.","x-llm-hint":"Použijte pro otázky typu „jaké kurzy se konají v listopadu\" bez nutnosti procházet každý kurz zvlášť.","parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Nejdřívější datum zahájení (RRRR-MM-DD); výchozí je dnešní datum."}],"responses":{"200":{"description":"Seznam termínů.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Session"}},"count":{"type":"integer","description":"Počet položek v `items`."},"generatedAt":{"type":"string","format":"date-time","description":"Kdy byla odpověď vygenerována."}}}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Bez obsahu, jen CORS hlavičky."}}}},"/api/v1/glossary":{"get":{"summary":"Slovník pojmů","description":"Vrátí všechna hesla slovníku statistických pojmů.","x-llm-hint":"Použijte pro vysvětlení statistického pojmu a odkaz na jeho stránku, ne pro vyhledávání kurzů.","responses":{"200":{"description":"Seznam hesel slovníku.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GlossaryEntry"}},"count":{"type":"integer","description":"Počet položek v `items`."},"generatedAt":{"type":"string","format":"date-time","description":"Kdy byla odpověď vygenerována."}}}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Bez obsahu, jen CORS hlavičky."}}}},"/api/v1/guides":{"get":{"summary":"Návody a srovnání nástrojů","description":"Vrátí publikované návody („jak na…\") a srovnání nástrojů („R, nebo Statistica?\") v jednom seznamu; pole `type` je rozlišuje.","x-llm-hint":"Použijte pro krátké praktické odpovědi a srovnání nástrojů, které nejsou vázané na konkrétní kurz.","responses":{"200":{"description":"Seznam návodů a srovnání.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Guide"}},"count":{"type":"integer","description":"Počet položek v `items`."},"generatedAt":{"type":"string","format":"date-time","description":"Kdy byla odpověď vygenerována."}}}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Bez obsahu, jen CORS hlavičky."}}}},"/api/v1/search":{"get":{"summary":"Fulltextové vyhledávání","description":"Prohledá celý obsahový index webu (kurzy, slovník, návody, srovnání, lektory, stránky) a vrátí až 20 nejrelevantnějších výsledků.","x-llm-hint":"Použijte jako obecné vyhledávání napříč celým webem, když nevíte předem, do jaké kategorie dotaz spadá.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Hledaný text (min. 2 znaky se počítají)."}],"responses":{"200":{"description":"Výsledky vyhledávání.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}},"count":{"type":"integer","description":"Počet položek v `items`."},"generatedAt":{"type":"string","format":"date-time","description":"Kdy byla odpověď vygenerována."}}}}}},"400":{"description":"Chybí parametr q.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"Bez obsahu, jen CORS hlavičky."}}}},"/api/v1/openapi.json":{"get":{"summary":"Tento OpenAPI popis","description":"Vrátí strojově čitelný popis celého API (tento dokument).","x-llm-hint":"Použijte pro zjištění, jaké další cesty a schémata API nabízí, než začnete volat konkrétní routy.","responses":{"200":{"description":"OpenAPI 3.1 dokument.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Strojově čitelný kód chyby (např. `not_found`, `missing_query`)."},"message":{"type":"string","description":"Lidsky čitelná zpráva o chybě, česky."}}}}},"Session":{"type":"object","description":"Jeden vypsaný termín kurzu.","properties":{"courseSlug":{"type":"string","description":"Slug kurzu, ke kterému termín patří."},"courseTitle":{"type":"string","description":"Název kurzu."},"startDate":{"type":"string","format":"date","description":"Datum zahájení (RRRR-MM-DD)."},"endDate":{"type":"string","format":"date","description":"Datum ukončení (RRRR-MM-DD); u jednodenního kurzu stejné jako startDate."},"location":{"type":"string","description":"Místo konání (adresa učebny, nebo „Online\")."},"online":{"type":"boolean","description":"True, pokud termín probíhá online (odvozeno z textu místa)."},"capacity":{"type":"integer","description":"Celková kapacita skupiny."},"spotsLeft":{"type":"integer","description":"Počet volných míst."},"status":{"type":"string","enum":["available","full","cancelled","past"],"description":"Stav termínu."},"url":{"type":"string","format":"uri","description":"Odkaz na stránku kurzu s přihláškou."}}},"Course":{"type":"object","description":"Jeden kurz z katalogu Datové akademie.","properties":{"slug":{"type":"string","description":"Jednoznačný identifikátor kurzu v URL."},"url":{"type":"string","format":"uri","description":"Odkaz na stránku kurzu."},"title":{"type":"string","description":"Název kurzu."},"excerpt":{"type":"string","description":"Krátký popis (perex) kurzu."},"technology":{"type":"string","description":"Technologie/nástroj (např. r, python, excel, powerbi, statistica, qgis)."},"area":{"type":"string","description":"Tematická oblast (např. statistika, biostatistika, geodata)."},"level":{"type":"string","enum":["beginner","intermediate","advanced"],"description":"Úroveň kurzu."},"price":{"type":"object","properties":{"amount":{"type":"number","description":"Cena za účastníka v Kč, BEZ DPH."},"currency":{"type":"string","enum":["CZK"]},"vatIncluded":{"type":"boolean","enum":[false]}}},"duration":{"type":"object","description":"Délka kurzu — buď dny (prezenční), nebo hodiny (kratší/online), nikdy obojí zároveň.","properties":{"days":{"type":"integer"},"hours":{"type":"integer"}}},"sessions":{"type":"array","items":{"type":"object","description":"Jeden vypsaný termín kurzu.","properties":{"courseSlug":{"type":"string","description":"Slug kurzu, ke kterému termín patří."},"courseTitle":{"type":"string","description":"Název kurzu."},"startDate":{"type":"string","format":"date","description":"Datum zahájení (RRRR-MM-DD)."},"endDate":{"type":"string","format":"date","description":"Datum ukončení (RRRR-MM-DD); u jednodenního kurzu stejné jako startDate."},"location":{"type":"string","description":"Místo konání (adresa učebny, nebo „Online\")."},"online":{"type":"boolean","description":"True, pokud termín probíhá online (odvozeno z textu místa)."},"capacity":{"type":"integer","description":"Celková kapacita skupiny."},"spotsLeft":{"type":"integer","description":"Počet volných míst."},"status":{"type":"string","enum":["available","full","cancelled","past"],"description":"Stav termínu."},"url":{"type":"string","format":"uri","description":"Odkaz na stránku kurzu s přihláškou."}}},"description":"Vypsané termíny tohoto kurzu."},"instructors":{"type":"array","items":{"type":"string"},"description":"Jména lektorů, kteří kurz vedou."},"updatedAt":{"type":"string","format":"date-time","description":"Poslední úprava v administraci (jen kurzy spravované v CMS)."}}},"CourseDetail":{"allOf":[{"type":"object","description":"Jeden kurz z katalogu Datové akademie.","properties":{"slug":{"type":"string","description":"Jednoznačný identifikátor kurzu v URL."},"url":{"type":"string","format":"uri","description":"Odkaz na stránku kurzu."},"title":{"type":"string","description":"Název kurzu."},"excerpt":{"type":"string","description":"Krátký popis (perex) kurzu."},"technology":{"type":"string","description":"Technologie/nástroj (např. r, python, excel, powerbi, statistica, qgis)."},"area":{"type":"string","description":"Tematická oblast (např. statistika, biostatistika, geodata)."},"level":{"type":"string","enum":["beginner","intermediate","advanced"],"description":"Úroveň kurzu."},"price":{"type":"object","properties":{"amount":{"type":"number","description":"Cena za účastníka v Kč, BEZ DPH."},"currency":{"type":"string","enum":["CZK"]},"vatIncluded":{"type":"boolean","enum":[false]}}},"duration":{"type":"object","description":"Délka kurzu — buď dny (prezenční), nebo hodiny (kratší/online), nikdy obojí zároveň.","properties":{"days":{"type":"integer"},"hours":{"type":"integer"}}},"sessions":{"type":"array","items":{"type":"object","description":"Jeden vypsaný termín kurzu.","properties":{"courseSlug":{"type":"string","description":"Slug kurzu, ke kterému termín patří."},"courseTitle":{"type":"string","description":"Název kurzu."},"startDate":{"type":"string","format":"date","description":"Datum zahájení (RRRR-MM-DD)."},"endDate":{"type":"string","format":"date","description":"Datum ukončení (RRRR-MM-DD); u jednodenního kurzu stejné jako startDate."},"location":{"type":"string","description":"Místo konání (adresa učebny, nebo „Online\")."},"online":{"type":"boolean","description":"True, pokud termín probíhá online (odvozeno z textu místa)."},"capacity":{"type":"integer","description":"Celková kapacita skupiny."},"spotsLeft":{"type":"integer","description":"Počet volných míst."},"status":{"type":"string","enum":["available","full","cancelled","past"],"description":"Stav termínu."},"url":{"type":"string","format":"uri","description":"Odkaz na stránku kurzu s přihláškou."}}},"description":"Vypsané termíny tohoto kurzu."},"instructors":{"type":"array","items":{"type":"string"},"description":"Jména lektorů, kteří kurz vedou."},"updatedAt":{"type":"string","format":"date-time","description":"Poslední úprava v administraci (jen kurzy spravované v CMS)."}}},{"type":"object","properties":{"instructors":{"type":"array","description":"Lektoři s odkazem na profil (na rozdíl od seznamové routy, kde jsou jen jména).","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":["string","null"],"format":"uri","description":"Odkaz na profil lektora, nebo null bez vlastní stránky."}}}},"syllabus":{"type":"array","description":"Osnova kurzu po blocích.","items":{"type":"object","properties":{"blockTitle":{"type":"string"},"content":{"type":"string"},"bullets":{"type":"array","items":{"type":"string"}}}}},"faq":{"type":"array","description":"Časté otázky ke kurzu.","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}}}},"targetAudience":{"type":"array","description":"Pro koho je kurz určen.","items":{"type":"object","properties":{"segment":{"type":"string"},"description":{"type":"string"}}}},"prerequisites":{"type":"string","description":"Předpoklady pro absolvování kurzu."},"materials":{"type":"string","description":"Co účastník dostane (materiály, certifikát…), položky oddělené čárkou."}}}]},"GlossaryEntry":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string","description":"Název pojmu (např. „Medián\")."},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"category":{"type":"string","description":"Tematický celek slovníku (např. „Popisná statistika\")."}}},"Guide":{"type":"object","properties":{"type":{"type":"string","enum":["navod","srovnani"],"description":"Návod (jak na…), nebo srovnání nástrojů (X, nebo Y?)."},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"shortAnswer":{"type":"string","description":"Krátká přímá odpověď (40–60 slov)."},"url":{"type":"string","format":"uri"},"updatedAt":{"type":"string","format":"date"}}},"SearchResult":{"type":"object","description":"Jedna položka obsahového indexu s přiděleným skóre relevance.","properties":{"type":{"type":"string","enum":["kurz","balicek","heslo","clanek","navod","srovnani","nastroj","lektor","webinar","stranka"]},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"title":{"type":"string"},"popis":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"score":{"type":"number","description":"Interní skóre relevance (vyšší = relevantnější), jen pro řazení."}}}}}}