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)

ParameterValue
YOUR_SITE_CODEauto-generated site code
YOUR_CMS_SITE_KEYsite key rb_cms_… (X-Public-Key)
X-Public-Key: YOUR_CMS_SITE_KEY

Identity (linked to an application)

ParameterValue
YOUR_APP_CODEapplication code
YOUR_SITE_CODEsite code
YOUR_PUBLIC_KEYapplication 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 use scheduled_at + admin calendar; worker POST /v1/internal/social/tick publishes 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_url audit; 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_url is 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.