> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plato.ae/llms.txt
> Use this file to discover all available pages before exploring further.

# CMS API Overview

> Read and write CMS entries from websites, apps, and trusted integrations.

The CMS API exposes the custom databases you build in Plato CMS.

Use it for websites, catalogs, landing pages, partner portals, and internal tools that need structured content from a Plato workspace.

<CardGroup cols={3}>
  <Card title="List Entries" icon="rows-3" href="/api-reference/cms/list-entries">
    Fetch entries with fields, filters, pagination, and predictable response headers.
  </Card>

  <Card title="Get One Entry" icon="database" href="/api-reference/cms/get-entry">
    Read a single CMS entry by id from a trusted integration.
  </Card>

  <Card title="Create Entry" icon="plus" href="/api-reference/cms/create-entry">
    Add new CMS content from a backend, website, or internal tool.
  </Card>

  <Card title="Update Entry" icon="settings" href="/api-reference/cms/update-entry">
    Patch or replace existing CMS content safely.
  </Card>

  <Card title="Delete Entry" icon="archive" href="/api-reference/cms/delete-entry">
    Remove CMS records when the integration owns the lifecycle.
  </Card>

  <Card title="Fields And Relations" icon="link" href="/api-reference/cms/fields-and-values">
    Understand values, system fields, relation ids, and linked content.
  </Card>
</CardGroup>

## Endpoints

```text theme={null}
GET    /api/public/cms/[modelId]/list
POST   /api/public/cms/[modelId]/list
GET    /api/public/cms/[modelId]/[id]
PATCH  /api/public/cms/[modelId]/[id]
PUT    /api/public/cms/[modelId]/[id]
DELETE /api/public/cms/[modelId]/[id]
```

`modelId` can be the CMS database identifier or the database id.

Use readable database identifiers such as `products`, `locations`, or `team_members` when possible. They make API URLs easier to maintain.

## Authentication

CMS endpoints accept:

```http theme={null}
Authorization: Bearer plato_your_api_key
```

or:

```http theme={null}
x-api-key: plato_your_api_key
```

Older integrations can use:

```text theme={null}
?apiKey=plato_your_api_key
```

The API key role must include CMS access.

## System Fields

Every entry can include:

| Field       | Meaning                           |
| ----------- | --------------------------------- |
| `id`        | Entry id.                         |
| `createdAt` | Entry creation date.              |
| `updatedAt` | Last update date, when available. |

These fields are selected by default when no `fields` query is sent.

## Response Headers

List and entry responses include CMS metadata headers.

| Header                   | Meaning                                            |
| ------------------------ | -------------------------------------------------- |
| `x-cms-model-id`         | The internal database id that matched the request. |
| `x-cms-model-identifier` | The readable database identifier, when configured. |
| `x-cms-total`            | Total number of entries for list requests.         |
| `x-cms-limit`            | Limit used by the list request.                    |
| `x-cms-offset`           | Offset used by the list request.                   |
| `x-cms-has-more`         | `1` when more rows are available.                  |

## Typical Flow

1. Create or open the CMS database in Plato.
2. Confirm the database identifier and field keys.
3. Create an API key with CMS access.
4. List entries with the fields your app needs.
5. Use create, update, and delete only from trusted server code.

For schema setup, see [CMS Developer Tools](/cms/developer/tools).
