# List published items of a content type

Canonical page: https://docs.ovok.com/api/payload-cms-public-delivery/list-published-items-of-a-content-type

`GET /v1/public/cms/{contentTypeSlug}/items`

Lists the published items of a user-defined content type for one tenant. First-class collections are read with `GET /v1/public/cms/collections/{collectionSlug}/items` instead.

**Auth:** one of the following:

- The CMS public API key, in the `x-api-key` header, as `Authorization: Bearer <key>`, or as the `apiKey` query parameter.
- A signed-in Ovok session (bearer token), which may only read its own tenant.

**Scope:** the tenant you name, by tenant code (`x-ovok-tenant-code` header or `tenant` query parameter) or by project id (`x-ovok-medplum-project-id` header or `projectId` query parameter). Headers win over query parameters, and a tenant code wins over a project id. If you name neither, a signed-in session reads its own tenant. Each Ovok deployment has one set of content; there is no environment to choose.

## Behaviour

- Returns the CMS `content-items` whose content type has the slug `contentTypeSlug` and whose status is `published`, in the CMS list envelope.
- At most 100 items are returned. There is no paging, sorting or locale selection on this route.
- Responses are cached by Ovok for up to 60 seconds. A request that names a tenant gets `Cache-Control: public, s-maxage=60, stale-while-revalidate=300` and a `Vary` on the tenant and API key headers. A request that names no tenant gets `Cache-Control: no-store`. Error responses carry neither.

## Example

```bash
curl -X GET 'https://api.sandbox.ovok.com/v1/public/cms/faq/items?tenant=my-medical-project' \
  -H 'x-api-key: <cms public api key>'
```
