{"openapi":"3.0.3","info":{"title":"SamfunnPrep Public API","version":"1.1.0","license":{"name":"SamfunnPrep public-content AI-use permission","url":"https://samfunnprep.no/ai-policy.txt"},"description":"Read-only access to CMS-published, indexable SamfunnPrep articles about life in Norway and the Samfunnskunnskapsprøven. No authentication; CORS-open; cacheable. Public content may be used for search, AI retrieval and model training under the linked policy. File-backed articles are also discoverable through the sitemap. Cite the returned canonical HTML url. Respect 429/503 and Retry-After."},"servers":[{"url":"https://samfunnprep.no/api/public/v1"}],"paths":{"/articles":{"get":{"summary":"List published articles","description":"Paginated list without article bodies. Follow pagination.totalPages. Items expose availableLanguages, requestedLocale, contentLocale, url, markdownUrl and summaryUrl.","parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2,3}(?:-[a-z]{2,4})?$","default":"no"},"description":"Requested content language. See /locales for enabled languages and availableLanguages per article. Untranslated fields may fall back to Norwegian. contentLocale and url identify the available article language; use Markdown or the summary API for exact-translation retrieval."},{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"A page of articles"},"429":{"description":"Rate limited (120 req/min/IP)"}}}},"/articles/{slug}":{"get":{"summary":"Get one published article","description":"Full article incl. content, faq, key_takeaways and sources.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2,3}(?:-[a-z]{2,4})?$","default":"no"},"description":"Requested content language. See /locales for enabled languages and availableLanguages per article. Untranslated fields may fall back to Norwegian. contentLocale and url identify the available article language; use Markdown or the summary API for exact-translation retrieval."}],"responses":{"200":{"description":"The article"},"404":{"description":"Not found or not published"}}}},"/taxonomy":{"get":{"summary":"List categories and tags with counts","parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","pattern":"^[a-z]{2,3}(?:-[a-z]{2,4})?$","default":"no"},"description":"Requested content language. See /locales for enabled languages and availableLanguages per article. Untranslated fields may fall back to Norwegian. contentLocale and url identify the available article language; use Markdown or the summary API for exact-translation retrieval."}],"responses":{"200":{"description":"Categories and tags present in the corpus"}}}},"/locales":{"get":{"summary":"List enabled content languages","description":"Language codes, BCP 47 tags, direction, fallback and isUiLocale. A language being enabled does not mean every article has that translation.","responses":{"200":{"description":"Enabled locale registry"}}}}}}