# Models

Your schema is defined by the models you create.

Your schema is defined by the models you create, and [fields](https://hygraph.com/docs/api-reference/schema/field-types) you add. Inside the schema builder, you can add fields, create relationships between models, and much more.

**Pro Tip:**
All changes to your schema are immediately available via GraphQL.

## Create a model

All models have the following settings:

| Property      | Example      | Description                                                     |
| ------------- | ------------ | --------------------------------------------------------------- |
| Display name  | `Post`       | The name displayed inside Hygraph, and content editors.         |
| API ID        | `Post`       | The name for fetching a single entry                            |
| Plural API ID | `Posts`      | The name for fetching multiple entries                          |
| Description   | `Blog posts` | Optional hint for content editors when interacting with fields. |

Hygraph will automatically scaffold default values for `API ID`, and `Plural API ID` based on the `Display name`. These values will be available via the API as camel case.

---

For example, let's imagine we have the model `Post`. The following queries, and mutations would be generated by the API automatically, as well as custom input types:

- `post`
- `posts`
- `postVersion`
- `postsConnection`
- `createPost`
- `updatePost`
- `deletePost`
- `upsertPost`
- `publishPost`
- `unpublishPost`
- `updateManyPostsConnection`
- `deleteManyPostsConnection`
- `publishManyPostsConnection`
- `unpublishManyPostsConnection`

Learn more about [queries](https://hygraph.com/docs/api-reference/content-api/queries), and [mutations](https://hygraph.com/docs/api-reference/content-api/mutations).

## Edit a model

You can at any time update the settings, and [Preview URLs](#preview-urls) for your content models from within the schema builder.

## Delete a model

For each of the content models you have created, you can choose to update, or delete from the schema builder.

Deleting a model will also delete all of the content entries.

## Adding fields

You can add fields to all custom models, and the system Asset model by selecting the [field type](https://hygraph.com/docs/api-reference/schema/field-types) from the fields list when viewing a model.

## System fields

All models have system fields. You don't need to add an ID, created, or updated timestamp. These are managed by Hygraph automatically.

Learn more about [system fields](https://hygraph.com/docs/api-reference/schema/system-fields).

## Preview URLs

It's most common to create a preview URL for models that represent a page, and have a field such as a slug.

The fields on your model are available to use within the URL template. For example, a `Post` model may have the following preview URLs:

| Preview name      | URL template                                             |
| ----------------- | -------------------------------------------------------- |
| `Production`      | `https://hygraph.com/blog/{slug}`                        |
| `Staging`         | `https://staging.hygraph.com/blog/{slug}`                |
| `Next.js Preview` | `https://hygraph.com/api/preview?secret=abc&slug={slug}` |

## Embedded types

All models can be embedded into the [Rich Text Field Type](https://hygraph.com/docs/api-reference/schema/field-types#rich-text) via a configuration setting. On the API side, we create a union relation that references the selected model.
