# Zucms

## Core Concepts

> Category: Getting Started

---

## Pages

- [Introduction](https://docs.zucms.co/introduction)

### API

- [RESTful API](https://docs.zucms.co/api/rest)
- [Typescript SDK](https://docs.zucms.co/api/typescript)

### Getting Started

- [Quick Start](https://docs.zucms.co/getting-started/quick-start)
- [Core Concepts](https://docs.zucms.co/getting-started/core-concepts)

### Models

- [Overview](https://docs.zucms.co/models/overview)
- [Field Types](https://docs.zucms.co/models/field-types)
- [Relations](https://docs.zucms.co/models/relations)

### Content

- [Working with Entries](https://docs.zucms.co/content/working-with-entries)
- [Localization](https://docs.zucms.co/content/localization)

### Access & Security

- [Roles](https://docs.zucms.co/access-security/roles)
- [Access Policies](https://docs.zucms.co/access-security/access-policies)

### Organization

- [Members & Roles](https://docs.zucms.co/organization/members-roles)
- [Audit Log](https://docs.zucms.co/organization/audit-log)
- [Billing & Plans](https://docs.zucms.co/organization/billing-plans)

---

# Core Concepts

Understanding these building blocks makes the rest of the documentation click into place.

## Organization

An organization is the top-level container for all your data. Every model, entry, member, API key, and access policy belongs to exactly one organization. You can be a member of multiple organizations and switch between them in the sidebar.

## Model

A model defines the shape of a piece of content — similar to a database table or a type definition. Each model has a `technicalName` (used in the API), a `displayName` (shown in the UI), and a set of fields.

There are three model types:

| Type | Description |
|---|---|
| `collection` | Holds many entries. Use for posts, products, users, etc. |
| `singleton` | Holds exactly one entry. Use for homepage settings, global config, etc. |
| `taxonomy` | A hierarchical collection. Use for categories, tags, navigation trees. |

## Field

A field is a single typed value inside a model. Each field has a `technicalName`, a `label`, a **data type** (e.g. `string`, `number`, `enum`), and an **input type** that controls how editors interact with it in the UI.

Fields can be marked as:
- **Required** — entry cannot be saved without a value.
- **Localizable** — the value can differ per locale.
- **Hidden in UI / API** — controlled via access policy field permissions.

## Entry

An entry is one record inside a collection or taxonomy model, or the single record of a singleton. Entries are stored in MongoDB. Each entry carries a set of field values, a creation timestamp, and an update timestamp.

## Access Policy

An access policy is a named set of permissions. Policies can be assigned to **users** or **API keys**. They control what a user or key can do at every level: tenant settings, model builder, files, content, and individual fields.

A special built-in policy called **Administrator** grants full access and cannot be modified.

## API Key

API keys authenticate requests to the REST API. Each key belongs to one organization and can have one or more access policies attached to it.

```
Authorization: Bearer zw_your_api_key
```

The `zw_` prefix identifies all Zucms API keys.

## Locale

When i18n is enabled, localizable fields store a separate value per locale. The API returns the value for the requested locale and falls back to the primary locale if no translation exists.
