Skip to main content

Content (CMS)

Ovok ships a headless CMS that lives alongside your FHIR data plane. Authors create and edit content in the Console; your apps fetch it over a thin HTTP surface scoped to your project.

It is opt-in per project. Once enabled, it provisions a dedicated tenant on the Ovok-managed Payload CMS backend, scoped to your Medplum project ID — so content from one project is invisible to another.

Before enabling, the Content section of the Console shows a single "Payload CMS · OFF" card pointing you at the toggle:

Console Content section showing Payload CMS Off card with an Enable the CMS for this project button

When to use it​

Use it forDon't use it for
Marketing pages, FAQ entries, onboarding flows, legal textPer-patient clinical content
Localised UI copy your apps renderHigh-volume telemetry
Provider directories, opt-in disclosures, release notesAnything that belongs in a FHIR resource
Image / video assets uploaded by your editorial teamAudit-relevant records

If the content has a FHIR shape (Patient, Observation, Communication, Questionnaire…), put it in FHIR. The CMS is for the things FHIR doesn't model — copy, configuration, marketing, media.

How it fits together​

  • Console — /settings/general flips the project into the CMS. This provisions the Payload tenant and adds a CMS line item to your Stripe subscription. See Enable CMS.
  • Authoring API — /v1/content/* is a thin reverse-proxy that forwards authenticated requests to the project's Payload tenant. Used by the Console and any trusted backend you write. See Authoring with the Content API.
  • Delivery API — /v1/public/cms/... serves published content with an API key, no JWT needed. This is what your frontend hits. See Public delivery.

What you ship against​

SurfacePathAuthCaller
Authoring/v1/content/*Project JWT (Bearer)Console, trusted backends
Delivery/v1/public/cms/:typeSlug/itemsAPI key headerFrontend / mobile clients
Provisioning/v1/cms/projects/:slug/environmentsProject JWT (admin)Console, control plane proxy

The legacy /v1/cms/:type/... routes are still live for backwards compatibility, but they are not the recommended surface. New integrations should use Content + Delivery above. Legacy routes are documented in the internal spec only.

Architecture​

The CMS runs on shared payload-ovok infrastructure with row-level tenant isolation and per-environment content partitions. See Payload stack and CMS environments.

Next​