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