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

# Decide what writers fill in

> Name the fields an email template asks for, so whoever fills it in knows exactly what to write.

Every template has a list of the fields each new email needs from its writer, such as a headline and a button label. This list is called the **copy schema**. Whoever fills in the template supplies exactly those fields and nothing else. A clear list is what makes the template easy to use.

## What goes in it

Include the words that change from send to send. Leave out everything that stays the same. A typical email template asks for:

| Field | What it holds |
| - | - |
| `headline` | The main claim at the top of the email |
| `body` | The message itself |
| `ctaLabel` | The button text |
| `ctaUrl` | Where the button goes |

The subject line and preheader belong to the email itself, not this list. See [Creating an email](https://docs.allgoodhq.com/mk/content/email/emails/creating-an-email.md).

## Name fields for the person filling them in

Write the list for the person who will use it. `headline` and `ctaLabel` tell a marketer what to write. `field_1` and `field_2` don't.

Keep names short and specific, and use one style across all your templates. If one template says `ctaLabel` and another says `buttonText`, every marketer has to learn both.

## How the design uses the fields

Wherever the email needs a value, the template's design points at a copy field by name. Fill in `headline` once, and everywhere the design shows the headline picks it up. See [Personalizing an email](https://docs.allgoodhq.com/mk/content/email/emails/personalizing-an-email.md#one-field-four-places) for one field followed from schema to inbox.

## Edit the fields yourself

allGood usually writes the schema when it builds a template, but you don't have to rely on that. The schema is a file in the template, called `template.json`, and you can edit it in the Workshop or ask an AI assistant connected to your library to edit it.

It uses a standard format for structured data (JSON Schema). Each field is one entry:

```json theme={null}
{
  "type": "object",
  "properties": {
    "headline": {
      "type": "string",
      "title": "Headline",
      "default": "Your pipeline report is ready"
    },
    "points": {
      "type": "array",
      "items": { "type": "string" },
      "title": "Key points"
    },
    "ctaLabel": { "type": "string", "title": "Button text" }
  },
  "required": ["headline", "ctaLabel"]
}
```

| Property | What it does |
| - | - |
| `type` | The kind of value, and the kind of box on the form: `string`, `array`, `boolean`, or `number`. |
| `title` | The label the writer sees. Without one, the form shows the raw field name. |
| `default` | Text already filled in when someone starts a new email from this template. |
| `required` | A list, at the end of the schema, of fields the writer must fill in. |

Use `array` when the number of items changes from email to email, such as bullet points. The design repeats over the list with a [loop](https://docs.allgoodhq.com/mk/content/email/emails/conditional-content-and-lists.md).

### Defaults and sample copy

A `default` fills the form for a new email, and the writer can change it. You can also type real sample copy straight into the template's design. Both work. A default is easier for writers to see and replace. Text in the design stays the same in every email unless someone edits the design.

### What allGood checks

* **The shape of the schema** is checked when you save the template. A malformed field fails.
* **Each placeholder in an email's design** must point at a field that exists in its copy. A placeholder for a missing field is caught.
* **The finished copy against the schema** isn't checked. Nothing confirms that a filled-in email supplies every field, or follows the type, that its template declares.

> [!NOTE]
>
> Treat the schema as a strong convention, not a guarantee. After you edit one, create a test email and check that every field appears.

## Related articles

* [What an email template is](https://docs.allgoodhq.com/mk/content/email/templates/what-an-email-template-is.md)
* [Copy and variants](https://docs.allgoodhq.com/mk/content/copy-and-variants.md)
* [Creating an email](https://docs.allgoodhq.com/mk/content/email/emails/creating-an-email.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.