Blog, knowledge base, documents, downloads, and changelog for your landing via SDK.
CMS Site
CMS site — landing content (blog, KB, documents, downloads, changelog). Edit in Platform admin (CMS Site). Guests (no JWT) only see published items.
An application is optional: on create you get site_code and a one-time rb_cms_… key. You can link an application later (site Overview → Application).
Identity (standalone landing)
| Parameter | Value |
|---|---|
YOUR_SITE_CODE | auto-generated site code |
YOUR_CMS_SITE_KEY | site key rb_cms_… (X-Public-Key) |
X-Public-Key: YOUR_CMS_SITE_KEY
Identity (linked to an application)
| Parameter | Value |
|---|---|
YOUR_APP_CODE | application code |
YOUR_SITE_CODE | site code |
YOUR_PUBLIC_KEY | application public key rb_pub_… |
X-Public-Key: YOUR_PUBLIC_KEY
X-Application-Code: YOUR_APP_CODE
End-user JWT is not required for CMS reads on the landing.
Sections
- Blog — markdown posts, cover (
cover_url), categories; statuses draft / scheduled / published / archived; scheduled posts usescheduled_at+ admin calendar; workerPOST /v1/internal/social/tickpublishes due posts - Knowledge base — help / docs tree: folders (up to 5 levels) + pages. Not release notes
- Health / SEO — project cabinet (KPIs, plan, clusters, competitors) + live
website_urlaudit; see Site Health / SEO - RKN / 152-FZ — legal slots + landing checks for personal-data / Roskomnadzor expectations; see RKN / 152-FZ
- Documents — arbitrary files / URLs / markdown for the landing (no legal templates)
- Legal documents — privacy, consents, offers; see Consents & legal docs
- Banners — HTML modal / fullscreen; see Banners
- Branding — icon and website URL on Overview; see Icons & websites
- Downloads — per-platform channels, versions, file or external URL
- Changelog — release notes (“what’s new in 1.2”) for the versions block on the site
Only status = published is returned. Drafts and scheduled posts appear as 404 to guests.
Public HTTP
Standalone (no app):
GET /v1/sites/YOUR_SITE_CODE
GET /v1/sites/YOUR_SITE_CODE/blog/categories
GET /v1/sites/YOUR_SITE_CODE/blog/posts?locale=en
GET /v1/sites/YOUR_SITE_CODE/blog/posts?locale=en&category=news
GET /v1/sites/YOUR_SITE_CODE/blog/posts/{slug}
GET /v1/sites/YOUR_SITE_CODE/kb/tree
GET /v1/sites/YOUR_SITE_CODE/kb/articles/{slug}
GET /v1/sites/YOUR_SITE_CODE/kb/popular?limit=10
GET /v1/sites/YOUR_SITE_CODE/downloads
GET /v1/sites/YOUR_SITE_CODE/downloads/android/latest
GET /v1/sites/YOUR_SITE_CODE/changelog
GET /v1/sites/YOUR_SITE_CODE/changelog/{slug}
GET /v1/sites/YOUR_SITE_CODE/documents
GET /v1/sites/YOUR_SITE_CODE/documents/{slug}
GET /v1/sites/YOUR_SITE_CODE/legal
GET /v1/sites/YOUR_SITE_CODE/legal/{doc_kind}
Landing files/links use documents. Privacy / consents / offers use /legal only (admin Legal documents). Do not use legacy documents/by-kind for legal texts.
Document list (site key required) includes public_url — open in the browser without headers:
GET /v1/cms-documents/{access_token}
PDFs and images open inline; text documents (source_type: text) render as an HTML page from markdown; other files download.
With application — same paths under:
GET /v1/applications/YOUR_APP_CODE/sites/YOUR_SITE_CODE
SDK (TypeScript)
const cats = await platform.listCmsBlogCategories("YOUR_SITE_CODE");
const posts = await platform.listCmsBlogPosts("YOUR_SITE_CODE", {
locale: "en",
category: "news",
});
const docs = await platform.listCmsDocuments("YOUR_SITE_CODE");
const legal = await platform.listSiteLegalDocuments("YOUR_SITE_CODE");
const privacy = await platform.getSiteLegalDocument(
"YOUR_SITE_CODE",
"privacy_policy",
);
const tree = await platform.getCmsKbTree("YOUR_SITE_CODE");
const dl = await platform.getCmsDownloadLatest("YOUR_SITE_CODE", "android");
const log = await platform.listCmsChangelog("YOUR_SITE_CODE");
Methods: getCmsSite, listCmsBlogCategories, listCmsBlogPosts, getCmsBlogPost, getCmsKbTree, getCmsKbArticle, listCmsPopularKbArticles, listCmsDocuments, getCmsDocument, listSiteLegalDocuments, getSiteLegalDocument, listSiteBanners, getSiteBanner, getCmsDownloads, getCmsDownloadLatest, listCmsChangelog, getCmsChangelogEntry. Flutter mirrors the same names.
For legal texts do not use getCmsDocumentByKind — only listSiteLegalDocuments / getSiteLegalDocument.
Security & cache
- Prefer fetching CMS from your landing’s server (SSR/BFF) when possible.
- Document
public_urlis safe to put in an<a href>on the landing (unguessable token). - Render markdown safely (no raw HTML injection).
- Cache GET responses on the landing for 60–300 seconds.
Admin
CMS Site → site cards → Blog / Knowledge base / Legal documents / Documents / Downloads / Changelog. Legal texts: Legal documents + /legal (listSiteLegalDocuments). Documents is for arbitrary landing files (listCmsDocuments), not privacy/consent.