# Murit CMS > Headless CMS engineered for modern web teams and vibe coders. Murit CMS provides an isolated, multi-tenant headless content management engine built on Payload 3 and Next.js 16. It serves clean, read-only Content API v1 DTOs directly to client frontends without requiring website rebuilds when editors publish content. ## Key Links - Main Website: https://murit.space - Developer Documentation: https://murit.space/docs - AI & Vibe-Coding Hub: https://murit.space/docs/ai - Create an account: https://murit.space/signup - OpenAPI 3.1 Spec: https://murit.space/openapi.json - Full LLM Specification: https://murit.space/llms-full.txt - Sitemap Index: https://murit.space/sitemap.xml - AI Agent Standards: AGENTS.md, CLAUDE.md, OPENCODE.md, opencode.json, .cursorrules ## Content API v1 Specification Base URL: {CMS_BASE_URL} (e.g. process.env.CMS_BASE_URL or https://murit.space) Public Site Key: {CMS_SITE_KEY} (e.g. process.env.CMS_SITE_KEY) ### Endpoints - GET /api/content/v1/sites/{siteKey} Returns site metadata (name, defaultLocale, blogBasePath, primaryURL, timezone, seoDefaults). Supports root '/' blog base paths. - GET /api/content/v1/sites/{siteKey}/posts?limit={1-50}&cursor={opaque}&category={slug}&tag={slug}&format={default|astro} Returns paginated published post summaries. When format=astro is provided, returns flat Astro-ready posts. - GET /api/content/v1/sites/{siteKey}/posts/{slug}?format={default|astro} Returns full post with pre-rendered, sanitized lexical HTML (contentHtml), categories, tags, and SEO metadata. - GET /api/content/v1/sites/{siteKey}/legacy-posts Returns { posts: [AstroPost] } of published posts optimized for Astro 5 and SSG with preserved legacy URLs, canonical URLs, redirectUrls, and rich media. - GET /rjls-api/posts?siteKey={siteKey} Backward-compatibility alias for the pre-migration RJLS frontend. Requires an explicit registered siteKey and returns only that website's published posts. - GET /api/content/v1/sites/{siteKey}/sitemap?limit={1-500}&cursor={opaque} Returns list of published post loc URLs and lastmod timestamps for sitemap generation. - GET /api/content/v1/sites/{siteKey}/preview?token={signedToken} Redeems an ephemeral 5-minute cryptographic preview token to inspect saved drafts. - POST /api/workspace/migrate Authenticated endpoint for bulk legacy blog migration (WordPress, Payload, custom feeds) with slug and SEO preservation. ## Integration Principles CMS operators: production requires the registered 20260909_122610_legacy_redirects schema migration for legacyUrl, redirectUrls, and nullable blogBasePath. Frontend integrations do not run CMS database migrations. 1. Public Site Key is an identifier, not a secret. It is safe to use in client code. 2. Posts contain pre-rendered, sanitized 'contentHtml' ready for direct dangerouslySetInnerHTML / set:html injection. 3. Content API responses set 'Cache-Control: public, s-maxage=60, stale-while-revalidate=300' and include 'ETag' headers. 4. For full schemas, TypeScript types, and framework snippets, fetch https://murit.space/llms-full.txt.