# CMS

Canonical page: https://docs.ovok.com/python-sdk/namespaces/cms

`ovok.cms` reads the published CMS content of the client's tenant: legal pages, translations,
release notes and any other public collection. The tenant comes from the client's config, so
every read is scoped to it.

## Show a legal page [#show-a-legal-page]

Read a legal page by its slug. Pass `locale` to pick a language; unsupported languages fall back
to English.

```python
from ovok_sdk import Ovok

ovok = Ovok("https://api.sandbox.ovok.com", "your-tenant")
terms = ovok.cms.legal_page("terms-of-service", {"locale": "de"})
```

## Load the app's translations [#load-the-apps-translations]

`translations()` reads every translation document and returns one nested dictionary keyed by
document slug and the dotted key's parts.

```python
strings = ovok.cms.translations("de-CH")
print(strings["common"]["buttons"]["save"])
```

## List release notes and other collections [#list-release-notes-and-other-collections]

`release_notes.list()` returns the newest notes first. `documents.list()` and
`documents.retrieve()` read any public collection. Lists return a [`Page`](/python-sdk/getting-started).

```python
for note in ovok.cms.release_notes.list({"limit": 10}).auto_paging_iter():
    print(note["title"])

faq = ovok.cms.documents.retrieve("faqs", "billing", {"locale": "en"})
```

To manage the project's own content entries, use [`ovok.content`](/python-sdk/namespaces/content).

## API reference [#api-reference]

See [`ovok_sdk.resources.cms`](/python-sdk/reference/resources/cms) for every method, parameter and error.
